这是我的示例代码。它是高斯赛德尔(矩阵求解器)的迭代过程。本质上,当错误足够小时,它会退出 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。这使我认为这是导致问题的两种陈述的某种组合。
这是一个很大的问题,因为如果 x_past = x_present 每次错误 = 0 并且循环在第一次迭代后中断。代码确实有效,例如,如果我告诉代码运行 8 次迭代并且中断它给了我应该的答案。
在过去的 4 个小时里,我一直试图弄清楚这一点,但我完全被难住了。我使用 python 的时间不长,所以我在语法方面的故障排除技巧并不是那么好。任何帮助,将不胜感激!!