我有一项任务要在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
似乎运行良好。