列主元消去法python实现
时间: 2023-12-04 17:59:10 浏览: 67
下面是一个简单的 Python 实现列主元消去法(Gaussian elimination):
```python
import numpy as np
# 定义矩阵
A = np.array([[1, 2, 3], [2, 3, 4], [3, 4, 5]])
b = np.array([4, 5, 6])
# 增广矩阵
Ab = np.column_stack((A, b))
# 行交换函数
def swap_rows(matrix, i, j):
matrix[[i, j], :] = matrix[[j, i], :]
# 主元归一函数
def normalize_row(matrix, row):
matrix[row, :] /= matrix[row, row]
# 消元函数
def eliminate(matrix, row):
for i in range(row + 1, matrix.shape[0]):
factor = matrix[i, row] / matrix[row, row]
matrix[i, :] -= factor * matrix[row, :]
# 高斯消元
for i in range(Ab.shape[0]):
# 部分选主元
max_row = np.argmax(np.abs(Ab[i:, i])) + i
swap_rows(Ab, i, max_row)
# 主元归一
normalize_row(Ab, i)
# 消元
eliminate(Ab, i)
# 回代求解
x = np.zeros(A.shape[0])
for i in range(A.shape[0] - 1, -1, -1):
x[i] = Ab[i, -1] - np.dot(Ab[i, :-1], x)
print("x =", x)
```
这里使用了 `numpy` 库来处理矩阵和向量。首先定义了一个矩阵 `A` 和一个列向量 `b`,然后将它们合并成一个增广矩阵 `Ab`。接下来定义了三个函数:`swap_rows` 用于交换矩阵的两行;`normalize_row` 用于将矩阵的一行归一;`eliminate` 用于进行消元操作。最后,在主程序中进行了部分选主元、主元归一和消元操作,并使用回带求解出方程组的解。
阅读全文