1 min read

Categories

我们都知道 $\sqrt{2}=1.414…$,但如果不使用计算器,如何仅用纸笔计算 $\sqrt{2}$ 的值呢?这个问题相当有趣。不过,这涉及到数值计算的不同算法。

1. 直观方法:比较大小

我们知道 $\sqrt{1}=1$,$\sqrt{4}=2$,且 $\sqrt{2}$ 函数是单调递增的。因此,$\sqrt{2}$ 的值一定在 1 和 2 之间。这样,我们可以将 1 和 2 作为初始值。取中间值 1.5,得到 $1.5^2=2.25$。由于 $2.25>2$,$\sqrt{2}$ 一定在 1 和 1.5 之间。继续取中间值并迭代,我们可以逐渐逼近结果。

2. 巴比伦算法

要求 2 的平方根,我们首先将 2 分成两半,即 $2/2=1$。这个 1 就是对结果的第一次估计。然后,对 1 和 $2/1$ 取平均值,得到 1.5(第二次估计);接下来,对 1.5 和 $2/1.5$ 取平均值,得到 1.417(第三次估计);再对 1.417 和 $2/1.417$ 取平均值,得到 1.414(第四次估计)。这个结果已经非常接近了。

3. 牛顿法

牛顿法是一种数值逼近方法,用于求解非线性方程的近似解。要求解 $\sqrt{2}$,我们可以将问题转换为求解方程 $f(x) = x^2 - 2 = 0$ 的根。牛顿法的迭代公式如下:

\[x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)}\]

对于我们的问题,$f’(x) = 2x$,所以迭代公式变为:

\[x_{n+1} = x_n - \frac{x_n^2 - 2}{2x_n} = \frac{1}{2}(x_n + \frac{2}{x_n})\]

从一个初始近似值 $x_0$ 开始,经过多次迭代,我们可以得到 $\sqrt{2}$ 的近似值。比如说先猜测$x_0=2$,第一次迭代的结果就是$x_1=1.5$,第二次结果就是$x_2=1.4166667$,第三次就是$x_3=1.41422$。非常好了。

4. 泰勒展开法

泰勒展开是一种将函数展开为幂级数的方法。在我们的问题中,可以考虑使用泰勒展开求解 $\sqrt{1+x}$ 在 $x=1$ 处的值。泰勒展开公式如下:

\[\sqrt{1+x} \approx 1 + \frac{1}{2}x - \frac{1}{8}x^2 + \frac{1}{16}x^3 - \cdots\]

将 $x=1$ 代入泰勒展开式,可得:

\[\sqrt{2} \approx 1 + \frac{1}{2} - \frac{1}{8} + \frac{1}{16} - \cdots\]

通过计算前面几项的和,我们可以得到 $\sqrt{2}$ 的近似值。需要注意的是,泰勒展开法的收敛速度可能较慢,因此需要计算更多项以获得较高精度的结果。

5. Euler方法

Euler方法是一种简单而广泛使用的数值微积分方法,用于求解常微分方程的近似解。要求解 $\sqrt{2}$,我们可以将其表示为以下的一阶微分方程:

\[y'(x) = \frac{1}{2\sqrt{y(x)}}\]

其中,$y(x) = \sqrt{2}$。我们可以使用Euler方法来近似解这个微分方程。

假设我们要计算从初始点 $(x_0,y_0)$ 开始的一段步长为 $h$ 的曲线段。我们可以使用Euler方法进行逼近,具体步骤如下:

计算当前点的斜率 $k_n = f(x_n, y_n)$。 计算下一个点的值 $y_{n+1} = y_n + hk_n$。 重复以上步骤,直到我们达到所需的精度。 在我们的例子中,初始点为 $(0,1)$,步长为 $h=0.01$。通过迭代计算,我们可以得到 $y(1) \approx 1.4143$,非常接近 $\sqrt{2}$ 的真实值了。

6. Runge-Kutta 方法

Runge-Kutta方法是一种数值微积分方法,用于求解常微分方程的近似解。要求解 $\sqrt{2}$,我们可以将其表示为以下的一阶微分方程:

\[y'(x) = \frac{1}{2\sqrt{y(x)}}\]

其中,$y(x) = \sqrt{2}$。我们可以使用Runge-Kutta方法来近似解这个微分方程。

假设我们要计算从初始点 $(x_0,y_0)$ 开始的一段步长为 $h$ 的曲线段。我们可以使用四阶Runge-Kutta方法进行逼近,具体步骤如下:

  • 计算斜率 $k_1 = f(x_n, y_n)$。
  • 计算斜率 $k_2 = f(x_n + \frac{h}{2}, y_n + \frac{h}{2}k_1)$。
  • 计算斜率 $k_3 = f(x_n + \frac{h}{2}, y_n + \frac{h}{2}k_2)$。
  • 计算斜率 $k_4 = f(x_n + h, y_n + hk_3)$。
  • 计算下一个点的值 $y_{n+1} = y_n + \frac{h}{6}(k_1 + 2k_2 + 2k_3 + k_4)$。

重复以上步骤,直到我们达到所需的精度。 在我们的例子中,初始点为 $(0,1)$,步长为 $h=0.01$。通过迭代计算,我们可以得到 $y(1) \approx 1.4142$,非常接近 $\sqrt{2}$ 的真实值了。