这是我实现SOR(连续过度放松)方法的代码。 我想显示一个图表,其中几条曲线代表参数“omega”的参数中残差的|| r ^ k ||的范数2的值。 我在同一图表上显示多条曲线时遇到问题。 你能告诉我我的课程有什么问题吗?
import numpy as np
import scipy.linalg as la
import matplotlib.pyplot as plt
def SOR(A,b,Imax,eps,x0,omega):
D=np.diag(np.diag(A))
M=np.dot((1/omega),D)+np.tril(A,-1)
N=M-A
r=np.dot(A,x0)-b
x=x0
i=0
err=1+eps
res=[]
while((i<Imax) and ((la.norm(r))>=eps)):
x=np.dot(np.dot((la.inv(M)),N),x)+np.dot((la.inv(M)),b)
r=np.dot(A,x)-b
err = la.norm(r,2)
res.append(err)
i=i+1
return (x,i,res)
A=np.array([[2,0,0],[4,5,0],[7,8,9]])
x0=np.array([[4],[8],[7]])
b=np.array([[20],[8],[7]])
这是我们的图形函数,它只显示一条曲线。
def Graph():
i=0.1
while(i<=2):
[x,i,res]=SOR(A,b,100,10**(-3),x0,i)
plt.plot(range(len(res)),res)
plt.yscale('log')
plt.show()
i=i+0.1
Graph()