【问题标题】:Jacobi/Gauss Seidel Methods in MatlabMatlab 中的 Jacobi/Gauss Seidel 方法
【发布时间】:2014-01-16 17:15:12
【问题描述】:

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

我发现this link 的代码可以为每个生成正确的结果(在我尝试的一个示例中)。

见帖子 3。

我的问题是实现与herehere 描述的不同

我很高兴使用别人的代码(实际上我更喜欢经过尝试和测试的代码),但我想确切地了解它是如何工作的。

有人可以指出我在帖子中使用的实现的描述吗?

这些算法的其他实现是否可以被视为 Matlab 中的基准?

【问题讨论】:

    标签: matlab matrix linear-algebra numerical-methods


    【解决方案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;

    请注意,lambda 是一个松弛系数,主要作用于收敛速度的调整。可以在代码中设置为1,这样就和wikipeida中的公式一模一样了。

    【讨论】:

    • 啊,非常感谢!在您给出的示例中,尽管 L 和 U 的 x(y) 相同。但在维基百科页面上,L 乘以 x(t+1)。当您允许更新应用于 L 矩阵的 x 值时,推导是否会改变?
    • @Bazman 谢谢Bazman。请参阅我在答案中的更新以获取 x 上的标签。 L 乘以 x(t+1),但我使用 L 的倒数将其从方程的左侧移动到右侧。谢谢
    猜你喜欢
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    • 2013-07-08
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多