Matlab中的Jacobi / Gauss Seidel方法

时间:2013-12-29 19:12:29

标签: matlab matrix linear-algebra numerical-methods

我需要在Matlab中实现Jacobi和Guass Seidel方法。

我发现this link的代码可以为每个代码生成正确的结果(在我试过的一个样本上)。

见第3篇。

我的问题是实施与herehere

所描述的不同

我很高兴使用别人的代码(实际上我更喜欢尝试和测试过的东西),但我想知道它是如何工作的。

有人能指出我对帖子中使用的实现的描述吗?

另外,这些算法的其他实现可能被认为是Matlab中的基准测试吗?

1 个答案:

答案 0 :(得分:1)

我想向您展示Seidel上的代码是如何工作的,希望您可以自己对Jacobi进行相同的分析。

Q=tril(A); % Q == L
r=b-A*x;
dx=Q\r; 

此部分在数学上表示x(:,k+1) = inv(L) * (b - A*x(:,k)) = inv(L) * (b - L*x(:,k) - U*x(:,k));

在您提供的维基百科页面中,需要inv(L) * (b - U*x(:,k));

但是它们与inv(L) * (b - L*x(:,k) - U*x(:,k)) = inv(L) * (b - U*x(:,k)) - x(:,k);相同,所以如果您按照维基百科中的公式进行操作,则迭代更新应该是:x(:,k+1)=(dx + x(:,k));,而在您提供的代码中它是相同的:x(:,k+1) = x(:,k) + lambda * dx; < / p>

请注意,lambda是一个松弛系数,主要用于收敛速度调整。您可以在代码中设置为1,这与wikipeida中的公式完全相同。