修复 Python 代码以实现 Jacobi 方法 [已关闭]

Fix Python code to implement Jacobi Method [closed]

提问人:Aversions 提问时间:11/16/2023 更新时间:11/16/2023 访问量:66

问:


编辑问题以包括所需的行为、特定问题或错误以及重现问题所需的最短代码。这将帮助其他人回答这个问题。

7天前关闭。

我正在尝试编写代码以在线性方程组上实现雅可比方法。

到目前为止,我已经写了这个:

    #Jacobi Method
    i = 0
    z = np.array([[-1.,3.,2.,11.],[1.,1.,1.,6.],[0.,2.,-1.,1.]])
    print(z)
    x = np.array([[0.],[0.],[0.]])
    y = np.array([[0.],[0.],[0.]])
    while (i < 3):
        y[0] = (z[0,3]/z[0,0])-(+(z[0,2]*x[2])+(z[0,1]*x[1]))
        y[1] = (z[1,3]/z[1,1])-(+(z[1,2]*x[2])+(z[1,0]*x[0]))
        y[2] = (z[2,3]/z[2,2])-(+(z[2,1]*x[1])+(z[1,0]*x[0]))

        x = y
        y = np.array([[0.],[0.],[0.]])
        print(x)
        print(z)
        i = i + 1`

我知道这不是一个完美的代码,但我似乎无法在其中找到我的错误,因为它在第一次迭代后无法正常工作

Python 线性编程 数值方法

评论

1赞 Vladimir F Героям слава 11/16/2023
欢迎。“it doesn't work proper” 是什么意思?请参阅如何提问
0赞 Aversions 11/16/2023
@VladimirF在我的第一次迭代中,它给出了正确的答案,但之后它没有给出正确的答案。

答:

0赞 JustLearning 11/16/2023 #1

假设矩阵的最后一列是相应线性系统的右侧,您想要的是将所有更新除以对角线元素:z

y[0] = (z[0, 3] - ((z[0, 2] * x[2]) + (z[0, 1] * x[1]))) / z[0, 0]                                               
y[1] = (z[1, 3] - ((z[1, 2] * x[2]) + (z[1, 0] * x[0]))) / z[1, 1]                                               
y[2] = (z[2, 3] - ((z[2, 1] * x[1]) + (z[1, 0] * x[0]))) / z[2, 2] 

否则,请使用更标准的符号重写您的问题,例如本文

0赞 Aversions 11/16/2023 #2

没关系,我解决了它:

#Jacobi Method
i = 0
z = np.array([[-1.,3.,2.,11.],[1.,1.,1.,6.],[0.,2.,-1.,1.]])
print(z)
x = np.array([[0.],[0.],[0.]])
y = np.array([[0.],[0.],[0.]])
while (i < 3):
    y[0] = (1./(z[0,0]))*((z[0,3])-(z[0,2]*x[2])-(z[0,1]*x[1]))
    y[1] = (1./(z[1,1]))*((z[1,3])-(z[1,2]*x[2])-(z[1,0]*x[0]))
    y[2] = (1./(z[2,2]))*((z[2,3])-(z[2,1]*x[1])-(z[2,0]*x[0]))


    x = y
    y = np.array([[0.],[0.],[0.]])
    print(x)
    i = i + 1