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.

 Réponse acceptée

madhan ravi
madhan ravi le 30 Mai 2020
Modifié(e) : madhan ravi le 30 Mai 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 commentaires

Maryam S
Maryam S le 30 Mai 2020
Modifié(e) : madhan ravi le 30 Mai 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.
madhan ravi
madhan ravi le 30 Mai 2020
It should work , illustrate for which values it does not work with a simple example.
Maryam S
Maryam S le 30 Mai 2020
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)
Maryam S
Maryam S le 30 Mai 2020
real(A) does not give me zeros. I used A(imag(A)~=0) = 0 and my problem was solved, thanks to you Madhan!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Loops and Conditional Statements dans Centre d'aide et File Exchange

Produits

Version

R2018b

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by