牛顿迭代法 · 切线找根与牛顿分形
用切线代替曲线找方程的根。1D 看每步多漂亮地"二阶收敛",2D 看分形如何从确定算法里冒出来。
一个想法
要找方程 的根。任何复杂曲线在局部都能用切线近似 —— 那就用切线代替函数,找切线与 x 轴的交点作为新的猜测。
数学上:
这就是牛顿(-拉夫森)迭代法,1669 年牛顿发明,1690 年 Joseph Raphson 给出现代形式。没有比这更简单也更深刻的数值算法了。
二阶收敛 —— 每步有效数字翻倍
普通迭代(比如二分法)误差线性减半 —— 想多 1 位精度要 ~3.3 步。
牛顿法在足够接近根时二阶收敛:
每步误差平方 —— 这意味着每步有效数字大致翻倍。从 0.001 到 0.000001 只要一步。
试试看:在 1D 模式选 x² − 2(找 √2),从 x=2 开始一步步运行,看 |f| 这一列每步缩小多少。
何时翻车
牛顿法不是万能的。三种典型失败:
- f’(x) = 0:切线水平,公式分母为零。算法直接挂掉
- 猜测离根太远:切线可能把你扔到很远的地方,开始震荡甚至飞出去
- 重根处变慢:例如 在 x=1 是重根,f’ 也为 0,牛顿法退化成线性收敛
试 1D 的 (x−1)(x−2)(x−3) —— 三个简单根,但选不同起点会跳进不同的根;选 x=2 附近的中点(不偏向任何一根),可能反复横跳。
复数平面 + 分形
把牛顿法用到复数多项式上 —— 公式一字不变,但 换成 。每个起点最终收敛到 的某个根。
给每个起点的最终归属上色 → 牛顿分形。
切到 2D 模式 + z³ − 1:
- 三个根:1、、,分别用红、绿、紫色标记
- 颜色越亮 = 越快收敛(迭代步数少)
- 三色边界是分形 —— 任意小的局部都有三种颜色相邻,无穷自相似
为什么是分形?因为在三色边界附近,起点稍微移动一下,落进的根就变了 —— 算法对初值极端敏感。这是确定性算法产生分形的最干净例子。
切到 z⁴ − 1 和 z⁵ − 1
z⁴ − 1 四个根在 1、i、−1、−i —— 边界是经典的”四花瓣”分形。
z⁵ − 1 五个根均布单位圆上 —— 五星花瓣。
z³ − 2z + 2 是 Cayley 在 1879 年研究的经典反例 —— 某些起点永远不收敛(在两点间来回震荡),形成无收敛区。这片”黑色裂缝”是数学史的小遗迹。
一个不常被讲的细节
牛顿分形是首批被发现的分形之一(19 世纪 Cayley 已经研究过 z³ − 1 的牛顿迭代),但被完全可视化要等到 1980 年代有了计算机。Mandelbrot 集 (1980) 比牛顿分形晚 100 多年才进入大众视野,但牛顿分形比它更老、数学起源更纯粹。
真实世界的牛顿法
- 超越方程:开普勒方程 求轨道偏近角 —— 卫星导航必备
- 金融:期权定价的 Black-Scholes 反推隐含波动率
- GPU/优化器:Adam 和它的变体本质是”近似牛顿”(用对角 Hessian 估计代替真二阶信息)—— 这也是为什么梯度下降 demo 里 Adam 收敛比 SGD 快
- 科学计算:解大规模非线性方程组 —— 流体、固体、电磁场仿真的内层
- 机器学习推断:Logistic 回归参数估计、最大似然估计(MLE)的标准解法
- CAD / 计算几何:找两条曲线的交点
牛顿法 350 年前发明的算法,今天仍是计算科学的最底层基石之一。比线性代数年长,比微积分稍年轻,简单到能写在一张纸条上。