【计算方法笔记】列高斯消元法解线性方程组


针对齐次方程组

解线性方程组AX=b
采用高斯列主元方法为:

k=1:n-1时

  • 选主元,并判断主元是否在精度内,不在则输出无解
  • 换行
  • 消元

k=n时

  • 判断A(n,n)是否为0,为0则无法迭代,输出无解 不为0则回代求解

重点理解矩阵的乘法

%高斯消元法
%列主元素消元法,主元的选择是在对角线下方元素包括对角元元素
%注意b和解的向量都是列向量,同时矩阵的乘法就是线性方程组的表示方法
clear;
A=[1,2,1,-2;2,5,3,-2;-2,-2,3,5;1,3,2,5];
b=[-1;3;15;9];
[n,cl]=size(A);
x=zeros(n,1);
for k=1:n-1
    [prime,maxk]=max(abs(A(k:n,k)));%在第k列在对角元包括对角元下面寻找主元
    maxk=maxk+k-1;
    if prime<=eps
        disp('无解!!!');%结束
    else
        %换行
        temp=A(k,1:cl);
        A(k,1:cl)=A(maxk,1:cl);
        A(maxk,1:cl)=temp;

        temp1=b(k);
        b(k)=b(maxk);
        b(maxk)=temp1;
        clear temp1,temp;
        %消元分系数矩阵A和b消元,从第k+1行开始计算
        b(k+1:n,1)=b(k+1:n,1)-A(k+1:n,k)/A(k,k)*b(k,1);   
        A(k+1:n,1:cl)=A(k+1:n,1:cl)-(A(k+1:n,k)/A(k,k))*A(k,1:cl);
         end
end
if(k+1==n)
    if abs(A(k,k))<=eps
        disp('无解!!!');
    else
        %回代求解
        x(n,1)=b(n,1)/A(n,n);
        for i=n-1:-1:1
            x(i,1)=(b(i,1)-A(i,i+1:n)*x(i+1:n,1))/A(i,i);
        end
        disp(x);
    end
end        

总结:
列高斯消元法本质也是消元法,因为考虑到在计算机执行算法时如果选取的是小主元,在消元时会除以小主元而产生很高的误差,所以在每次消元之前选取绝对值最大的主元。

你可能感兴趣的:(计算方法笔记)