While loop with for loop problem

조회 수: 7 (최근 30일)
José Everardo Baldo Junior
José Everardo Baldo Junior 2019년 4월 19일
Hello everyone!
I have a situation here trying to solve a while loop inside a for loop.
As you can see in the code, I want to calculate "xn", varying "omega" and then, evaluate which "omega" gives the minor number of iterations (nite), storing in a vector (nite_vec) the each "nite" for each "omega" used in the looping.
But the counte "i" does not to up date inside the "while".
%% Iterations
D = [3 0 0; 0 2 0; 0 0 1];
b = [0; 1; 0];
L = [0 0 0; 1 0 0; 0 1 0];
U = [0 1 0; 0 0 1; 0 0 0];
tol = 10^-7;
nite_max = 100;
n = length(b);
x0 = zeros(n,1);
omega = (1:0.05:2)';
nite = 0;
xn = 1;
xi = x0;
for i = 1:length(omega)
while norm(xn-xi) >= tol && nite <= nite_max
xn = (D-omega(i)*L)\((1-omega(i))*D+omega(i)*U)*x0+omega(i)*((D-omega(i)*L)\b);
xi = x0;
x0 = xn;
nite = nite+1;
end
nite_vec(i) = nite;
end
Could anyone help me with this!
Many thanks!

채택된 답변

Stephen23
Stephen23 2019년 4월 19일
편집: Stephen23 2019년 4월 19일
Perhaps you meant something like this:
D = [3 0 0; 0 2 0; 0 0 1];
b = [0; 1; 0];
L = [0 0 0; 1 0 0; 0 1 0];
U = [0 1 0; 0 0 1; 0 0 0];
tol = 10^-7;
n = numel(b);
nite_max = 100;
omega = 1:0.05:2;
for k = 1:numel(omega)
nite = 0;
x0 = zeros(n,1);
xn = 1;
xi = x0;
while norm(xn-xi)>=tol && nite<=nite_max
xn = (D-omega(k)*L)\((1-omega(k))*D+omega(k)*U)*x0+omega(k)*((D-omega(k)*L)\b);
xi = x0;
x0 = xn;
nite = nite+1;
end
nite_vec(k) = nite;
end
Giving:
>> nite_vec
nite_vec = 41 36 32 28 24 19 16 17 20 22 25 29 34 40 48 58 75 101 101 101 101
  댓글 수: 1
José Everardo Baldo Junior
José Everardo Baldo Junior 2019년 4월 23일
Hello Stephen!
That's it! Many thankls for your help!!!
Kind regards,
Junior.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by