jacobi迭代方法在c ++中有错误的答案

时间:2018-05-22 09:00:25

标签: c++ math linear-algebra physics scientific-computing

我正在编写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

2 个答案:

答案 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:

enter image description here

Jacobi将在以下情况下收敛:

Convergence criteria

由于样本矩阵的第一行不是这种情况,因此可能会出现问题。

如果您使用正确答案作为初始猜测,您仍然可以一步到位。这说明即使Jacobi也会有明智的选择。

如果我从{1,1}开始,我会在一次迭代中收敛到正确的答案。