我在循环中哪里出错了

2次查看(最近30天)
穆罕默德salihi
穆罕默德salihi 2021年6月5日
亲爱的朋友们,我在我的for循环中遇到了一个问题,即绘制迭代数与w之间的关系。
w对该问题的迭代数有影响,当Wopt为1.78,迭代数为63时。
我在检查w从0到2的取值。例如,我在代码下面分享迭代和图表。
谢谢你的支持。万博1manbetx
清晰的
关闭所有, clc
格式
%定义常量
L = 5;%的长度
H = 5;%的高度
△= 0.2
δy = 0.2
β=△/δy
Beta2 =β^ 2
约= H /δy%沿y方向的最大网格点数
我= L /△%沿x的最大网格点数
Si1 = 100;Si2 = 0;%边界条件
y = H:δy: 0;
x = 0:△:L;
一轮= (((cos(π/ im) + cos(π/约))/ 2)^ 2,4)
Wopt= round(((2-2*(sqrt(1-a)))/a),2))%松弛法
w = 0:0.01:2;%绘制迭代图
%初始化T_old为初始的猜测值
Si_old = 0(约+ 1,im + 1);
设定边界条件
Si_old (1 7: im + 1) = Si1;% 5英尺
Si_old(约+ 1,1:im + 1) = Si2;% 3英尺底
Si_old (1,6) = 0.001;%入口
Si_old(1:约+ 1,- 1)= Si2;% 5英尺左边
Si_old (1:16, im + 1) = Si1;% 3.8英尺右侧
Si_old (17, im + 1) = 0.001;%出口
Si_new = Si_old;
错误= 0.011;%可以是大于Errormax的任何数字
Errormax = 0.01;
iter = 0;
o = 1:长度(w)%迭代图的循环
错误> Errormax
iter (o) = iter + 1;
我= 2:约
j = 2: im
Si_new (i, j) = (1 w (o)) * Si_new (i, j) + (w (o) / (2 * (1 + Beta2))) * (Si_new(张,j) + Si_new (i + 1, j) + Beta2 * (Si_new (i, j + 1) + Si_new (i, j - 1)));
结束
结束
Error = sum(sum(abs(Si_old-Si_new),2));
Si_old = Si_new;
结束
如果o = = Wopt
Si_new =翻转(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(:,找到(abs (x - 0.0) < 0.001)) Si_new(:,发现(abs (x - 1) < 0.001))...
Si_new(:,找到(abs (x - 2) < 0.001)) Si_new(:,发现(abs (3) < 0.001))...
Si_new(:,找到(abs (* 4) < 0.001)) Si_new(:,发现(abs (x - 5.0) < 0.001))))
disp (' ');disp ([点逐次超松弛法的迭代次数为int2str (iter)])
结束
图(2)
情节(t (o)、w (o));持有
结束
2的评论
穆罕默德salihi
穆罕默德salihi 2021年6月5日
我必须把所有的矩阵初始化放在第一个循环中。你写的一些修改已经完成了
谢谢你的帮助。

登录评论。

答案(1)

Houssem
Houssem 2021年6月5日
首先,t没有在程序中定义,第二个w没有在程序中计算
2的评论
穆罕默德salihi
穆罕默德salihi 2021年6月5日
我必须把所有的矩阵初始化放在第一个循环中。
谢谢你的帮助。

登录评论。

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!