loop until condition met
조회 수: 2 (최근 30일)
이전 댓글 표시
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
채택된 답변
kjetil87
2013년 9월 1일
편집: kjetil87
2013년 9월 1일
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
추가 답변 (1개)
kjetil87
2013년 9월 1일
A while loop is what you are looking for it seems.
while ~all([Va==Vo,Vo==Vn])
%your code
end
댓글 수: 5
kjetil87
2013년 9월 1일
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.
참고 항목
카테고리
Help Center 및 File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!