不动点迭代(Matlab 绘图)

                     

贡献者: ACertainUser

预备知识 Matlab 画图

   不动点迭代法也是一种求解方程(或函数零点)$f(x)=0$ 的经典方法。

图
图 1:不动点迭代求解 $x=\varphi(x)=0.2x^2$ 的 Cobweb 图
图
图 2:对 $x=\cos x$ 的不动点迭代更形象地展现了"Cobweb"(“蛛网”)恐蜘蛛者慎入

   为了使用不动点迭代,先得改写方程的形式:

\begin{equation} f(x)=0\Rightarrow x = \varphi(x)~, \end{equation}
使 $x = \varphi(x)$ 等式成立的 $x$ 就是 $\varphi(x)$ 的不动点,亦即 $f(x)=0$ 的解。

   不动点迭代的迭代公式是

\begin{equation} x_{k+1} = \varphi(x_k) \qquad k=0,1,2,...~, \end{equation}
其中 $x_0$ 是人为选定的、对解的初始猜测。如果满足收敛条件1,那么迭代结果将收敛于不动点 $x$: $$\lim_{k\to+\infty} x_k = x~.$$

   以下的 Matlab 代码粗糙地实现了不动点迭代,同时做出了过程的 Cobweb 示意图:

clc
clear

f = @(x) 0.2*x.^2;
x(1) = 4;

hold on
axis equal

for i=1:100
  if i~=1
    x(i) = f(x(i-1));
  end

  line([x(i) x(i)],[0 f(x(i))],'Color','r');
  scatter(x(i),0);
  text(x(i),-0.1,[int2str(i)],'fontsize',12);

  if i~=1
    line([x(i - 1) x(i)],[f(x(i-1)) f(x(i-1))],'Color','b');
    line([x(i) x(i)],[f(x(i - 1)) f(x(i))],'Color','b');
  end

  if i~=1 && abs(x(i) - x(i-1)) < 0.01
    break;
  end
end

if x(i) < x(1)
  _x = x(i)-0.5:0.01:x(1)+0.5;
else
  _x = x(1)-0.5:0.01:x(i)+0.5;
end

_y = f(_x);
plot(_x, _y,'k');
plot(_x, _x,'k');


1. ^ 参考你的数值计算课本


致读者: 小时百科一直以来坚持所有内容免费无广告,这导致我们处于严重的亏损状态。 长此以往很可能会最终导致我们不得不选择大量广告以及内容付费等。 因此,我们请求广大读者热心打赏 ,使网站得以健康发展。 如果看到这条信息的每位读者能慷慨打赏 20 元,我们一周就能脱离亏损, 并在接下来的一年里向所有读者继续免费提供优质内容。 但遗憾的是只有不到 1% 的读者愿意捐款, 他们的付出帮助了 99% 的读者免费获取知识, 我们在此表示感谢。

                     

友情链接: 超理论坛 | ©小时科技 保留一切权利