loop until condition met
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
im trying to create a loop until a certain condition exists by using the results at the end of each loop to calculate the next iteration. I've shown part of the code below. Iteration to terminate when Va = Vo = Vn.
Vo = [30 15 13 10];% initial V old to calc Re and f.
Va=zeros(size(Vo));
Vn=zeros(size(Vo));
%
while ~all([Va==Vo,Vo==Vn])
%
Re1 = (D(1).*Vo(1)) / nu;
%
Re2 = (D(2).*Vo(2)) / nu;
%
Re3 = (D(3).*Vo(3)) / nu;
%
Re4 = (D(4).*Vo(4)) / nu;
%
A = [Matrix];
b = [Matrix];
Vn = A\b;% solves four unknowns at A\b
%
for i = 1:4
Va(i) = (alpha * Vn(i)) + ((1-alpha) * Vo(i));
Vo(i) = Va(i); %Used as Vo for each in next iteration.
end
end
0 comentarios
Respuesta aceptada
kjetil87
el 1 de Sept. de 2013
Editada: kjetil87
el 1 de Sept. de 2013
Vo = [30 15 13 10];% initial V old to calc Re and f.
MaxIter=1e10;
%
Cntr=0;
while true
Cntr=Cntr+1;
%
Re1 = (D(1).*Vo(1)) / nu;
%
Re2 = (D(2).*Vo(2)) / nu;
%
Re3 = (D(3).*Vo(3)) / nu;
%
Re4 = (D(4).*Vo(4)) / nu;
%
A = [Matrix];
b = [Matrix];
Vn = A\b;% solves four unknowns at A\b
%
for i = 1:4
Va(i) = (alpha * Vn(i)) + ((1-alpha) * Vo(i));
end
if all(abs(Va-Vn(1:4))<1e-10) && all(abs(Va-Vo)<1e-10)
break;
end
if Cntr==MaxIter % add this to avoid being stuck if there is no solution.
break;
end
Vo=Va;
end
0 comentarios
Más respuestas (1)
kjetil87
el 1 de Sept. de 2013
A while loop is what you are looking for it seems.
while ~all([Va==Vo,Vo==Vn])
%your code
end
5 comentarios
kjetil87
el 1 de Sept. de 2013
The error is because Va and Vn is not defined yet. Either pre define or use the answer below. Also note the different compare method used, because i doubt the 3 vectors will be EXACTLY equal so therefor it is better to compare using a threshold.
Ver también
Categorías
Más información sobre Loops and Conditional Statements en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!