采用GAUSS列主消元法求解线性方程组(MATLAB)

来源:互联网 发布:淘宝便宜有趣的小玩意 编辑:程序博客网 时间:2024/06/06 00:22

程序清单:

%%求解任意线性方程组的解
clc;
clear all;
format long e
disp('线性方程组求解,请输入参数');
n=input('维数n=');
A=input('矩阵A=');
b=input('右端项b=');
eps=input('控制精度eps=');


b=b';   %%变为列向量
A=[A b];    %%矩阵增广


for k=1:n-1
    B=A(k:n,k); %%先将第k列可能作为主元的元素取出方至矩阵B
    P=max(abs(B));  %%选主元P
    if(P<eps)   %%控制小主元
        disp('无解');
        break;
    else
        u=find((abs(B))==P); %%计算主元所在行相对与k行的位置
            if(u~=1)
                A([k,u],:)=A([u,k],:);  %%换行
            end
            m=A(k+1:n,k)/A(k,k);    %%求出各行行乘数并放至矩阵m
            for i=1:length(m)
            A(k+i,k:n+1)=A(k+i,k:n+1)-m(i)*A(k,k:n+1);  %%消元按行进行
            end
    end
end
if A(n,n)==0
    disp('无解'); %%若矩阵A不满秩,则无解
else
    x(n)=A(n,n+1)/A(n,n);   %%由最后一行首先求出方程组的第一个解x(n)
    for i=n-1:-1:1  %%计算第i个解x(i)
        for j=1:1:n-i  %%利用回代思想
            A(i,n+1)=A(i,n+1)-A(i,i+j)*x(i+j);  %%减去已知部分
        end
        x(i)=A(i,n+1)/A(i,i);
    end
end
disp('方程组的解');
x=x'   %%输出方程组的解

流程图:


结果演示:


0 0
原创粉丝点击