帮我用python编写一个函数my_GS实现Guass-seidel方法求线性方程组,输入为系数矩阵A,右端项b,初始向量x0和迭代步数n,输出为近似解my_x,它的每一列为每一步迭代的近似解。并求迭代的残量和误差的范数
时间: 2024-03-24 14:40:01 浏览: 68
好的,以下是Python代码实现:
```python
import numpy as np
def my_GS(A, b, x0, n):
my_x = np.zeros((len(x0), n+1))
my_x[:,0] = x0
for k in range(n):
for i in range(len(A)):
my_x[i,k+1] = (b[i]-np.dot(A[i,:i],my_x[:i,k+1])-np.dot(A[i,i+1:],my_x[i+1:,k]))/A[i,i]
return my_x
# test
A = np.array([[2,-1,0],[-1,2,-1],[0,-1,2]])
b = np.array([1,0,1])
x0 = np.array([0,0,0])
n = 10
my_x = my_GS(A,b,x0,n)
residual = np.linalg.norm(A.dot(my_x[:,n])-b)
error = np.linalg.norm(my_x[:,n]-np.linalg.solve(A,b))
print("近似解:")
print(my_x)
print("迭代的残量:", residual)
print("误差的范数:", error)
```
函数`my_GS`中,使用了一个n+1列的矩阵my_x,每一列为每一步迭代的近似解。其中,第一列为初始向量x0。在循环中,对于每一个未知数,使用已知的近似解来更新它的近似解值,直到迭代次数达到n。最后,计算迭代的残量和误差的范数并输出。
希望能够帮到你!
阅读全文