## 从切线开始

假设我们要解 $f(x)=0$。在当前近似值 $x_k$ 处，用切线近似曲线，再把切线与横轴的交点作为下一次近似。

$$
x_{k+1}=x_k-\frac{f(x_k)}{f'(x_k)}.
$$

这就是 Newton 迭代。它把局部的一阶信息，转化为一次向根靠近的行动。

## 用它计算平方根

令 $f(x)=x^2-2$，迭代可以写成：

$$
x_{k+1}=\frac{1}{2}\left(x_k+\frac{2}{x_k}\right).
$$

从 $x_0=1$ 出发，前几步约为 1.5、1.416667、1.414216，逐渐接近 $\sqrt{2}$。

```python
def sqrt_two(x=1.0, tol=1e-12, max_iter=100):
    for _ in range(max_iter):
        next_x = 0.5 * (x + 2.0 / x)
        if abs(next_x - x) < tol:
            return next_x
        x = next_x
    raise RuntimeError("迭代次数超过限制")
```

## 快速收敛的前提

对于足够光滑的函数，如果根是单根，且初值足够靠近根，Newton 方法通常具有局部二次收敛性。这不意味着任意初值都能成功：导数太小、初值太远，都可能导致迭代失效。

实际计算中，应同时检查残差、步长与最大迭代次数，而不只观察一个停止条件。

## 留给下一次实验

比较不同初值的迭代轨迹，并尝试加入阻尼或区间保护。快速的方法，也需要可靠的边界。