これが私のサンプルコードです。これは、ガウス・ザイデル(行列ソルバー)の反復手順となることを目的としています。基本的に、エラーが十分に小さい場合、whileループから抜け出します。
i=1
while (i>0):
x_past = x_present
j=0
while(j<3):
value=0
k=0
while(k<3):
if(k!=j):
if(i==1):
if(k>j):
value=value+0
else:
value=value+x_present[k]*eqn[j][k]
else:
value=value+x_present[k]*eqn[j][k]
else:
value=value+eqn[j][k]
k=k+1
x_present[j:j+1]=[value]
j=j+1
print "X_PAST"
print x_past
print "X_PRESENT"
print x_present
if(error(x_past, x_present)<10**-2):
break;
i=i+1
コードを減らして管理しやすくしました。あなたがそれが何をしているのか理解していないなら、それはこの問題を解決するのにそれほど重要ではありません。
これが問題です。毎回
x_present[j:j+1]=[value]
が実行されると、x_pastはx_presentと等しくなります。x_pastをx_presentに設定したのはループの一番上だけなので、なぜこれが当てはまるのかわかりません。私が奪うなら
x_past=x_present
文では、x_pastがx_presentと等しくなることはありません。これにより、問題の原因は2つのステートメントの組み合わせであると思います。
これは、x_past =x_presentが毎回エラー=0であり、最初の反復後にループが中断する場合の大きな問題の原因です。コードは機能します。たとえば、コードに8回の反復を実行するように指示し、ブレークすると、想定される答えが得られます。
私は過去4時間これを理解しようとしてきましたが、完全に困惑しています。私は長い間Pythonを使用していないので、構文に関するトラブルシューティングスキルはそれほど優れていません。どんな助けでもいただければ幸いです!!