做一个简单的不动点迭代

不动点法用于求解一元方程。它的基本原理是这样的:

例如我有一个方程 $latex f(x)=0$,那么将这个方程等价变形为 $latex x=g(x)$。

其实在这里,可以画出两个函数的图像,图像的交点就是答案。

说好的迭代呢………………

  1. 任意取一个 x
  2. 代入 $latex g(x) $ 中
  3. 求得一个 $latex y$
  4. 令 $latex x=y$,转第二步。

没错就是这么简单。

代码

拿 Matlab 写代码好了……Python 的 plotlib 有时候真心 bug,图片死都出不来。怪我喽?

我们要求方程 $latex f(x)=x^3+10x-20 $ 的唯一实根。

实际上,对于给定的方程,第一步的 “转化” 有很多种形式,可以是 $latex x=\frac{20-x^3}{10} $,可以是 $latex x=(20-10x)^\frac{1}{3} $ ,也可以是 $latex x=\frac{-10}{x}+\frac{20}{x^2} $。真的不是因为爱才选了第一种形式…… 而是因为,选择其他两种形式非常难得到结果。把图画出来,看一下点的轨迹就知道了(不收敛 / 很难收敛)。

还有一个坑是,Matlab 不能做负数开三次根号。问:$latex \sqrt[3]{-1}$ 等于多少?你看看在 Matlab 下面算 (-1)^(1/3) 给出的 复数 是多少?等等,为啥是复数?!

效果图

点运动轨迹

嗯最终收敛了!

《做一个简单的不动点迭代》上有2条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注