python实现高斯消元法
时间: 2023-12-04 22:00:06 浏览: 78
高斯消元法编程
4星 · 用户满意度95%
以下是Python实现高斯消元法的代码:
```python
def gauss_elimination(A, b):
n = len(A)
# 构造增广矩阵
M = []
for i in range(n):
row = A[i] + [b[i]]
M.append(row)
# 高斯消元过程
for k in range(n):
# 首先找到主元素(绝对值最大的元素)
max_row = k
for i in range(k + 1, n):
if abs(M[i][k]) > abs(M[max_row][k]):
max_row = i
# 交换当前行和主元素所在行
M[k], M[max_row] = M[max_row], M[k]
# 将当前行的主元素归一
pivot = M[k][k]
for j in range(k, n + 1):
M[k][j] /= pivot
# 利用当前行将下面的行消元
for i in range(k + 1, n):
factor = M[i][k]
for j in range(k, n + 1):
M[i][j] -= factor * M[k][j]
# 回代求解
x = [0] * n
for i in range(n - 1, -1, -1):
x[i] = M[i][n]
for j in range(i + 1, n):
x[i] -= M[i][j] * x[j]
return x
```
这个函数接受两个参数,一个是系数矩阵 A,一个是常数向量 b,返回一个解向量 x。其中,系数矩阵和常数向量的形式如下:
$$
A = \begin{bmatrix}
a_{11} & a_{12} & \cdots & a_{1n}\\
a_{21} & a_{22} & \cdots & a_{2n}\\
\vdots & \vdots & \ddots & \vdots\\
a_{n1} & a_{n2} & \cdots & a_{nn}
\end{bmatrix},\quad
b = \begin{bmatrix}
b_1\\
b_2\\
\vdots\\
b_n
\end{bmatrix}
$$
如果输入的矩阵不满足对角线元素非零的条件,则函数可能会出现除以零的错误。如果输入的矩阵是奇异矩阵(即没有唯一解的矩阵),则函数会返回一个近似解。
阅读全文