列主元gauss-jordan消去法python
时间: 2023-06-16 13:04:08 浏览: 137
python写的列主元Gauss消去法
4星 · 用户满意度95%
以下是使用 Python 实现 Gauss-Jordan 消元法的代码,其中包括了列主元选取的方法:
```python
import numpy as np
def pivot_matrix(M):
"""Returns the pivoting matrix for M, used in Doolittle's method."""
m = len(M)
# Create an identity matrix, with floating point values
id_mat = [[float(i ==j) for i in range(m)] for j in range(m)]
# Rearrange the identity matrix such that the largest element of
# each column of M is placed on the diagonal of of M
for j in range(m):
row = max(range(j, m), key=lambda i: abs(M[i][j]))
if j != row:
# Swap the rows
id_mat[j], id_mat[row] = id_mat[row], id_mat[j]
return id_mat
def gauss_jordan(A, b):
"""Solves the equation Ax = b via Gauss-Jordan elimination."""
# Create the augmented matrix
M = np.column_stack((A, b))
n, m = M.shape
# Create the pivoting matrix P and the inverse of P
id_mat = pivot_matrix(M)
P = np.matrix(id_mat)
P_inv = np.linalg.inv(P)
# Apply the pivoting matrix to M
M = P * M
# Perform the Gauss-Jordan elimination
for j in range(n):
div = M[j, j]
M[j, :] /= div
for i in range(n):
if i != j:
sub = M[i, j]
M[i, :] -= sub * M[j, :]
# Separate the results (x) from the augmented matrix
x = M[:, :-1]
return P_inv * x
# Example usage:
A = np.array([[2, 1, -1], [3, 2, 1], [1, 0, 1]])
b = np.array([8, 13, 2])
x = gauss_jordan(A, b)
print(x)
```
在这个例子中,我们使用了 NumPy 库来处理矩阵运算。函数 `pivot_matrix()` 生成了一个大小为 $n \times n$ 的矩阵,其中第 $i$ 行和第 $j$ 行交换,是为了使得第 $j$ 列的最大元素出现在第 $j$ 行。函数 `gauss_jordan()` 对输入的矩阵 A 和向量 b 进行了消元操作,并返回解向量 x。在最后一个例子中,我们使用这个函数解了一个线性方程组。
阅读全文