help-octave
[Top][All Lists]

 From: John W. Eaton Subject: Indirect Addressing Question Date: Tue, 13 Nov 2001 19:16:56 -0600

```On 13-Nov-2001, Hartmut Henkel <address@hidden> wrote:

| Please excuse the following newbie question:
|
| With
|
| a = [1 1 1 1 1]
| q = [1 1 1 2 2]
|
| the following
|
| a(q(1:5)) = a(q(1:5)) + 10
|
| gives
|
| a = 11 11 1 1 1

In Octave, the RHS is always evalutated first.  So for the above
expression, you have

a(q(1:5)) + 10  ==>  a([1, 1, 1, 2, 2]) + 10

[1, 1, 1, 1, 1] + 10

[11, 11, 11, 11, 11]

then the assignment is performed.  For the above example, we have

a([1, 1, 1, 2, 2]) = [11, 11, 11, 11, 11]

and this expression says to assign

a(1) = 11
a(1) = 11
a(1) = 11
a(2) = 11
a(2) = 11

| But I would expect
|
| a = 31 21 1 1 1
|
| which I get by running the loop
|
| for i = 1 : 5
|   a(q(i)) = a(q(i)) + 10
| endfor
|
| It seems that such indirect addressing is not allowed. Is there a trick
| to circumvent the for-loop?

I'm not sure of a good way.  Perhaps someone else knows a trick?

BTW, this question has come up before.  Is there some other array
language that works like this?

jwe

-------------------------------------------------------------
Octave is freely available under the terms of the GNU GPL.

Octave's home on the web:  http://www.octave.org
How to fund new projects:  http://www.octave.org/funding.html
Subscription information:  http://www.octave.org/archive.html
-------------------------------------------------------------

```