📄 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 + -