My loop returns imaginary results!

Hello,
I write this simple code in a loop, and I obtain unwabted imaginary results. Could you please tell me where my mistake is:
SO = 0.5 .* ones(10,1);
A(1,:) = 5.02 * (16.6 / 42) ^ 0.33 * SO(1,:) ^ 0.38;
for i = 2 : 10
A(i,:) = 5.02 * ((16.6 - sum(A(1:i-1,:)))/ 42) ^ 0.33 * SO(i,:) ^ 0.38;
end
Thanks in advance
Maryam S.

 Risposta accettata

madhan ravi
madhan ravi il 30 Mag 2020
Modificato: madhan ravi il 30 Mag 2020
Evaluate the part
((16.6 - sum(A(1:i-1,:)))/ 42)
and see what happens when the sum(...) is greater than 16.6
Note: No loop needed here sum(...) could be replaced by cumsum(...) and linear indexing is sufficient, subscript indexing is not needed here since it’s a vector.

5 Commenti

Maryam S
Maryam S il 30 Mag 2020
Modificato: madhan ravi il 30 Mag 2020
Thanks Madhan, I see the problem, now I need to replace the NaN values with zero, so I use A(isnan(A)) = 0, but it does not work. Do you think of another solution?
Thanks
Maryam S.
It should work , illustrate for which values it does not work with a simple example.
from A(7,:) the 16.6 - sum(A(1:i-1,:) gets negative and the resluts get imaginary. But how to replace the imaginary resuts with zero?
After the loop simply use :
real(A)
real(A) does not give me zeros. I used A(imag(A)~=0) = 0 and my problem was solved, thanks to you Madhan!

Accedi per commentare.

Più risposte (0)

Prodotti

Release

R2018b

Tag

Community Treasure Hunt

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

Start Hunting!

Translated by