**计算方法(一):GAUSS消去法与主元素法解线性方程组**

概述:
Gauss法和主元素法解线性方程组都是采用直接法,即假设计算过程不存在舍入误差,通过某种规律进行有限次运算,从而得出精确解。
具体步骤:
(1)Gauss法:思路很简单,通过对系数矩阵有限次行初等变化,将之化为上三角矩阵,再从仅有一个非0元素的一行开始不断解出方程组的解。
行初等变化后上三角矩阵为:
× =
从第n行开始,首先解出,再将带入n-1行…………,可得公式:

(2)主元素法:当我们使用Gauss法时,可能会出现系数矩阵主元素的位置上出现很小的元素,使得计算结果出现较大的舍入误差,我们可以通过初等变化调整元素的位置,使矩阵中最大的元素处于主元素的位置上,从而减少舍入误差。如果我们仅仅从需要调整的主元所在的列中选取最大的元素,就是列主元素法,若是从整个矩阵选取最大的元素,就是全主元素法。(据说实践证明列主元素法一般较好)

算法实现(MATLAB):
(以下仅呈现列主元素法的算法实现)

function liezhuyuansu_gauss_fa(A,b)
%列主元素高斯消元法解线性方程组
n=0;
if length(b)==rank(A)
    n=rank(A);
    disp('方程有定解');
elseif length(b)>rank(A)
    disp('方程无解');
else
    disp('方程解不唯一');
end
%逐列寻找最大的元素并完成交换
for i=1:n-1
    max=abs(A(i,i)); %先假设主元素位置上的元素就是最大的
    m=i;
    for j=i:n     %逐行比较找到最大的元素并记录其位置
        if max<abs(A(j,i))
            max=abs(A(j,i));
            m=j;
        end
    end
    if(m~=i)  %主元素位置元素最大的假设失败了,发动行变换 
        for k=i:n
           c=A(i,k);
           A(i,k)=A(m,k);
           A(m,k)=c;
        end 
        d=b(i);
        b(i)=b(m);
        b(m)=d;
    end
    for k=i+1:n %逐行
        for j=i+1:n %逐列
            A(k,j)=A(k,j)-A(i,j)*A(k,i)/A(i,i);
        end
        b(k)=b(k)-b(i)* A(k,i)/A(i,i);
        A(k,i)=0;
    end
end
%三角矩阵已成,开始回代
x(n)=b(n)/A(n,n);
for i=n-1:-1:1
    sum=0;
    for j=i+1:n
        sum=sum+A(i,j)*x(j);
    end
    x(i)=(b(i)-sum)/A(i,i);
end
disp('方程组的解为:');
x

你可能感兴趣的:(**计算方法(一):GAUSS消去法与主元素法解线性方程组**)