How to get this while cycle?
    3 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
    Elia Paini
 am 16 Aug. 2021
  
    
    
    
    
    Kommentiert: Elia Paini
 am 16 Aug. 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 Kommentare
Akzeptierte Antwort
  Fabio Freschi
      
 am 16 Aug. 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)
Weitere Antworten (1)
  Walter Roberson
      
      
 am 16 Aug. 2021
        while (abs(a_0-a) > 1e-6) || (abs(B_0-B) > 1e-6) || (abs(C_0-C) > 1e-6)
5 Kommentare
  Walter Roberson
      
      
 am 16 Aug. 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]
Siehe auch
Kategorien
				Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


