改进的Richardson迭代-如何实现



我有一项任务要在matlab中完成。我必须实现修改后的richardson迭代。我真的不能理解算法,但我想出了这个:

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  

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

您缺少omega参数。从wiki页面来看,迭代是:

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

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

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

G = eye(3)-omega*A;

循环内CCD_ 4的计算为:

x = G*x + omega*b;

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

相关内容

  • 没有找到相关文章