0
ヤコビ、ガウス・ザイデル、およびSORの方法をプログラムして、Ax = bを解決する必要があります。分解A = M-Nを用いる。ヤコビ法の縦座標の対数目盛のグラフ
たとえばJacobi法では、M = diag(A)とN = M-Aを使用します。
Iは行列A、列ベクトルb、反復値Imax、ヤコビ法の許容ERRの最大数の関数
jacobi(A,b,Imax,err,x0)
にプログラム。私は、 "stop test" を使用しました。ここで、
は、ステップkでの "残差"です。ここ
は私のコードである:
import numpy as np
import scipy.linalg as la
def jacobi(A,b,Imax,eps,x0):
M=np.diag(np.diag(A))
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.4,0],[7,8,9]])
x0=np.array([[1],[1],[1]])
b=np.array([[20],[8],[7]])
print(jacobi(A,b,1000,10**(-3),x0))
ここで、Iは、(縦軸対数スケールで)のグラフに表現しなければならないnの関数の値 。
グラフを対数スケールで表現する方法を知りたいだけですか?私はPythonで初心者だと私は、グラフを表現する方法がわからない...私は明確にしてみました、私の悪い英語のため申し訳ありません...