where do i make mistake in my loop
1 回表示 (過去 30 日間)
古いコメントを表示
dear friends, i am facing problem in my for loop to draw the itertaion number versus w.
w has an effect to the iteration number of this problem, when Wopt is 1.78 and the iteration number is 63.
i am checking the number for w from 0 up to 2. for an example, i am sharing the iteration versus graph below my code.
thanks for your support.
clear
close all, clc
format short
%Defining the constants
L=5; % length
H=5; % Height
deltax=0.2
deltay=0.2
Beta=deltax/deltay
Beta2=Beta^2
jn=H/deltay % Maximum number of grid points along y
im=L/deltax % Maximum number of grid points along x
Si1=100; Si2=0; % boundary conditions
y=H:-deltay:0;
x=0:deltax:L;
a= round(((cos(pi/im)+cos(pi/jn))/2)^2,4)
Wopt= round(( (2-2*(sqrt(1-a)))/a ),2) % Relaxation Method
w=0:0.01:2; % to draw iteration graph
% initialize T_old to the initial guess values
Si_old=zeros(jn+1,im+1);
% set boundary conditions
Si_old(1,7:im+1)=Si1; % 5 ft TOP
Si_old(jn+1,1:im+1)=Si2; % 3 ft bottom
Si_old(1,6)=0.001; % inlet
Si_old(1:jn+1,1)=Si2; % 5 ft left side
Si_old(1:16,im+1)=Si1; % 3.8 ft right side
Si_old(17,im+1)=0.001; % outlet
Si_new = Si_old;
Error = 0.011; % could be any number that is greater than Errormax
Errormax=0.01;
iter=0;
for o=1:length(w) %the loop for iteration graph
while Error > Errormax
iter(o)=iter+1;
for i=2:jn
for j=2:im
Si_new(i,j)=(1-w(o))*Si_new(i,j) + (w(o)/(2*(1+Beta2)))* (Si_new(i-1,j)+Si_new(i+1,j)+Beta2*(Si_new(i,j+1)+Si_new(i,j-1)) ) ;
end
end
Error = sum(sum(abs(Si_old-Si_new),2)) ;
Si_old = Si_new;
end
if o==Wopt
Si_new=flip(Si_new);
disp(' ');disp(' Y x=0.0 X=1.0 X=2.0 X=3.0 X=4.0 X=5.0 ')
disp(' ');
disp([y' Si_new(:,find(abs(x-0.0) < 0.001)) Si_new(:,find(abs(x-1) < 0.001))...
Si_new(:,find(abs(x-2) < 0.001)) Si_new(:,find(abs(x-3) < 0.001))...
Si_new(:,find(abs(x-4) < 0.001)) Si_new(:,find(abs(x-5.0) < 0.001))])
disp(' '); disp(['Number of iteration for Point Successive Over Relaxation method is ',int2str(iter)])
end
figure(2)
plot(t(o),w(o)); hold on
end
2 件のコメント
Walter Roberson
2021 年 6 月 5 日
Wopt= round(( (2-2*(sqrt(1-a)))/a ),2) % Relaxation Method
so Wopt is rounded to two decimal places
for o=1:length(w) %the loop for iteration graph
o will be an integer
if o==Wopt
are you sure you want to compare your two-decimal-place Wopt to the integer o ??
回答 (1 件)
Houssem
2021 年 6 月 5 日
First t is not defined in the program, second w is not calculated in your program
2 件のコメント
参考
カテゴリ
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!