📅  最后修改于: 2023-12-03 15:28:59.778000             🧑  作者: Mango
高斯·乔丹消除法(Gauss-Jordan elimination method)是一种线性方程组的求解方法,通过将系数矩阵转化为行阶梯矩阵或者简化阶梯矩阵,从而求出未知元的值。
将系数矩阵增广,即将其与常数向量合并为增广矩阵;
从第一行开始,使用初等行变换使得该行第一个非零元素为1,称为主元,并且将主元所在列的其他元素变为0;
对剩下的行,若主元所在列的元素非零,则使用初等行变换消元,将该行主元下面的所有元素变为0;
重复步骤2和3,直到所有非零行的第一个非零元素都为1,并且该元素所在列其他元素都为0;
将增广矩阵分割为系数矩阵和常数向量,即可得到线性方程组的解。
下面是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