改良的Richardson迭代-如何实施

时间:2018-12-19 19:13:47

标签: matlab math

我要在Matlab中做作业。我必须实现修改后的Richardardson迭代。我不太了解算法,但是我想到了这个:

A = [9 1 1;
    2 10 3;
    3 4 11];  
b = [10;
    19;
    0];  
x = [0;
    0;
    0];  
G=eye(3)-A; %I-A  
z = [0,x'];  
for k=1:30  
  x = G*x + b;  
  z = [k,x'];  
  fprintf('Number of Iterations: %d \n', k);  
display(z);  
end  

我收到的输出是错误的,我真的不知道为什么。任何帮助都很好。谢谢!

1 个答案:

答案 0 :(得分:1)

您缺少omega参数。在Wiki页面上,迭代为:

x(k+1) = x(k) + omega*( b - A*x(k) )
       = (I - omega*A)*x(k) + omega*b

其中omega是必须适当选择的标量参数。

因此,您需要将G的计算结果更改为:

G = eye(3)-omega*A;

以及循环内x的计算:

x = G*x + omega*b;

Wiki页面讨论了如何选择omega的值。对于您的特定情况,omega = 0.1似乎运行良好。