2017-12-15 7 views
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" enter image description hereを使用しました。ここで、enter image description hereは、ステップ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の関数の値enter image description here

グラフを対数スケールで表現する方法を知りたいだけですか?私はPythonで初心者だと私は、グラフを表現する方法がわからない...私は明確にしてみました、私の悪い英語のため申し訳ありません...

答えて

2

ここにいくつかのダミーの値

のログプロットであります
import matplotlib.pyplot as plt 
import numpy as np 

j = np.power(10,range(10)) # <--- here use your computed values instead 

plt.plot(j) 
plt.yscale('log') 
plt.show() 

log plot

あなたはログインログにもxscaleを設定したい場合。

関連する問題