📜  高斯·乔丹消除法程序(1)

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

高斯·乔丹消除法程序

介绍

高斯·乔丹消除法(Gauss-Jordan elimination method)是一种线性方程组的求解方法,通过将系数矩阵转化为行阶梯矩阵或者简化阶梯矩阵,从而求出未知元的值。

算法步骤
  1. 将系数矩阵增广,即将其与常数向量合并为增广矩阵;

  2. 从第一行开始,使用初等行变换使得该行第一个非零元素为1,称为主元,并且将主元所在列的其他元素变为0;

  3. 对剩下的行,若主元所在列的元素非零,则使用初等行变换消元,将该行主元下面的所有元素变为0;

  4. 重复步骤2和3,直到所有非零行的第一个非零元素都为1,并且该元素所在列其他元素都为0;

  5. 将增广矩阵分割为系数矩阵和常数向量,即可得到线性方程组的解。

代码实现

下面是Python实现的高斯·乔丹消除法程序:

def gauss_jordan_elimination(A, b):
    """
    Gauss-Jordan elimination method to solve linear equations Ax = b
    :param A: coefficient matrix, 2D array
    :param b: constant vector, 1D array
    :return: solution vector, 1D array
    """
    n = len(b)
    # Augmented matrix [A|b]
    M = [A[i] + [b[i]] for i in range(n)]
    for i in range(n):
        # Find pivot row with largest absolute value of the coefficient
        pivot_row = max(range(i, n), key=lambda j: abs(M[j][i]))
        # Swap pivot row with the current row
        M[i], M[pivot_row] = M[pivot_row], M[i]
        # Set the pivot element to 1
        pivot_element = M[i][i]
        M[i] = [M[i][j] / pivot_element for j in range(n + 1)]
        # Elimination
        for j in range(n):
            if i != j:
                scale = M[j][i]
                M[j] = [M[j][k] - scale * M[i][k] for k in range(n + 1)]
    # Solution vector
    x = [M[i][n] for i in range(n)]
    return x
使用示例

假设要解下面的线性方程组:

3x1 + 2x2 - x3 = 9
2x1 - 2x2 + 4x3 = 3
-x1 + 1/2x2 - x3 = 0

则系数矩阵为:

| 3  2 -1 |
| 2 -2  4 |
|-1 1/2 -1|

常数向量为:

| 9 |
| 3 |
| 0 |

可以使用高斯·乔丹消除法求解:

A = [[3, 2, -1], [2, -2, 4], [-1, 1/2, -1]]
b = [9, 3, 0]
x = gauss_jordan_elimination(A, b)
print(x)  # [2, -1, -2]

因此,线性方程组的解为:

x1 = 2
x2 = -1
x3 = -2
参考资料
  • [Gauss-Jordan elimination method](https://en.wikipedia.org/wiki/Gaussian_elimination# Gauss-Jordan_elimination) (Wikipedia - English)
  • 高斯-约旦消元法 (Wikipedia - 中文)