问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

用泰勒级数估算平方根需展开的阶数

创作时间:
作者:
@小白创作中心

用泰勒级数估算平方根需展开的阶数

引用
CSDN
1.
https://m.blog.csdn.net/weixin_41640959/article/details/142029918

本文详细探讨了如何使用泰勒级数估算平方根,并深入分析了展开的阶数与精度的关系。文章从泰勒级数的基本概念出发,逐步推导出平方根函数的泰勒展开式,通过数学证明确定剩余项的上限,并使用Matlab进行实验验证。内容深入且系统,适合对数学和编程感兴趣的读者阅读。

我们知道,一个可导函数,可以用泰勒级数展开,这是一种估算函数值的方法。泰勒级数展开的基本公式是:

$$
f(x) = f(a) + f'(a)(x-a) + \frac{f''(a)}{2!}(x-a)^2 + \cdots + \frac{f^{(n)}(a)}{n!}(x-a)^n + R_n(x)
$$

用泰勒级数估算函数值的方法是只取前几项,忽略后面的无限多项。但泰勒级数并非必然收敛,所以需要凑出能使泰勒级数收敛的条件。

博文介绍了一种用泰勒级数估算平方根的方法,大致思路就是将平方根转化为 $\sqrt{x} = \sqrt{a^2(1+b)} = a\sqrt{1+b}$,其中 $a$ 为正整数,$b$ 是一个接近1的数。但该文的方法只取泰勒展开式的二阶近似,有时准确,有时不准确。当然,该文给出了通过乘以某一系数的方法提高准确度的方法,是有效的。但本文推荐的方法是展开更高阶的泰勒级数,而展开的泰勒级数的阶数并不固定,而是和精度要求,以及被开方数有关。被开方数与1的接近程度可以决定泰勒级数在展开一定阶数后剩余项的大小,且可以用数学算式得出。所以,根据精度的要求,被开方数只要在0到2之间,就可以计算出应展开的阶数,然后无需乘系数,就计算出符合精度要求的平方根。

一、平方根函数的泰勒展开式

对于平方根函数 $f(x) = \sqrt{x}$,其一阶导数为 $f'(x) = \frac{1}{2\sqrt{x}}$,二阶导数为 $f''(x) = -\frac{1}{4x\sqrt{x}}$,三阶导数为 $f'''(x) = \frac{3}{8x^2\sqrt{x}}$。以此类推,$n$ 阶导数是:

$$
f^{(n)}(x) = (-1)^{n-1}\frac{(2n-3)!!}{2^n x^{n-\frac{1}{2}}}
$$

对于泰勒展开,这里取 $a=1$,则 $f(1) = 1$,$f'(1) = \frac{1}{2}$,$f''(1) = -\frac{1}{4}$,$f'''(1) = \frac{3}{8}$。无论 $x$ 如何取值。

所以泰勒展开式为:

$$
\sqrt{x} = 1 + \frac{1}{2}(x-1) - \frac{1}{8}(x-1)^2 + \frac{1}{16}(x-1)^3 - \cdots
$$

由于展开式是正负交替,这里将其写成:

$$
\sqrt{x} = \sum_{n=0}^{\infty} (-1)^n \frac{(2n-1)!!}{2^n n!} (x-1)^n
$$

(1)

二、泰勒展开式收敛性的证明

式(1)中,令 $r_n = \frac{a_{n+1}}{a_n}$,这里采用比值审敛法判断式(1)的收敛性。

注:因为这里前提是 $0 < x < 2$,所以 $x-1$ 可以约掉。

显然,当 $n \to \infty$ 时,$r_n \to 0$,故式(1)收敛。

三、泰勒展开式的阶数及剩余项的大小

(一)级数公比初步分析

首先,根据 $r_n$ 的算式,用GeoGebra软件,画出当 $n=1$ 和 $n=2$ 时 $r_n$ 关于 $x$ 的函数图像。

从图中可看出 $r_n$ 在 $0 < x < 2$ 时单调递增,且始终大于0。鉴于其极限值存在,因此可以猜测,当 $n \to \infty$ 时,$r_n \to 0$。若证实成立,则可用无穷等比数列的算式找到式(1)的剩余项的上限值。具体说明将在本章节第三小节详述。

(二)数学证明

这里用作差法证明 $r_n < 1$。

(2)

现在判断(2)式的正负

首先,已知 $0 < x < 2$,所以 $x-1 > -1$。另外,由于 $n \geq 1$,所以 $2n-1 > 0$。

对于 $2n-1$,当 $n$ 确定时,该式就是 $x$ 的一次函数,在 $0 < x < 2$ 上单调,所以只要 $x=0$ 和 $x=2$ 时该式值均大于0,该式就必然大于0。

当 $x=0$ 时,该式 $2n-1 > 0$,当 $n \geq 1$ 时其必然成立。

当 $x=2$ 时,该式 $2n-1 > 0$,当 $n \geq 1$ 时其必然成立。

而对于 $-8n + 4nx - x - 1$,

当 $n=1$ 时,该式 $-8 + 4x - x - 1 = 3x - 9 < 0$。

当 $n>1$ 时,该式 $-8n + 4nx - x - 1 < 0$。

所以式(2)必为负,说明 $r_n < 1$ 成立。

于此同时,可用类似的方法证明 $r_n > 0$,所以 $0 < r_n < 1$。

(三)剩余项上限值算式

在上一小节中,已经证明了 $0 < r_n < 1$,所以剩余项的绝对值必然小于首项为 $a_1$,公比为 $r_n$ 的无穷等比数列的绝对值。根据无穷等比数列公式:

$$
S = \frac{a_1}{1-r}
$$

将 $a_1$ 和 $r_n$ 代入,可知对于式(1),当计算到第 $m$ 项时,剩余项的绝对值:

$$
R_m = \frac{a_{m+1}}{1-r_{m+1}}
$$

(3)

因此,只要给定精度要求 $\epsilon$,估算平方根时,根据所需的精度 $\epsilon$,只需用式(3)算出令 $R_m < \epsilon$ 的最小 $m$ 即可。

四、实验

在这一章节,用Matlab计算当 $x$ 时通过式(1),令 $m$ 估算出来的 $\sqrt{x}$,以及通过式(3)计算的 $R_m$ 的上限值,因此验证通过泰勒级数算出的 $\sqrt{x}$ 估计值和实际值的误差小于(3)中计算的上限值。另外,也观察对于各 $m$ 值,通过泰勒级数展开 $m$ 阶后,余式的上限值,从而找出对于不同的 $x$ 值,需要展开多少阶后才能达到所需的精度。

(一)实验代码

首先是通过泰勒级数估算 $\sqrt{x}$ 值的程序

function res = estiSquareRoot(x, n)
    if x <= 0 || x >= 2
        res = nan;
        disp("x must be between 0 and 2, open range")
        return
    end
    if n < 0 || rem(n, 1) ~= 0 
        res = nan;
        disp("n must be a non-negative integer!")
        return
    end
    res = 1/2 + x/2;
    for m = 1:n
        ks = 1:(2 * m - 1);
        res = res + prod(2*ks-1) * (x - 1) ^ (2 * m) * (-8 * m + 4 * m * x - x - 1) / (2 ^ (2 * m + 1) * factorial(2 * m + 1));
        
    end
end  

函数中的x代表 $x$,函数中的n代表 $m$。

另外,计算 $R_m$ 的上限值

function remainSup = getRemainTaylor(x, m)
    if x <= 0 || x >= 2
        remainSup = nan;
        disp("x must be between 0 and 2, open range")
        return
    end
    if m < 0 || rem(m, 1) ~= 0 
        remainSup = nan;
        disp("n must be a non-negative integer!")
        return
    end
    ks = 1:(2*m-1);
    remainSup = prod(2 * ks - 1) * (x - 1)^(2 * m) * (-8 * m + 4 * m * x - x - 1)/((1 - (x - 1) ^ 2) * 2 ^ (2 * m + 1)*factorial(2 * m + 1));
end  

函数中x代表 $x$,m代表 $m$。

然后计算对于不同的 $x$,不同的 $m$,估算的平方根值和剩余值上限。注意:对于用 $m$ 阶展开的估值,其余式是 $R_{m+1}$。另外,也用Matlab内置的函数计算平方根,作为参考。

x_to_test = 0.1:0.1:1.9;
c_to_test = 1:10;
square_root_estimation = zeros(length(x_to_test), length(c_to_test));
square_root_remaining = zeros(length(x_to_test), length(c_to_test));
for ii_for_x = 1:length(x_to_test)
    for jj_for_c = 1:length(c_to_test)
        square_root_estimation(ii_for_x, jj_for_c) = estiSquareRoot(x_to_test(ii_for_x), c_to_test(jj_for_c));
        square_root_remaining(ii_for_x, jj_for_c) = getRemainTaylor(x_to_test(ii_for_x), c_to_test(jj_for_c) + 1);
    end
end
square_root_real = sqrt(x_to_test)';  

(二)实验结果

然后观察两个结果。第一个,是估算的平方根和实际平方根的差值。

x_labels = "x=" + x_to_test;
c_labels = "c=" + c_to_test;
T = array2table(abs(square_root_real - square_root_estimation), 'VariableNames', c_labels, 'RowNames', x_labels)  

结果如下:

从表格中可看出,$x$ 越远离1,精确估计平方根需要展开的泰勒阶数 $m$ 越大。

第二个,是余式的上限

T = array2table(abs(square_root_remaining), 'VariableNames',c_labels,'RowNames',x_labels)  

结果如下:

比较两表,可以确认平方根的计算差距小于通过(3)计算的上限。另外,对于 $x$,$m$ 时,其差距就已经小于0.001。此时其为三阶展开。对于[3]中使用的方法,如写成 $\sqrt{x} = \sqrt{a^2(1+b)} = a\sqrt{1+b}$,则令 $b$,此时其根式部分的计算差不超过0.0021,整体差距不超过0.0042。同样,若写成 $\sqrt{x} = \sqrt{a^2(1+b)} = a\sqrt{1+b}$,则根式部分计算差不超过0.0015,整体差距不超过0.003。当然,若 $x$ 离1更远,需展开的阶数会更大,但只要 $x$,都可通过式(3)算出需展开的阶数。

五、总结

$\sqrt{x}$ 的泰勒展开式,在 $0 < x < 2$ 时,是收敛的,所以可以用泰勒级数进行估算。另外,由于展开式的后项与前项之比始终小于 $r_n$,因此可以用以 $r_n$ 为公比的无穷等比数列找出泰勒展开式余项的上限值,也可以确定达到所需精度需要展开的泰勒阶数。

参考资料

[1]泰勒(Taylor)展开式(泰勒级数)_泰勒展开-CSDN博客

[2]泰勒级数:数学的无限逼近之美

[3]手动计算开根号(泰勒展开法) - 小时百科

[4]马同学

[5]GeoGebra - the world’s favorite, free math tools used by over 100 million students and teachers

[6]概率 无穷数列求和公式

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号