Matlab中的Jacobi/Gauss-Seidel方法

Matlab中的Jacobi/Gauss-Seidel方法,matlab,matrix,linear-algebra,numerical-methods,Matlab,Matrix,Linear Algebra,Numerical Methods,我需要在Matlab中实现Jacobi和Guass-Seidel方法 我发现其中的代码(在我尝试过的一个示例上)可以为每个示例生成正确的结果 见下文3 我的问题是实现与描述的不同,并且 我很高兴使用其他人的代码(事实上我更喜欢经过测试的代码),但我想确切地了解它是如何工作的 有人能给我介绍一下这篇文章中使用的实现吗 或者,这些算法的其他实现是否可以被视为Matlab中的基准?我想向您展示Seidel上的代码是如何工作的,希望您可以自己对Jacobi进行同样的分析 Q=tril(A); % Q =

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

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

见下文3

我的问题是实现与描述的不同,并且

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

有人能给我介绍一下这篇文章中使用的实现吗


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

我想向您展示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)因此,如果您遵循wikipedia中的公式,迭代更新应该是:
x(:,k+1)=(dx+x(:,k))而它与您提供的代码相同:
x(:,k+1)=x(:,k)+lambda*dx


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

啊,谢谢您的帮助!在您给出的示例中,虽然L和U的x(y)相同,但在wikipeadia页面上,L乘以x(t+1)。当您允许更新应用于L矩阵的x值时,派生是否会发生变化?@Bazman谢谢您Bazman。有关x上的标签,请参见我的更新答案。L乘以x(t+1),但我用L的倒数把它从方程的左边移到右边。谢谢