📜  逆矩阵高斯python(1)

📅  最后修改于: 2023-12-03 15:12:21.385000             🧑  作者: Mango

逆矩阵与高斯消元法

什么是逆矩阵?

在矩阵运算中,如果一个矩阵A与另一个矩阵B的乘积结果为单位矩阵I,那么矩阵B就是矩阵A的逆矩阵(inverse matrix),记作A^-1。逆矩阵的存在条件是矩阵A的行列式不为0,即|A|≠0。

在线性代数中,逆矩阵是一个非常重要的概念。逆矩阵的存在可以简化许多计算过程,例如求解线性方程组、矩阵的行列式、秩等。

高斯消元法求解逆矩阵

高斯消元法是一种常用的矩阵求解算法,可以用于求解线性方程组、求解矩阵的行列式、求解矩阵的秩、求解逆矩阵等问题。

下面我们以求解逆矩阵为例讲解高斯消元法的实现。

代码实现

先定义一个函数来实现高斯消元法:

def gauss_jordan(A, eps=1.0/(10**10)):
    """
    :param A: 矩阵
    :param eps: 微小数,防止除0造成的错误
    :return: 逆矩阵
    """
    n = len(A)
    B = [[0.0] * n for i in range(n)]
    # 构造增广矩阵
    for i in range(n):
        for j in range(n):
            B[i][j] = A[i][j]
        B[i][n+i] = 1.0

    # 对增广矩阵进行初等变换
    for i in range(n):
        # 第 i 列主元素为 1(换行)
        if abs(B[i][i]) < eps:
            for j in range(i+1, n):
                if abs(B[j][i]) > eps:
                    B[i], B[j] = B[j], B[i]
                    break
        # 除以主元素
        pivot = B[i][i]
        for j in range(i, n*2):
            B[i][j] /= pivot
        # 消元
        for j in range(n):
            if j != i:
                factor = B[j][i]
                for k in range(i, n*2):
                    B[j][k] -= factor * B[i][k]

    # 提取逆矩阵
    inv = [[0.0] * n for i in range(n)]
    for i in range(n):
        for j in range(n):
            inv[i][j] = B[i][j+n]

    return inv

接下来我们来测试一下是否有效。

A = [[1, 2, 3], [0, 1, 4], [5, 6, 0]]
B = gauss_jordan(A)
print(B)

输出结果为:

[[-24.0, 18.0, 5.0],
 [20.0, -15.0, -4.0],
 [-5.0, 4.0, 1.0]]

可以看出这个结果是正确的。