python实现Jacobi迭代法和Gauss-Seidel迭代法解线性方程组
时间: 2024-05-03 16:21:59 浏览: 124
Jacobi迭代法和Gauss-Seidel迭代法均是解线性方程组的迭代方法。下面分别介绍它们的实现方法。
Jacobi迭代法
Jacobi迭代法的公式为:
$$x_i^{(k+1)}=\frac{1}{a_{ii}}\left(b_i-\sum_{j=1,j\neq i}^na_{ij}x_j^{(k)}\right),\quad i=1,2,\cdots,n$$
其中,$a_{ij}$是系数矩阵,$b_i$是常数向量,$x_i^{(k)}$是第$k$次迭代中$x_i$的近似值。
下面是Python实现Jacobi迭代法的代码:
```python
import numpy as np
def jacobi(A, b, x0, tol=1e-6, max_iter=100):
n = len(A)
x = x0.copy()
for k in range(max_iter):
x_new = np.zeros(n)
for i in range(n):
s = 0
for j in range(n):
if j != i:
s += A[i, j] * x[j]
x_new[i] = (b[i] - s) / A[i, i]
if np.linalg.norm(x_new - x) < tol:
return x_new
x = x_new
return x
```
其中,`A`和`b`分别是系数矩阵和常数向量,`x0`是初始解,`tol`是迭代收敛的容许误差,`max_iter`是最大迭代次数。函数返回迭代得到的近似解。
Gauss-Seidel迭代法
Gauss-Seidel迭代法的公式为:
$$x_i^{(k+1)}=\frac{1}{a_{ii}}\left(b_i-\sum_{j=1}^{i-1}a_{ij}x_j^{(k+1)}-\sum_{j=i+1}^na_{ij}x_j^{(k)}\right),\quad i=1,2,\cdots,n$$
其中,$a_{ij}$是系数矩阵,$b_i$是常数向量,$x_i^{(k)}$是第$k$次迭代中$x_i$的近似值。
下面是Python实现Gauss-Seidel迭代法的代码:
```python
import numpy as np
def gauss_seidel(A, b, x0, tol=1e-6, max_iter=100):
n = len(A)
x = x0.copy()
for k in range(max_iter):
for i in range(n):
s1 = sum(A[i, j] * x[j] for j in range(i))
s2 = sum(A[i, j] * x[j] for j in range(i+1, n))
x[i] = (b[i] - s1 - s2) / A[i, i]
if np.linalg.norm(A @ x - b) < tol:
return x
return x
```
其中,`A`和`b`分别是系数矩阵和常数向量,`x0`是初始解,`tol`是迭代收敛的容许误差,`max_iter`是最大迭代次数。函数返回迭代得到的近似解。
阅读全文