【线性代数】基础版本的高斯消元法

[精确算法] 高斯消元法求线性方程组

线性方程组

考虑线性方程组, 已知 A ∈ R n , n , b ∈ R n A\in \mathbb{R}^{n,n},b\in \mathbb{R}^n A∈Rn,n,b∈Rn, 求未知 x ∈ R n x\in \mathbb{R}^n x∈Rn

A 1 , 1 x 1 + A 1 , 2 x 2 + ⋯ + A 1 , n x n = b 1 , A_{1,1} x_1 +A_{1,2}x_2+\cdots +A_{1,n} x_n = b_1, A1,1x1+A1,2x2+⋯+A1,nxn=b1,
A 2 , 1 x 1 + A 2 , 2 x 2 + ⋯ + A 2 , n x n = b 2 , A_{2,1} x_1 +A_{2,2}x_2 +\cdots +A_{2,n} x_n = b_2, A2,1x1+A2,2x2+⋯+A2,nxn=b2,
⋯ \cdots ⋯
A n , 1 x 1 + A n , 2 x 2 + ⋯ + A n , n x n = b n , A_{n,1} x_1 +A_{n,2}x_2 +\cdots +A_{n,n} x_n = b_n, An,1x1+An,2x2+⋯+An,nxn=bn,

也可以写为矩阵乘法的形式,
A x = b Ax=b Ax=b

化为上三角

  • 第 1 轮:
    A i , 1 : n = A i , 1 : n − A i , 1 A 1 , 1 A 1 , 1 : n , i = 2 , ⋯   , n A_{i,1:n} = A_{i,1:n}- \frac{A_{i,1}}{A_{1,1}} A_{1,1:n}, i=2,\cdots,n Ai,1:n=Ai,1:n−A1,1Ai,1A1,1:n,i=2,⋯,n

  • 第 2 轮:
    A i , 2 : n = A i , 2 : n − A i , 2 A 2 , 2 A 2 , 2 : n , i = 3 , ⋯   , n A_{i,2:n} = A_{i,2:n}- \frac{A_{i,2}}{A_{2,2}} A_{2,2:n}, i=3,\cdots,n Ai,2:n=Ai,2:n−A2,2Ai,2A2,2:n,i=3,⋯,n
    ⋯ \cdots ⋯

  • 第 k 轮:
    A i , k : n = A i , k : n − A i , k A k , k A k , k : n , i = k + 1 , ⋯   , n A_{i,k:n} = A_{i,k:n}- \frac{A_{i,k}}{A_{k,k}} A_{k,k:n}, i=k+1,\cdots,n Ai,k:n=Ai,k:n−Ak,kAi,kAk,k:n,i=k+1,⋯,n

  • 第n-1 轮
    A i , n − 1 : n = A i , n − 1 : n − A i , n − 1 A n − 1 , n − 1 A n , n − 1 : n , i = n A_{i,n-1:n} = A_{i,n-1:n} - \frac{A_{i, n-1}}{A_{n-1,n-1}} A_{n,n-1:n}, i=n Ai,n−1:n=Ai,n−1:n−An−1,n−1Ai,n−1An,n−1:n,i=n

化为对角

  • 第 1 轮:
    A i , 2 : n = A i , 2 : n − A i , n A n , n A n , 2 : n , i = 1 , ⋯   , n − 1 A_{i,2:n} = A_{i,2:n}- \frac{A_{i,n}}{A_{n,n}} A_{n,2:n}, i=1,\cdots,n-1 Ai,2:n=Ai,2:n−An,nAi,nAn,2:n,i=1,⋯,n−1

  • 第 2 轮:
    A i , 2 : n − 1 = A i , 2 : n − 1 − A i , n − 1 A n − 1 , n − 1 A n − 1 , 2 : n − 1 , i = 1 , ⋯   , n − 2 A_{i,2:n-1} = A_{i,2:n-1}- \frac{A_{i,n-1}}{A_{n-1,n-1}} A_{n-1,2:n-1}, i=1,\cdots,n-2 Ai,2:n−1=Ai,2:n−1−An−1,n−1Ai,n−1An−1,2:n−1,i=1,⋯,n−2
    ⋯ \cdots ⋯

  • 第 k 轮:
    A i , 2 : n − k + 1 = A i , 2 : n − k + 1 − A i , n − k + 1 A n − k + 1 , n − k + 1 A n − k + 1 , 2 : n − k + 1 , i = 1 , ⋯   , n − k + 1 A_{i,2:n-k+1} = A_{i,2:n-k+1}- \frac{A_{i,n-k+1}}{A_{n-k+1,n-k+1}} A_{n-k+1,2:n-k+1}, i=1,\cdots,n-k+1 Ai,2:n−k+1=Ai,2:n−k+1−An−k+1,n−k+1Ai,n−k+1An−k+1,2:n−k+1,i=1,⋯,n−k+1

  • 第n-1 轮

A i , 2 = A i , 2 − A i , 2 A 2 , 2 A 2 , 2 , i = 1 A_{i,2} = A_{i,2} - \frac{A_{i, 2}}{A_{2,2}} A_{2,2}, i=1 Ai,2=Ai,2−A2,2Ai,2A2,2,i=1

美化数据格式

julia 复制代码
using DataFrames
function pm(A,b)
    m,n=size(A); z=[]
    for i=1:n
        z=[z; "a$i"]
    end
    z=[z; "b"]
    println(DataFrame([A b],z))
end            

高斯消元法程序

julia 复制代码
function LEsol(A,b,SHOW=false)
    """
    SHOW 默认为 false 不输出解题步骤, 可以选填 true 输出解题步骤
    """
    n=length(b);   A=copy(A);  b=copy(b)
    if SHOW pm(A,b) end
    if SHOW println("化为上三角") end
    for i=1:n-1
        for j=i+1:n
            c=A[j,i]/A[i,i]
            b[j]=b[j]-b[i]*c
            A[j,i:n]=A[j,i:n]-A[i,i:n]*c 
        end
        if SHOW pm(A,b) end
    end
    if SHOW println("化为对角") end
    for i=n:-1:2
        for j=1:i-1
            c=A[j,i]/A[i,i]
            b[j]=b[j]-b[i]*c
            A[j,i:n]=A[j,i:n]-A[i,i:n]*c
        end
        if SHOW pm(A,b) end
    end
    x=copy(b)
    for j=1:n
        x[j]=b[j]/A[j,j];
    end
    return(x)
end

举例

julia 复制代码
n=3;
A=ones(Rational,n,n)
b=ones(Rational,n)
for i=1:n-1
    A[i,i]=2.0;
    A[i,i+1]=1.0;
    A[i+1,i]=1.0; 
    b[i]=i+0.0
end
A[n,n]=2.0;
b[n]=n;
x=LEsol(A,b,true)

求解结果

相关推荐
金融OG14 小时前
99.8 金融难点通俗解释:净资产收益率(ROE)
大数据·python·线性代数·机器学习·数学建模·金融·矩阵
洛水微寒1 天前
多张图片读入后组成一个矩阵。怎么读取图片,可以让其读入的形式是:ndarray(a,b,c)分别的含义:a为多少张图片,b*c为图片大小
线性代数·矩阵
金融OG1 天前
5. 马科维茨资产组合模型+AI金融智能体(qwen-max)识别政策意图方案(理论+Python实战)
大数据·人工智能·python·线性代数·机器学习·金融
golitter.3 天前
使用numpy求解线性代数相关问题
线性代数·numpy
理智的灰太狼4 天前
求两个矩阵的乘积
线性代数·算法·矩阵
匹马夕阳5 天前
(三)线性代数之二阶和三阶行列式详解
线性代数·前端框架·图形渲染
云云3215 天前
跨境电商使用云手机用来做什么呢?
服务器·科技·线性代数·智能手机·矩阵·github
Vae_Mars5 天前
在三维坐标系中通过四阶矩阵实现平移和旋转
线性代数·矩阵
余~~185381628006 天前
矩阵碰一碰发视频源码技术开发全解析,支持OEM
线性代数·矩阵·音视频