Python中的Gauss-Jacobi方法

Python中的Gauss-Jacobi方法,python,Python,我应该做一个函数,用高斯-雅可比方法来求解增广矩阵,但我不明白为什么我的解总是[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 c

我应该做一个函数,用高斯-雅可比方法来求解增广矩阵,但我不明白为什么我的解总是[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))

首先,您不应该像以前那样使用整数除法 i、 e.
3/4=0
在这种情况下,而不是你应该做的是使用

3/float(4) = 0.75 
这不是你的代码的问题所在。您应该尝试调试语句,将打印语句放置在适当的位置,如设置
x
的位置。这让我看到你甚至没有进入这一点,因为
n=len(myA)=3
所以
n-3=0
所以内部循环混乱

还有很多其他的问题,因为你没有真正地对术语进行求和,你实际上只是重置了求和-没有重做整个代码(这是我想做的!)我不能肯定地回答为什么它是
0
,但我可以告诉你,即使它不是
0
,非零结果也很可能是错误的


非numpy部分可能是您试图遵循的-您应该复制它并使用点积公式

首先,您不应该像以前那样使用整数除法 i、 e.
3/4=0
在这种情况下,而不是你应该做的是使用

3/float(4) = 0.75 
这不是你的代码的问题所在。您应该尝试调试语句,将打印语句放置在适当的位置,如设置
x
的位置。这让我看到你甚至没有进入这一点,因为
n=len(myA)=3
所以
n-3=0
所以内部循环混乱

还有很多其他的问题,因为你没有真正地对术语进行求和,你实际上只是重置了求和-没有重做整个代码(这是我想做的!)我不能肯定地回答为什么它是
0
,但我可以告诉你,即使它不是
0
,非零结果也很可能是错误的

非numpy部分可能是您试图遵循的-您应该复制它并使用点积公式