不动点迭代算法
今天有个小朋友向我提出了一个「了不起」的问题。 一个有趣的现象 打开一个没有 Bug 的计算器,任意输入一个数值 \(x\) ,然后找到函数 \(sin(x)\) 或者 \(cos(x)\) ,连续点击这个函数若干次,你会发现一个有趣的现象:无论初始的 \(x\) 为多少,最后的值总是接近某一个数值(这些数值在某个精度范围内是相等的)。 \(sin(x)\) 最后总为 \(0\) , \(cos(x)\) 最后为 0.73 或者 0.99 (取决于你的计算器是否开启弧度制)。 从数学的角度来看,实际上就是:定义 \(f^1(x) = f(x), f^2(x)=f(f(x)), f^{n}(x)=f(f(f(...f(x))))\) , \(n\) 个 \(f\) 进行复合函数运算,求 \(\lim\limits_{n \rightarrow \infty} f^{n}(x)\) 。 显然,这道证明题我不会😅。 万能的搜索引擎 虽然我不会证明,但是找一下是什么知识点还是挺简单的。查了一圈回来,发现这其实是「数值分析」中的 不动点方程 。上述证明题, \(\lim\limits_{n \rightarrow \infty} f^{n}(x)\) 的值实际上是 \(x = f(x)\) 的根。这个方程用「零点定理」,写一个 while-loop 就出来了,所以就不说了。 算了