提问人:Aversions 提问时间:11/16/2023 更新时间:11/16/2023 访问量:66
修复 Python 代码以实现 Jacobi 方法 [已关闭]
Fix Python code to implement Jacobi Method [closed]
问:
我正在尝试编写代码以在线性方程组上实现雅可比方法。
到目前为止,我已经写了这个:
#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`
我知道这不是一个完美的代码,但我似乎无法在其中找到我的错误,因为它在第一次迭代后无法正常工作
答:
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
上一个:梯度下降残差
下一个:梯度下降卡在局部最小值?
评论