# Value not multiplying by -1

2 views (last 30 days)

Show older comments

I have a nested if statement which works as it is supposed to until the last iteration.

Does anyone know why it is not multiplying the last value by -1?

w = x_0 % zero vector

k = 0 % zero value

i=1 % initial value for count

j=-1 % coefficient

for i = 1:n

if Raw_Data(i,2) == Raw_Data (i,3)

fprintf ('ERROR!!!!!)

else if Raw_Data(i,3) == val

w(i,1) = Raw_Data(i,4)

else if Raw_Data(i,2) == val

w(i,1) = j* Raw_Data(i,4)

% Rationalisation Not Working

else w(i,1)= j* Raw_Data(i,4)

end

end

end

i=i+1

end

##### 4 Comments

Adam
on 7 Apr 2015

### Accepted Answer

Thorsten
on 7 Apr 2015

Edited: Thorsten
on 7 Apr 2015

I would suggest to avoid the loop and use logical indexing:

ind = Raw_data(i,3) == val;

w(ind) = Raw_data(:,4);

w(~ind) = j*Raw_data(:,4);

if any(Raw_Data(i,2) == Raw_Data (i,3))

error('values in column 2 and 3 are identical.')

end

Note that in your code

else if Raw_Data(i,2) == val

is not needed, because

w(i,1) = j* Raw_Data(i,4)

in any case.

And if w is a vector, w(i) is the same as w(1,i).

##### 0 Comments

### More Answers (2)

Ingrid
on 7 Apr 2015

in a for loop there is no need to increment the i so just leave out

i = i+1

as this is done automatically.

Also do not use the i as this can be confusing when using imaginary numbers, better practice is to use ii or something completly else (for example counter )

It is not clear why there is an

else if Raw_Data(i,2) == val

when you perform the same function regardless of true/false of this expression

Ilham Hardy
on 7 Apr 2015

Edited: Ilham Hardy
on 7 Apr 2015

Learn on how to debug your code,

##### 3 Comments

Ilham Hardy
on 7 Apr 2015

Ok, did you also notice the mlint warning on your code?

e.g.:

There should not be empty char (read: space) between else and if. So, elseif instead of else if .

### See Also

### Categories

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!