How to get this while cycle?
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Elia Paini
le 16 Août 2021
Commenté : Elia Paini
le 16 Août 2021
Hi, I'm trying to get a while cycle which checks convergence every iteration.
Within the cycle, I'm solving a system which returns each iteration 3 types of solutions: a (vector), B, C (matrices).
Subscript "0" is related to the (l-1) iteraton, the other refers to the (l) iteration.
I wrote this code:
while (abs(a_0-a) > 1e-6) & (abs(B_0-B) > 1e-6) & (abs(C_0-C) > 1e-6)
....
end
It starts, but it do only one iteration, I don't know why.
It should iterate until ALL residues are lower than 1e-6.
Probably it's wrong, maybe due to parentheses or logical operators. I've already tried to change them, but in the other cases it doesn't work.
What should I do?
Thank you for your help!!
0 commentaires
Réponse acceptée
Fabio Freschi
le 16 Août 2021
if B and C are matrices, make them vectors using :
while any(abs(a_0-a) > 1e-6) || any(abs(B_0(:)-B(:)) > 1e-6) || any(abs(C_0(:)-C(:)) > 1e-6)
Plus de réponses (1)
Walter Roberson
le 16 Août 2021
while (abs(a_0-a) > 1e-6) || (abs(B_0-B) > 1e-6) || (abs(C_0-C) > 1e-6)
5 commentaires
Walter Roberson
le 16 Août 2021
while any(abs(a_0-a) > 1e-6, 'all') || any(abs(B_0-B) > 1e-6, 'all') || any(abs(C_0-C) > 1e-6, 'all')
The implication is that at least one of your subtractions is giving back a matrix that is 2 or more dimensions.
Please check that a_0 and a, and B_0 and B, and C_0 and C, have the same orientation if they are vectors. For example,
(1:3).' - (1:3)
is not the vector [0 0 0]
Voir également
Catégories
En savoir plus sur Logical dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!