loop until condition met

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

 Respuesta aceptada

kjetil87
kjetil87 el 1 de Sept. de 2013
Editada: kjetil87 el 1 de Sept. de 2013

0 votos

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

Más respuestas (1)

kjetil87
kjetil87 el 1 de Sept. de 2013

0 votos

A while loop is what you are looking for it seems.
while ~all([Va==Vo,Vo==Vn])
%your code
end

5 comentarios

kjetil87
kjetil87 el 1 de Sept. de 2013
or maybe its more efficient with
while (Va~=Vo) && (Vo~=Vn)
end
harley
harley el 1 de Sept. de 2013
thanks i've edited the partial code above with your suggestion, i get an error, an suggestions?
??? Undefined function or method 'Va' for input arguments of type 'double'.
while ~all([Va(i)==Vo(i),Vo(i)==Vn(i)])
harley
harley el 1 de Sept. de 2013
thanks for your time, still getting similar error?
??? Undefined function or variable 'Va'.
while (Va~=Vo) && (Vo~=Vn)
harley
harley el 1 de Sept. de 2013
sorry i'm new to matlab, is that where you mean't, (see edited code above)
kjetil87
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.

Iniciar sesión para comentar.

Categorías

Más información sobre Startup and Shutdown en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

el 1 de Sept. de 2013

Community Treasure Hunt

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

Start Hunting!

Translated by