Matlab SOR方法实现
Matlab SOR Method Implementation
使用零向量的初始近似值并且不考虑公差,我将代码缩短为仅需要 4 个参数。这样 x1 总是等于 c,依此类推 x(k+1)=x(k)T+c.
但是,代码似乎没有产生您期望的正确近似值。有人注意到我哪里搞砸了吗?假设 DLU_decomposition(A) returns 正确的矩阵。
function x = sor2(A,b,omega,kmax)
[D,L,U] = DLU_decomposition(A);
T=inv(D-omega*L)*(((1-omega)*D)+(omega*U));
c= (omega*inv(D-omega*L))*b;
for k=1:kmax,
if(k==1),
x=c;
end
x=T*x+c;
end
norm(A*x-b)
end
好吧,我猜所有的困惑都可能来自于乘法。您需要按元素计算矩阵 --> 使用 .*
而不是正常的 *
。这会提供正确的近似值吗?
使用零向量的初始近似值并且不考虑公差,我将代码缩短为仅需要 4 个参数。这样 x1 总是等于 c,依此类推 x(k+1)=x(k)T+c.
但是,代码似乎没有产生您期望的正确近似值。有人注意到我哪里搞砸了吗?假设 DLU_decomposition(A) returns 正确的矩阵。
function x = sor2(A,b,omega,kmax)
[D,L,U] = DLU_decomposition(A);
T=inv(D-omega*L)*(((1-omega)*D)+(omega*U));
c= (omega*inv(D-omega*L))*b;
for k=1:kmax,
if(k==1),
x=c;
end
x=T*x+c;
end
norm(A*x-b)
end
好吧,我猜所有的困惑都可能来自于乘法。您需要按元素计算矩阵 --> 使用 .*
而不是正常的 *
。这会提供正确的近似值吗?