用全主元Gauss消元法求解n*n的矩阵,2≤n≤100.帮我写python代码
时间: 2024-09-07 11:06:39 浏览: 100
全主元高斯消元法是数值线性代数中求解线性方程组的一种方法,它与传统高斯消元法的主要区别在于,每次选择当前剩余矩阵中绝对值最大的元素作为主元,这样做可以提高算法的数值稳定性和解的精度。以下是一个使用全主元高斯消元法求解n*n矩阵的Python代码示例:
```python
import numpy as np
def pivot(A, b):
n = len(A)
# 寻找最大的元及其行索引
max_index = np.argmax(np.abs(A))
if A[max_index].sum() == 0:
raise ValueError('矩阵是奇异的')
max_row = max_index // n
max_col = max_index % n
if max_row != max_index:
# 如果最大元不在对角线上,则进行行交换
A[[max_index, max_row]] = A[[max_row, max_index]]
b[[max_index, max_row]] = b[[max_row, max_index]]
if max_col != max_index:
# 如果最大元不在主元位置,则进行列交换
A[:, [max_index, max_col]] = A[:, [max_col, max_index]]
return A, b
def gaussian_elimination(A, b):
n = len(A)
# 进行全主元高斯消元
for k in range(n):
A, b = pivot(A, b)
for i in range(k+1, n):
factor = A[i][k] / A[k][k]
A[i][k:] -= factor * A[k][k:]
b[i] -= factor * b[k]
return A, b
def back_substitution(A, b):
n = len(A)
x = np.zeros(n)
for i in range(n-1, -1, -1):
x[i] = b[i]
for j in range(i+1, n):
x[i] -= A[i][j] * x[j]
x[i] /= A[i][i]
return x
# 示例矩阵和向量
A = np.array([[0.02, 0.03, 0.05, 0.07],
[0.03, 0.04, 0.02, 0.01],
[0.05, 0.02, 0.01, 0.03],
[0.07, 0.01, 0.03, 0.02]], dtype=float)
b = np.array([0.68, 0.24, 0.19, 0.93], dtype=float)
# 进行高斯消元和回代求解
A, b = gaussian_elimination(A, b)
x = back_substitution(A, b)
print("解向量:", x)
```
在上述代码中,`pivot`函数用于选取主元并进行行和列的交换,`gaussian_elimination`函数实现了消元过程,而`back_substitution`函数则用于从最后一个方程开始回代求解每个变量的值。
阅读全文