数值线性代数之列主元Gauss消去法(MATLAB)

1. 这是啥?

在使用Gauss变换的过程中,如果矩阵对角线的元素太小,会干扰计算结果,所以我们尽量把每列较大的元素通过行变换挪到对角线上。

2. 第二个红框只是普通的Guass变换,第一个红框就是选择最大列主元的算法。

数值线性代数之列主元Gauss消去法(MATLAB)_第1张图片

3. 下图中,左边的L代表的是常规的Gauss变换,P代表行变换

数值线性代数之列主元Gauss消去法(MATLAB)_第2张图片

4. 于是我们要解的方程就从Ax=b变成了LUx=Pb,接下来使用上下三角矩阵的前代法和回代法解线性方程组即可。

MATLAB代码如下:

function [L,U,b]=mycolLU(A,b)

n=length(A);

for k=1:n-1

    m=abs(A(k,k));

    p=k;

    for i=k+1:n

        if abs(A(i,k))>m

            m=abs(A(i,k));

            p=i; 

        end

    end

    if(p~=k)

        r1=A(k,1:n);A(k,1:n)=A(p,1:n);A(p,1:n)=r1;

        r2=b(k);b(k)=b(p);b(p)=r2; 

    end

    if A(k,k)~=0

        A(k+1:n,k)=A(k+1:n,k)/A(k,k);

        A(k+1:n,k+1:n)=A(k+1:n,k+1:n)-A(k+1:n,k)*A(k,k+1:n);

    else

        stop

    end

end

L=tril(A,-1)+eye(n);

U=triu(A);

你可能感兴趣的:(Matlab)