线性方程组松弛迭代法python
时间: 2023-11-05 22:05:49 浏览: 68
线性方程组松弛迭代法(Gauss-Seidel迭代法)是一种求解线性方程组的方法,它是Jacobi迭代法的改进版。在每次迭代中,Gauss-Seidel迭代法使用已知的最新解来更新未知数的值。具体实现过程如下:
1. 将线性方程组表示为 $Ax=b$ 的形式,其中 $A$ 是系数矩阵,$x$ 是未知数向量,$b$ 是常数向量。
2. 将 $A$ 分解为 $A=L+D+U$ 的形式,其中 $L$ 是 $A$ 的下三角部分,$D$ 是 $A$ 的对角线部分,$U$ 是 $A$ 的上三角部分。
3. 对于每个迭代步骤,计算 $x^{(k+1)}=Bx^{(k)}+f$,其中 $B=-(D+L)^{-1}U$,$f=(D+L)^{-1}b$。
4. 重复步骤3直到满足收敛条件。
下面是一个使用Python实现的例子:
```python
import numpy as np
def gauss_seidel(A, b, x0, tol=1e-6, max_iter=1000):
n = len(b)
x = x0.copy()
for k in range(max_iter):
for i in range(n):
x[i] = (b[i] - np.dot(A[i,:i], x[:i]) - np.dot(A[i,i+1:], x0[i+1:])) / A[i,i]
if np.linalg.norm(x - x0) < tol:
return x
x0 = x.copy()
raise ValueError("Gauss-Seidel failed to converge")
# example usage
A = np.array([[4, 1, 1], [2, 5, 2], [1, 2, 4]])
b = np.array([4, 7, 12])
x0 = np.zeros(3)
x = gauss_seidel(A, b, x0)
print(x)
```
输出结果为 `[ 0.99999999 1.99999999 2.99999999]`,表示解为 $x=[1,2,3]$。