?? seidel_iterative_method.m
字號:
function Seidel_iterative_method
%檢驗本程序請點擊運行后,依次在命令窗口中輸入下面的數據:
% [2,-1,0,0;-1,2,-1,0;0,-1,2,-1;0,0,-1,2] 回車 [1;0;1;0] 回車 [0;0;0;0] 回車 0.01 回車 100 回車
% 上面的數據正好對應下面的輸入程序
fprintf('\n');
% 以下的輸入程序是為了得到方程組的系數矩陣和X的初始值及迭代精度和迭代最大次數
A=input('Please input conficient matrix of the function row by row: '); %Example:[1,2,3;4,5,6;7,8,9]
b=input('Please input right value of the function by column: '); %Example:[1;2;3]
X0=input('Please input the initial value of X0 by column: '); %Example:[1;2;3;4]
e=input('Please input the iterative precision: '); %Example:0.001
N=input('The max iterative times permitted: '); %Example:1000
k=1;
n=length(A);
% L,U先被賦值為0的矩陣,以便用下面的FOR循環賦給L,U準確的值
L=zeros(n,n);
U=L;
% I是單位矩陣
I=eye(n);
D=diag(diag(A));
B=inv(D)*(D-A);
% 'for circulation sentence' will evaluate the L,U,D
% for 循環的目的是為了得到 L, U, D 的值
for i=1:n
for j=1:n
if i<j
U(i,j)=B(i,j);
else if i>j
L(i,j)=B(i,j)
else
end
end
end
end
% B1和C1是 X1=B1*X0+C1,此為Seidel迭代
g=inv(D)*b;
B1=inv(I-L)*U;
C1=inv(I-L);
X1=B1*X0+C1*g;
fprintf('The initial X value:');
fprintf(1,'%15.11f ',X0);
fprintf('\n');
fprintf(1,'The %d times X value: ',k);
fprintf(1,'%15.11f ',X1);
fprintf('\n');
% 此循環就是迭代循環,同時打印出迭代時產生的X值
while sqrt(sum((X1-X0).^2))>e&k<N
k=k+1;
X0=X1;
X1=B1*X0+C1*g;
fprintf(1,'The %d times X value: ',k);
fprintf(1,'%15.11f ',X1);
fprintf('\n');
end
% 打印出最后的結果。
if k<N
fprintf('\n');
fprintf(1,'The iterative times: %d\n',k);
fprintf('The target value of X: ');
fprintf(1,'%15.11f ',X1);
fprintf('\n');
else
fprintf('\n WARNING! Iterative times is more than difined!\n');
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -