⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 seidel_iterative_method.m

📁 数值分析中的SEIDEL迭代法的MATLAB源程序
💻 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 + -