高斯赛德尔法及python实现
时间: 2024-01-10 10:04:29 浏览: 67
高斯赛德尔法是一种迭代法,用于解决线性方程组。它是Jacobi迭代法的改进版,可以更快地收敛到解。以下是高斯赛德尔法的步骤:
1.将系数矩阵A分解为D-L-U的形式,其中D是A的对角线矩阵,L是A的下三角矩阵,U是A的上三角矩阵。
2.将方程组Ax=b转化为(D-L)x=Ux+b的形式。
3.取一个初始解向量x0。
4.根据公式xi=(D-L)^(-1)(Uxi-1+b)进行迭代,直到满足收敛条件为止。
以下是使用Python实现高斯赛德尔法的代码:
```python
import numpy as np
def gauss_seidel(A, b, x0, maxN, p):
D = np.diag(np.diag(A))
L = -np.tril(A, -1)
U = -np.triu(A, 1)
T = np.dot(np.linalg.inv(D - L), U)
c = np.dot(np.linalg.inv(D - L), b)
x = x0
for i in range(maxN):
x_new = np.dot(T, x) + c
if np.linalg.norm(x_new - x) < p:
return x_new
x = x_new
return x
A = np.mat([[10,3,1],[2,-10,3],[1,3,10]])
b = np.mat([[14],[-5],[14]])
x0 = np.mat([[0],[0],[0]])
maxN = 100
p = 0.0000000001
x = gauss_seidel(A, b, x0, maxN, p)
print(x)
```
阅读全文