作者e01234567 (伊武天泽)
看板MATLAB
标题[问题] matlab有限差分上之疑问
时间Thu Nov 29 13:00:21 2012
最近刚好有用到有限差分法的问题
试着把书上的例题码输进M文件里
以下是我输入的程式码
我的A矩阵是9*9 b跟x0就是n*1
x0初始值我是全部打0 v则是九个常数
function x= code(A,b,x0,tol,max_it)
%输入及输出:
% A 系数矩阵(n乘n)
% b 右侧项(n乘1)
% x0 初始解(n乘1)
% tol 若x变量的范数<tol则停止
% max 最大跌代次数
% x 解向量(n乘1)
[n,m]=size(A);
xold=x0;
C=-A;
for i=1:n
C(i,i)=0;
end
for i = 1:n
C(i,1:n)=C(i,1:n)/A(i,i);
end
for i=1:n
d(i,1)=b(i)/A(i,i);
end
disp('i x1 x2 x3 ....');
while(i <=max_it)
xnew=C*xold+d;
if norm(xnew-xold) <= tol
x=xnew;
disp('Jacobi method converged');return;
else
xold=xnew;
end
disp([i xnew']);
i=i+1;
end
disp('Jacobi method did not converge');
disp('results after maximum number of iterations');
x=xnew;
之後我打code(A,b,x0,1e-5,10)後
即跑出
i x1 x2 x3 ....
9 NaN NaN NaN NaN NaN NaN NaN NaN NaN
10 NaN NaN NaN NaN NaN NaN NaN NaN NaN
Jacobi method did not converge
results after maximum number of iterations
ans =
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
疑似无法收敛,想问我哪里打错了
以下附上我的A b矩阵
A=[0.00 0.25 0.00 0.25 0.00 0.00 0.00 0.00 0.00
0.25 0.00 0.25 0.00 0.25 0.00 0.00 0.00 0.00
0.00 0.25 0.00 0.00 0.00 0.25 0.00 0.00 0.00
0.25 0.00 0.00 0.00 0.25 0.00 0.25 0.00 0.00
0.00 0.25 0.00 0.25 0.00 0.25 0.00 0.25 0.00
0.00 0.00 0.25 0.00 0.25 0.00 0.00 0.00 0.25
0.00 0.00 0.00 0.25 0.00 0.00 0.00 0.25 0.00
0.00 0.00 0.00 0.00 0.25 0.00 0.25 0.00 0.25
0.00 0.00 0.00 0.00 0.00 0.25 0.00 0.25 0.00]
b=[0.075 0.0625 0.475 0 0.25 0.45 0.25 0.5]'
在下是matlab的新手,有请指教^^"
这个跌代法用excel也是算得出来的,但无法纪录下每次跌代的数据,
所以想改用matlab尝试
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.120.229.231
※ 编辑: e01234567 来自: 140.120.229.231 (11/29 13:01)
1F:→ math99:A is singular 11/29 15:42
2F:→ e01234567:跌代法很像要避开奇异矩阵的样子 11/29 17:15
3F:→ e01234567:but我要我照着说明书上面的打法 11/29 17:15
※ 编辑: e01234567 来自: 140.120.229.231 (11/29 17:19)
※ 编辑: e01234567 来自: 140.120.229.231 (11/29 17:25)
4F:→ e01234567:我成功解出来了^^"感恩 搞懂自己错误在哪边了 11/29 17:39
※ 编辑: e01234567 来自: 140.120.229.231 (11/29 23:44)