我应该创建一个使用Gauss-Jacobi方法求解增广矩阵的函数,但不能弄清楚为什么我的解决方案总是[0,0,0]。这就是我所拥有的:
from copy import deepcopy
# Define function
def GaussJacobi(MyA, MyX, xtol=1e-6, maxiter=50):
# MyA=Aaug=augmented matrix
# MyX=x=vector(array) containing inital guess
# xtol=exit condition, xnew-xold is less than xtol
# maxiter=max number of iterations allowed before exiting
#b=equation answers from augmented matrix
n=len(MyA)
x=deepcopy(MyX)
sum=0
b = [0] * len(MyA)
lastcol = len(MyA[0]) - 1
for i in range(len(b)):
b[i] = MyA[i][lastcol]
for iter in range(maxiter):
for row in range(n-3):
for col in range(n-3):
sum=b[col]-MyA[row][col]*x[col]
x[row]=sum/MyA[row][col]
return x
MyA = [[4, -1, -1, 3],
[-2, 6, 1, 9],
[-1, 1, 7, -6]]
MyX = [0, 0, 0]
print(GaussJacobi(MyA, MyX, xtol=1e-6, maxiter=50))
答案 0 :(得分:0)
首先,你不应该像你一直在使用整数除法
即3/4 = 0
在这种情况下,而不是你应该做的是使用
3/float(4) = 0.75
这不是你的代码有什么问题。您应该尝试调试语句,将print语句放在适当的位置,例如设置x
的位置。这导致我发现你甚至没有进入这一点n = len(myA) = 3
所以n - 3 = 0
因此内部循环被搞砸了。
还有许多其他问题,因为你并没有真正总结一些条款你只是重置总和 - 没有重做整个代码(这就是我想要做的!)我无法回答肯定为什么它是{{1但我可以告诉你,即使它不是0
非零结果也很可能是错误的。
非numpy部分可能是你试图跟随this wiki - 你应该复制它并使用点积的公式。