我要在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
我收到的输出是错误的,我真的不知道为什么。任何帮助都很好。谢谢!
答案 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
似乎运行良好。