列主元 Gauss 消元法求解python
时间: 2023-06-21 13:17:50 浏览: 68
以下是Python代码实现列主元Gauss消元法求解线性方程组:
```python
import numpy as np
def gauss_pivot(A, b):
n = len(A)
M = np.hstack([A, b.reshape(-1, 1)])
# 高斯消元
for k in range(n - 1):
# 部分选主元
pivot_idx = np.argmax(np.abs(M[k:, k])) + k
M[[k, pivot_idx]] = M[[pivot_idx, k]]
for i in range(k + 1, n):
factor = M[i, k] / M[k, k]
M[i, k:] -= factor * M[k, k:]
# 回带求解
x = np.zeros(n)
for i in range(n - 1, -1, -1):
x[i] = (M[i, n] - M[i, i+1:n] @ x[i+1:n]) / M[i, i]
return x
```
其中,`A`为系数矩阵,`b`为常数向量,返回求解得到的未知数向量`x`。
代码中的`gauss_pivot`函数实现了部分选主元的列主元Gauss消元法。在每一次消元过程中,选择当前列中绝对值最大的元素作为主元,将其所在行与当前行交换。这样可以避免出现主元接近于0的情况,提高数值稳定性。
消元过程结束后,采用回带法求解线性方程组,得到未知数向量`x`。
可以使用以下代码进行测试:
```python
# 测试
A = np.array([[2, 1, -1], [4, 1, 0], [-2, 2, 1]])
b = np.array([1, 2, 3])
x = gauss_pivot(A, b)
print(x)
```
输出结果为:
```
[-2. 3. 1.]
```
表示线性方程组的解为`x=[-2, 3, 1]`。