神奇的“不动点”_ 值得反复体会

1. 不动点的定义

设 \(f\) 是一个从集合 \(X\) 到自身的函数,即 \(f: X \to X\)。如果存在某个 \(x^* \in X\),使得

\[f(x^*) = x^*, \]

那么 \(x^*\) 就是函数 \(f\) 的不动点。

关键就一句话:

函数作用之后,结果还是它自己。

例如:

\[f(x) = x^2 \]

解方程 \(x^2 = x\),得到 \(x = 0\) 或 \(x = 1\),所以 \(0\) 和 \(1\) 都是 \(f\) 的不动点。


2. 数学中的“迭代不动点”

迭代就是“反复代入同一个函数”:

\[x_0 \quad \text{给定},\qquad x_{n+1} = f(x_n) \]

如果这个迭代过程收敛,也就是 \(x_n\) 越来越接近某个数 \(L\),并且 \(f\) 是连续函数,那么两边取极限:

\[L = \lim_{n\to\infty} x_{n+1} = \lim_{n\to\infty} f(x_n) = f\left(\lim_{n\to\infty} x_n\right) = f(L) \]

所以极限 \(L\) 一定满足 \(f(L) = L\)。

也就是说:

迭代的稳定终点,就是不动点。

一个经典例子是:

\[f(x) = \cos x \]

从任意一个初始值开始迭代:

\[x_{n+1} = \cos x_n \]

会收敛到大约 \(0.739\),这个数满足:

\[\cos x = x \]

所以它是 \(\cos x\) 的不动点。


3. 编程中的“迭代不动点”

编程中,迭代不动点通常就是不断循环计算,直到结果不再变化:

def fixed_point(f, x0, eps=1e-12):
    x = x0
    while True:
        x_new = f(x)
        if abs(x_new - x) < eps:
            return x_new
        x = x_new

这个过程很常见,比如:

  • 求解方程:\(g(x)=0\) 可以改写成 \(F(x)=x\),然后迭代求解;
  • 牛顿迭代法:求 \(f(x)=0\) 的根时,令

\[F(x) = x - \frac{f(x)}{f'(x)} \]

那么原方程的根正好是 \(F\) 的不动点。

更深刻地说,在计算机科学中,递归函数也可以看作“高阶函数的不动点”。例如阶乘可以这样定义:

\[F(g)(n) = \begin{cases} 1, & n=0,\\ n \cdot g(n-1), & n>0. \end{cases} \]

真正的阶乘函数 \(\mathrm{fact}\) 满足:

\[F(\mathrm{fact}) = \mathrm{fact} \]

所以 \(\mathrm{fact}\) 是 \(F\) 的不动点。


4. 直观解释:为什么 \(f(x)=x\) 是关键?

\(f(x)=x\) 看起来很简单,但它表达了一种“自洽性”:

一个点经过变换后,仍然回到原来的位置。

如果把函数看成一台机器,你输入 \(x\),它输出 \(f(x)\)。如果输出刚好等于输入,那么这个点对机器来说就是“无法改变的点”。

几何上更直观:

画出曲线 \(y=f(x)\),再画出直线 \(y=x\)。不动点就是这两条线的交点。

因为交点处同时满足:

\[y = f(x) \]

和

\[y = x \]

所以:

\[f(x) = x \]

因此,\(f(x)=x\) 是连接“函数”和“不变点”的桥梁,是求不动点的核心方程。


5. 如何形象记忆?

给你几个容易记得住的说法:

  1. 照镜子法
    把 \(f\) 想成一面镜子,\(x\) 照完镜子后还是 \(x\),这个 \(x\) 就是不动点。
    迭代就是反复照镜子,如果越照越稳定,最后不再变,那就是不动点。

  2. 找交点法
    不动点就是曲线 \(y=f(x)\) 与对角线 \(y=x\) 的交点。
    这个最直观,画图就能理解。

  3. “稳如泰山”法
    一个点被函数推来推去,如果推完之后它纹丝不动,那它就是不动点。
    迭代中的不动点就是“最终稳定下来的状态”。

总结一句话:

不动点不是“点在坐标系里不动”,而是:函数作用之后,值还等于原来的输入。

\[f(x)=x \]


posted @ 2026-10-21 14:40  sciencedogegg  阅读(3)  评论(0)    收藏  举报