###問題点
while
の中での行列の計算がうまくいきません。
やりたい計算で悩んでいる部分は、漸化式がx_(n+1)=(b-Rx)/D
です。
くわしくは、ヤコビ法を見てください。
下記のようなエラーが出てきます。
yakobi.py:37: RuntimeWarning: invalid value encountered in true_divide xn1=(b-np.dot(R,x))/D
エラーがでてきてもプログラム自体は動いているようなので結果を出力すると
xn1= [[ 1. nan inf inf] [ inf -0.4 -inf inf] [ inf -inf 0. inf] [ inf -inf nan 0.5]]
というものがでてきました。どうしてこのようなエラーがでてくるのか教えてください。
###コード
python
1import numpy as np 2import math 3print("input n: ",end="") 4n=int(input()) 5 6np.random.seed(1) #乱数の種を設定 7A=np.random.randint(0,2,(n,n),int) #n行n列の行列 8print("A=",A) 9#対角要素にnを加える 10for i in range(n): 11 for j in range(n): 12 if i==j: 13 A[i][j]+=n 14print("A=",A) 15 16b=np.random.randint(0,2*n,n) #0以上2n未満のランダムな整数値をとる 17print("b=",b) 18 19#ヤコビ法 20D=np.zeros((n,n),int) 21x=np.ones((n,n)) 22print("x=",x) 23#対角行列の生成 24for i in range(n): 25 for j in range(n): 26 if i==j: 27 D[i][j]=A[i][j] 28print("D=",D) 29R=A-D 30print("R=",R) 31i=0 32while True: 33 #print("i=",i) 34 #xn1=np.zeros((n,n)) 35 xn1=(b-np.dot(R,x))/D 36 #print("xn1=",xn1) 37 Ax=np.dot(A,x) 38 xnorm=np.linalg.norm(Ax-b) 39 i+=i 40 if i==100 or xnorm<=pow(10,-6): 41 break 42print("x=",xn1)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/07 06:02
2020/12/07 06:09
2020/12/07 06:51