[其他] matlab有限差分上之疑問
最近剛好有用到有限差分法的問題
試著把書上的例題碼輸進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)
→
11/29 15:42, , 1F
11/29 15:42, 1F
→
11/29 17:15, , 2F
11/29 17:15, 2F
→
11/29 17:15, , 3F
11/29 17:15, 3F
※ 編輯: e01234567 來自: 140.120.229.231 (11/29 17:19)
※ 編輯: e01234567 來自: 140.120.229.231 (11/29 17:25)
→
11/29 17:39, , 4F
11/29 17:39, 4F
※ 編輯: e01234567 來自: 140.120.229.231 (11/29 23:44)