我正在编写Jacobi迭代方法来求解任何线性方程组。这个程序适用于一些例子,但对其他人不起作用。例如
element.all(by.css(input[name="checks"])).get(1)
这将有效,答案是正确的,但
A= and B=
7 3 5
2 3 4
答案是错误的和庞大的数字。 我真的不知道我该怎么做才能做出正确的计算。 我使用了其他一些代码,但我仍然遇到代码问题。
A= and B=
1 2 3
3 4 7
答案 0 :(得分:1)
您应该再次检查收敛条件。在那里,您会发现通常该方法仅收敛于对角占优矩阵。第一个例子满足了这个条件,而第二个例子则明确地违反了它。
如果无法保证收敛,可能会发生分歧,正如您所发现的那样。
更具体地说,第二个例子中的Jacobi迭代计算
xnew[0] = (3 - 2*x[1])/1;
xnew[1] = (7 - 3*x[0])/4;
超过两次迭代,步骤的组成给出了
xtwo[0] = (3 - 2*xnew[1])/1 = -0.5 + 1.5*x[0];
xtwo[1] = (7 - 3*xnew[0])/4 = -0.5 + 1.5*x[1];
这显然是使用因子1.5
扩展初始错误。
答案 1 :(得分:0)
您的矩阵按行顺序为:[{1,2} {3,4}]
它的行列式等于-2;很明显,它不是单数。
它有倒数:[{4,-2},{ - 3,1}] /( - 2)
正确的解决方案是:{1,1}
您可以通过替换回原始等式并检查以确保您具有身份来验证这一点:[{1,2} {3,4}] {1,1} = {3,7}
迭代方法可能对初始条件敏感。
关于对角占优势的观点是正确的。也许更接近正确答案的初始条件更明智的选择将使你收敛。
更新
Jacobi迭代将矩阵分解为对角元素D和非对角元素R:
Jacobi将在以下情况下收敛:
由于样本矩阵的第一行不是这种情况,因此可能会出现问题。
如果您使用正确答案作为初始猜测,您仍然可以一步到位。这说明即使Jacobi也会有明智的选择。
如果我从{1,1}开始,我会在一次迭代中收敛到正确的答案。