如何估计 ln2 的近似值?

心血来潮,想知道有什么方法可以估计 ln2 的近似值。 高考就曾经考过这样的问题,例如 2014 年全国 2 卷理科数学的压轴题: [图片]
关注者
201
被浏览
236,165

39 个回答

假设要求稍稍高一点,需要精确到小数点后三位

下面从泰勒级数出发估计 ln 2 的值

我们都知道泰勒级数

ln(1+x)=\sum_{n=1}^{\infty}{u_{n}}=x-\frac{x^2}{2}+\frac{x^3}{3}-\frac{x^4}{4}+\cdot\cdot\cdot+(-1)^{n-1}\frac{x^n}{n}+\cdot\cdot\cdot

直接令上式的 x=1 就可以得到

ln2=1-\frac{1}{2}+\frac{1}{3}-\frac{1}{4}+\cdot\cdot\cdot+(-1)^{n-1}\frac{1}{n}+\cdot\cdot\cdot

如果直接取前 n 项和作近似值,那么误差应该满足 |r_{n}|\leq10^{-3}

又因为|r_{n}|\leq\left| u_{n+1} \right|=\frac{1}{n+1} ,所以 n 要满足 \frac{1}{n+1} <10^{-3} ,得 n 至少要取到 1000 项,即便放宽精度要求到小数点后两位也需要加到 100 项,那还不如去摁卡西欧。。。

可见此级数收敛太慢,所以我们应该设法找到一个收敛得更快的级数来满足精度要求

考虑到上述级数是一个交错级数(这也是它收敛太慢的原因),我们可以通过加减消去其中的负项

ln(1+x)=x-\frac{x^2}{2}+\frac{x^3}{3}-\frac{x^4}{4}+\cdot\cdot\cdot+(-1)^{n-1}\frac{x^n}{n}

ln(1-x)=-x-\frac{x^2}{2}-\frac{x^3}{3}-\frac{x^4}{4}-\cdot\cdot\cdot-\frac{x^n}{n}

作差得 ln\frac{1+x}{1-x}=2(x+\frac{x^3}{3}+\frac{x^5}{5}+\frac{x^7}{7}+\cdot\cdot\cdot)

\frac{1+x}{1-x}=2x=\frac{1}{3} ,代入到上式中去有

ln2=2(\frac{1}{3}+\frac{1}{3}\cdot\frac{1}{3^3}+\frac{1}{5}\cdot\frac{1}{3^5}+\frac{1}{7}\cdot\frac{1}{3^7}+\cdot\cdot\cdot)

此时取 3 项即可满足条件,对应误差为|r_{3}|=2(\frac{1}{7}\cdot\frac{1}{3^7}+\frac{1}{9}\cdot\frac{1}{3^9}+\frac{1}{11}\cdot\frac{1}{3^{11}}+\cdot\cdot\cdot)

|r_{3}|<\frac{2}{3^7}(\frac{1}{7}+\frac{1}{9}\cdot\frac{1}{3^2}+\frac{1}{11}\cdot\frac{1}{3^{4}}+\cdot\cdot\cdot)<\frac{2}{3^7}(\frac{1}{3^{4}}+\frac{1}{3^{6}}+\cdot\cdot\cdot)=\frac{2}{3^{7}\cdot72}

这样的精度已经足够了,所以取 ln2\approx2(\frac{1}{3}+\frac{1}{3}\cdot\frac{1}{3^3}+\frac{1}{5}\cdot\frac{1}{3^5})

计算得ln2\approx0.693

可以另辟蹊径用一下牛顿迭代

\ln a 等价于求 e^x - a = 0 的根,可以得到迭代函数:

f(x) = x - \frac{e^x - a}{e^x} = x - 1 + \frac{a}{e^x}

比如从x = 1开始迭代,下一个点就是 \frac{2}{e}=0.7357 。本来只要继续迭代两次就可以有很高的精度了,但是尴尬的地方在于如果没有计算器,那么计算 e^{0.7357} 本身也是不太可能的。

这里我们用一个曲线救国的方法,虽然计算一般的 e^x 很困难,但当x为整数的时候还是可能的(比如用近似值2.718281828反复做乘法),如果上一次迭代的结果可以近似到分数 \frac{m}{n} ,那么我们可以将要求的方程改写为:

e^{nx} - a^n = 0

牛顿迭代之:

f(x) = x - \frac{e^{nx} - a^n}{ne^{nx}} = x - \frac{1}{n} + \frac{a^n}{ne^{nx}}

因此

f(\frac{m}{n}) = \frac{m-1}{n} + \frac{a^n}{ne^{m}}

刚才我们得到的数接近于3/4,我们就用n=4 m=3继续迭代,得到

f(\frac{3}{4}) = \frac{2}{4} + \frac{2^4}{4e^{3}} \approx 0.69915

这个数接近于7/10,继续迭代

f(\frac{7}{10}) = \frac{6}{10} + \frac{2^{10}}{10e^7}=0.693377

跟真实值0.693147对比,三次迭代就可以得到不错的结果了。如果要再迭代一次,现在这个分数大约是9/13,那么有

f(\frac{9}{13}) = \frac{8}{13} + \frac{2^{13}}{13e^9}=0.69315178

可以用连分数展开的方法不断找到比较接近的有理数来进一步提高精度,不过因为分母越来越大,运算自然也会越来越复杂,要坚持笔算还是有难度的。


要进一步提高收敛速度,一个可能改进是可以用 e^{-x} 凑一个相反趋势的导数,试图让函数在迭代区间内更“平坦”一些。考虑到要求的根在0到1之间,可以试试用

e^x - e^{1-x} = a - \frac{e}{a}

它的一阶导数是两个指数之和,二阶导数则是两个指数之差,因此削弱了二阶导数而增强了一阶导数,也就是让函数变得“平”了一些,我们来试试用它来做迭代:

f(x) = x - \frac{e^x - e^{1-x} - a + \frac{e}{a}}{e^x + e^{1-x}}

从x=1开始:

f(1) = 1 - \frac{e - 1 - 2 + \frac{e}{2}}{e + 1}=0.710

的确比刚才的结果更接近一些,不过相对来说运算也复杂了不少。后续迭代的方法大体跟前面是差不多的。

另一个可行的式子是

e^x-a^2e^{-x} = 0

它也只有一个根,而且在根的附近二阶导数刚好为0。我们来迭代一下试试:

f(x) = x - \frac{e^x - a^2e^{-x}}{e^x + a^2e^{-x}}=x - \frac{e^{2x}-a^2}{e^{2x}+a^2}

f(1) = 1 - \frac{e^{2}-4}{e^{2}+4}=0.70243

比刚才那个结果甚至更好一些。它也可以用前面的方法改写成适用于有理数的迭代形式:

e^{nx} - a^{2n}e^{-nx} = 0

f(x) = x - \frac{e^{2nx} - a^{2n}}{n(e^{2nx} + a^{2n})}

f(\frac{m}{n}) = \frac{m}{n} - \frac{e^{2m} - a^{2n}}{n(e^{2m} + a^{2n})}

于是第二次迭代:

f(\frac{7}{10}) = \frac{7}{10} - \frac{e^{14} - 2^{20}}{10(e^{14} + 2^{20})}=0.693158

两次迭代就有原来4次迭代的精度了

f(\frac{9}{13}) = \frac{9}{13} - \frac{e^{18} - 2^{26}}{13(e^{18} + 2^{26})}=0.693147147

与真值0.693147181相比精度已经非常惊人了。当然,要达到这么高的精度,需要用很高精度的e进行计算,如果用笔算仍然是不现实的。