首页 > 其他分享 >【线性代数】列主元法求矩阵的逆

【线性代数】列主元法求矩阵的逆

时间:2025-01-20 22:04:49浏览次数:3  
标签:par end ai ak 矩阵 线性代数 列主 id 元法

列主元方法是一种用于求解矩阵逆的数值方法,特别适用于在计算机上实现。其基本思想是通过高斯消元法将矩阵转换为上三角矩阵,然后通过回代求解矩阵的逆。以下是列主元方法求解矩阵 A A A 的逆的步骤:

步骤 1:初始化
构造增广矩阵 [ A ∣ I ] [A | I] [A∣I],其中 I I I 是 n n n 阶单位矩阵。
步骤 2:列主元选择
对于第 k k k 列( k = 1 , 2 , … , n k = 1, 2, \ldots, n k=1,2,…,n),找到列主元,即找到 i k i_k ik​ 使得:
∣ a i k , k ∣ = max ⁡ i ≥ k ∣ a i , k ∣ |a_{i_k,k}| = \max_{i \geq k} |a_{i,k}| ∣aik​,k​∣=i≥kmax​∣ai,k​∣
如果 i k ≠ k i_k \neq k ik​=k,则交换第 k k k 行和第 i k i_k ik​ 行。
步骤 3:高斯消元
对于每一列 k k k( k = 1 , 2 , … , n − 1 k = 1, 2, \ldots, n-1 k=1,2,…,n−1),进行以下操作:

  • 归一化第 k k k 行的列主元:
    a k , k ← 1 a k , k a_{k,k} \leftarrow \frac{1}{a_{k,k}} ak,k​←ak,k​1​
  • 更新第 k k k 行的其他元素:
    a k , j ← a k , j a k , k 对于所有  j ≠ k a_{k,j} \leftarrow \frac{a_{k,j}}{a_{k,k}} \quad \text{对于所有 } j \neq k ak,j​←ak,k​ak,j​​对于所有 j=k
  • 消去下方所有行的第 k k k 列元素:
    对于所有 i > k i > k i>k,计算:
    m i , k = a i , k m_{i,k} = a_{i,k} mi,k​=ai,k​
    然后更新第 i i i 行:
    a i , j ← a i , j − m i , k ⋅ a k , j 对于所有  j a_{i,j} \leftarrow a_{i,j} - m_{i,k} \cdot a_{k,j} \quad \text{对于所有 } j ai,j​←ai,j​−mi,k​⋅ak,j​对于所有 j
    步骤 4:回代求解
    当矩阵 A A A 被转换为上三角矩阵后,从最后一行开始回代:
    对于每一行 k k k( k = n , n − 1 , … , 1 k = n, n-1, \ldots, 1 k=n,n−1,…,1),进行以下操作:
  • 归一化第 k k k 行的最后一个非零元素(即对角线元素):
    a k , k ← 1 a k , k a_{k,k} \leftarrow \frac{1}{a_{k,k}} ak,k​←ak,k​1​
  • 更新第 k k k 行的其他元素:
    a k , j ← a k , j a k , k 对于所有  j ≠ k a_{k,j} \leftarrow \frac{a_{k,j}}{a_{k,k}} \quad \text{对于所有 } j \neq k ak,j​←ak,k​ak,j​​对于所有 j=k
  • 消去上方所有行的第 k k k 列元素:
    对于所有 i < k i < k i<k,计算:
    m i , k = a i , k m_{i,k} = a_{i,k} mi,k​=ai,k​
    然后更新第 i i i 行:
    a i , j ← a i , j − m i , k ⋅ a k , j 对于所有  j a_{i,j} \leftarrow a_{i,j} - m_{i,k} \cdot a_{k,j} \quad \text{对于所有 } j ai,j​←ai,j​−mi,k​⋅ak,j​对于所有 j
    步骤 5:结果提取
    经过上述步骤后,增广矩阵的左侧变为单位矩阵,而右侧则变为了 A A A 的逆矩阵 A − 1 A^{-1} A−1。提取右侧的矩阵即为所求的逆矩阵。
    需要注意的是,上述公式中的 a i , j a_{i,j} ai,j​ 表示增广矩阵中的元素,包括原矩阵 A A A 和单位矩阵 I I I 的部分。在实际计算中,这些操作会同时应用于 A A A 和 I I I,最终 I I I 的位置会被 A − 1 A^{-1} A−1 所取代。
    此外,如果在任何步骤中发现对角线上的元素 a k , k a_{k,k} ak,k​ 为零或非常接近零,那么矩阵 A A A 可能是奇异矩阵,无法求逆。在这种情况下,算法应该停止并报错。

Julia 代码

美化数据格式

using DataFrames
function pm(A,b)
    m,n=size(A); z=[]
    for i=1:n  
        st=i
        z=[z; "a:$st"]
    end
    for i=1:n
        st=i
        z=[z;"b:$st"]
    end
    println(DataFrame([A b],z))
end             
function luInv(A,par=false)
    n=size(A,1);T=typeof(A[1,1])
    A=copy(A); E = zeros(T,n,n); 
    for i=1:n  E[i,i]=1//1  end
    if par pm(A, E) end
    if par println("化为上三角")  end
    for i=1:n-1
        id=argmax(abs.(A[i:n,i])) # 寻找列主元 
        id=id-1
        A[i,i:n], A[i+id,i:n]= A[i+id,i:n],A[i,i:n]
        E[i,:], E[i+id,:] =E[i+id,:], E[i,:]
        for j=i+1:n
            c=A[j,i]/A[i,i]
            E[j,:]=E[j,:]-E[i,:]*c
            A[j,i:n]=A[j,i:n]-A[i,i:n]*c
        end
        if par pm(A, E) end
    end
    if par println("化为对角") end
    for i=n:-1:2
        for j=1:i-1
            c=A[j,i]/A[i,i]
            E[j,:]=E[j,:]-E[i,:]*c
            A[j,1:i]=A[j,1:i]-A[i,1:i]*c
        end
        if par pm(A, E) end
    end
    IA=copy(E);
    for j=1:n
        IA[j,:] = E[j,:]/A[j,j]; A[j,j]=A[j,j]/A[j,j]
    end
    if par pm(A, IA) end
    return(IA)
end

举例

n=3;
A=zeros(Rational,n,n)
for i=1:n-1
    A[i,i]=0;
    A[i,i+1]=11//1;
    A[i+1,i]=7//1; 
end
A[n,n]=3//1;
IA=luInv(A,true)

结果

在这里插入图片描述

标签:par,end,ai,ak,矩阵,线性代数,列主,id,元法
From: https://blog.csdn.net/serpenttom/article/details/145269859

相关文章

  • 线性代数
    向量定义向量:既有大小又有方向的量称为向量。数学上研究的向量为自由向量,即只要不改变它的大小和方向,起点和终点可以任意平行移动的向量。记作\(\veca\)或\(\boldsymbol{a}\)。在物理中通常也叫「矢量」。向量的模:代表向量的长度,记:\(|\overrightarrow{AB}|\)或\(......
  • 人工智能之数学基础:线性代数中的线性相关和线性无关
    本文重点在线性代数的广阔领域中,线性相关与线性无关是两个核心概念,它们对于理解向量空间、矩阵运算、线性方程组以及人工智能等问题具有至关重要的作用。定义与直观理解当存在一组不全为0的数x1,x2,...,xn使得上式成立的时候,那么此时我们可以说向量组a1,a2...,an线性相关。线......
  • 线性代数13.线性相关性&内积&范数&正交
    13.线性相关性&内积&范数&正交13.1向量组的线性相关性13.1.1定义对于任意向量组\(A:a_1,a_2,a_3,...,a_n\),存在不全为0的数\(k_i(i=1,2,3,...,m)\),使:\[\tag{1}\sum_{i=1}^mk_i\cdota_i=0\]则称向量组A是\(线性相关\)的,否则称A是\(线性无关\)的13.1.2线性相关示例示例......
  • 线性代数11.三种初等矩阵及其性质
    11.三种初等矩阵及其性质11.1三种初等矩阵设存在列向量A:\[A=\begin{bmatrix}a_1\\a_2\\a_3\\a_4\\...\\a_i\\...\\a_j\\...\\a_n\end{bmatrix}\]则以下\(X_1,X_2,X_3\)三种矩阵分别与A相乘后,可对A进行三种初等变换:11.1.1矩阵\(X_1\):对应\(a_i\leftrightarrow......
  • 【AI中的数学-线性代数】行列式:矩阵的心跳
    第三章线性代数第13节行列式:矩阵的心跳在线性代数中,行列式(Determinant)是衡量方阵性质的一个重要标量。它不仅在数学理论中占有举足轻重的地位,在人工智能的诸多应用中也扮演着关键角色。本节将详细探讨行列式的定义、性质、计算方法以及其在人工智能中的具体应用,帮助读者全......
  • 线性代数10.矩阵的初等变换&矩阵的标准形
    10.矩阵的初等变换10.1矩阵初等变换的规则对于任意存在第\(i,j\)两行、或第\(i,j\)两列的矩阵,满足以下初等变换规则:10.1.1对调对调\(i,j\)两行,记为:\(r_i\leftrightarrowr_j\)对调\(i,j\)两列,记为:\(c_i\leftrightarrowc_j\)以上运算均可逆10.1.2乘以\(k\)(\(k\in......
  • 线性代数9.矩阵的逆-分块矩阵
    9.矩阵的逆-分块矩阵9.1分块矩阵的加法设矩阵\(A、B均为m\timesn\)的矩阵,且A、B均按相同的方式划分为\(s\timest\)块,其中:\[A=\begin{bmatrix}A_{11}&...&A_{1t}\\&...&\\A_{s1}&...&A_{st}\\\end{bmatrix}\]\[B=\begin{bmatrix}B_{11}&...&B_......
  • 线性代数8.矩阵的逆-相关性质&特殊矩阵&算法应用
    8.矩阵的逆8.1相关性质性质1:若矩阵A可逆,则\(A^{-1}\)也可逆:\[(A^{-1})^{-1}=A\]性质1的证明:\(A\cdotA^{-1}=E\)性质2:若矩阵A可逆,则\(\lambda\cdotA\)也可逆:\[(\lambda\cdotA)^{-1}=\frac{1}{\lambda}\cdotA^{-1}\]性质2的证明:\(\lambda\cdotA\cdot\fra......
  • 线性代数7.矩阵的逆-定义&定理
    7.矩阵的逆-定义和定理7.1逆矩阵的定义对于n阶矩阵A,存在一个n阶矩阵B,使:\[AB=BA=E\]则称矩阵A是可逆的。且B是A的逆矩阵,简称“逆阵”,记为:\[B=A^{-1}\]7.2对逆矩阵的理解若存在矩阵\(A_{n×n}\)、\(x_{n×1}\)、\(b_{n×1}\),使:\[b=Ax\]又存在矩阵\(B_{n×n}\),使:\[AB=E......
  • 线性代数6.矩阵的行列式-代数余子式
    6.矩阵的行列式-代数余子式6.1余子式和代数余子式设存在n阶行列式\(|A|\),并存在\(|A|\)中的元素\(a_{ij}\)则\(|A|\)中,除去元素\(a_{ij}\)所在的第\(i\)行和第\(j\)列所有元素后,剩下元素所形成的行列式称为\(a_{ij}\)的\(余子式\),记为\(M_{ij}\)且存在\(A_{ij}=(-1)^{i+j}\cd......