这是我的示例代码.它是高斯塞德尔(矩阵求解器)的迭代过程.基本上当错误足够小时,它会突破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很长时间,所以我的麻烦射击技巧语法明智不是那么好.任何帮助,将不胜感激!!
是的,我认为这里的答案显示了你的问题.只是为了尝试澄清一点点.
您正在引用列表,因此当列表更改时,对该列表的任何引用都将反映该更改.展示:
>>> x_present = [4,5,6] >>> >>> x_past = x_present >>> >>> x_past [4, 5, 6] >>> >>> x_present.append(7) >>> >>> x_past [4, 5, 6, 7] >>>
如果你想要列表的副本,你需要这样做,listcopy = mylist [:].
>>> x_past = x_present[:] >>> x_past [4, 5, 6, 7] >>> >>> x_present.append(8) >>> >>> x_past [4, 5, 6, 7]