通俗理解泰勒公式

本文深入解析泰勒公式,探讨其在数学中如何通过函数在某点的各阶导数构建多项式来近似函数值。从泰勒公式的数学意义到实际应用,包括泰勒多项式、余项的概念及泰勒公式的局限性。

本博客只用于自身学习,如有错误,虚心求教!!!

 

在维基百科上的解释

数学中,泰勒公式(英语:Taylor's Formula)是一个用函数在某的信息描述其附近取值的公式。这个公式来自于微积分泰勒定理(Taylor's theorem),泰勒定理描述了一个可微函数,如果函数足够光滑的话,在已知函数在某一点的各阶导数值的情况之下,泰勒公式可以用这些导数值做系数构建一个多项式来近似函数在这一点的邻域中的值,这个多项式称为泰勒多项式(Taylor polynomial)。

泰勒公式的初衷是用多项式来近似表示函数在某点周围的情况。比如说,指数函数e^{x}x = 0的附近可以用以下多项式来近似地表示:

                                                           {\textrm  {e}}^{x}\approx 1+x+{\frac  {x^{2}}{2!}}+{\frac  {x^{3}}{3!}}+\cdots +{\frac  {x^{n}}{n!}}.

对于一般的函数,泰勒公式的系数的选择依赖于函数在一点的各阶导数值。这个想法的原由可以由微分的定义开始。微分是函数在一点附近的最佳线性近似:

f(a+h)=f(a)+f^{​{\prime }}(a)h+o(h),其中o(h) 是比h 高阶的无穷小

也就是说f(a+h)\approx f(a)+f^{​{\prime }}(a)h,或f(x)\approx f(a)+f^{​{\prime }}(a)(x-a)


百度百科上的解释

数学中,泰勒公式是一个用函数在某点的信息描述其附近取值的公式。如果函数足够平滑的话,在已知函数在某一点的各阶导数值的情况之下,泰勒公式可以用这些导数值做系数构建一个多项式来近似函数在这一点的邻域中的值。泰勒公式还给出了这个多项式和实际的函数值之间的偏差。

泰勒公式是将一个在x=x0处具有n阶导数的函数f(x)利用关于(x-x0)的n次多项式来逼近函数的方法。

若函数f(x)在包含x0的某个闭区间[a,b]上具有n阶导数,且在开区间(a,b)上具有(n+1)阶导数,则对闭区间[a,b]上任意一点x,成立下式:

                                                  

其中,表示f(x)的n阶导数,等号后的多项式称为函数f(x)在x0处的泰勒展开式,剩余的Rn(x)是泰勒公式的余项,是(x-x0)n的高阶无穷小。 


在知乎上看到的几个答案

麦克劳林展开:

                                                   \large f(x) = f(0)+\tfrac{f{}'(0)}{1!}x+\tfrac{f{}''(0)}{2!}x^{2}+...+\tfrac{f^{(n)}(0)}{n!}x^{n}

 

容易看出,实际上就是从0这个点的函数值出发,然后把各阶导数全部加起来。

下面的阶乘不过是为了消掉X本身求导带出的东西而已。

需要注意的是,泰勒公式适用于局部的近似。即,如果知道某点的值,我们可以用泰勒求出该点附近的点的值,如果两个点离得很远,泰勒公式就会产生很大误差。

那么我们想想为什么要把导数全部加起来?导数的意义是什么?我们都知道,在物理的时间-位移函数中,求一阶导数就得到速度,说白了就是位移的变化率;求二阶导就得到了加速度,说白了就是速度(一阶导)的变化率。所以,容易看出,实际上每一阶导数都是上一阶导数的变化率。至此,泰勒公式的含义就很明确了。我们知道一个时点的值比如f(0),然后我们想求f(x),我们只要让函数从f(0)走到f(x)然后考虑过程中的所有变化就可以了。

举例:一个老司机开车(考虑一维的情况)向前行驶,这人开车很任性,一下加速一下减速,完全由着性子来。那么我知道他0时间在a这个位置,请问他2分钟后开到了什么位置呢?

首先直接速度乘以时间,不准确,因为这老司机开车的速度老在变化;那我们考虑速度的变化,即考虑一个加速度,好像比刚才好点,但是还是不准确,因为这老司机一下踩油门一下踩刹车,连加速度都是变化的;好,那我们再考虑加速度的变化……

由此一直考虑下去,如果我们能描述,这个开车的人在这两分钟里,每个时间的速度的变化,加速度的变化……我们就能得到两分钟后他的位置。

即:不论其车开得有多任性,只要我从初始点开始,把这个过程中的车的每一个变化,每一个变化的变化,每一个变化的变化的变化,每一个变化的变化的变化的变化……都考虑到了,就能近似得到最终目标点的情况。而且越往后考虑,得到的结果越精确。

这就是泰勒展开的含义啦。

 

参考:

https://zh.wikipedia.org/wiki/%E6%B3%B0%E5%8B%92%E5%85%AC%E5%BC%8F

https://baike.baidu.com/item/%E6%B3%B0%E5%8B%92%E5%85%AC%E5%BC%8F/7681487?fr=aladdin

https://www.zhihu.com/question/21149770

 

当然可以!你提出的问题非常重要,很多同学在学习泰勒展开、幂级数、递推公式时都会遇到类似的困惑。我们换一种**更直观、更容易理解的方式**来推导和实现这个递推公式,**不用复杂的数学推导**,而是用**模拟手动计算的方式**来一步步构造每一项。 --- ## 🌟 目标:不用复杂的递推公式,手动模拟每一项的计算 我们从泰勒展开式出发: $$ \sin(x) = x - \frac{x^3}{3!} + \frac{x^5}{5!} - \frac{x^7}{7!} + \cdots $$ 我们可以把每一项看成: | 项数 | 表达式 | 分子 | 分母(阶乘) | |------|--------|------|---------------| | 第1项 | $ x $ | $ x^1 $ | $ 1! $ | | 第2项 | $ -\frac{x^3}{3!} $ | $ x^3 $ | $ 3! = 1×2×3 $ | | 第3项 | $ +\frac{x^5}{5!} $ | $ x^5 $ | $ 5! = 1×2×3×4×5 $ | | 第4项 | $ -\frac{x^7}{7!} $ | $ x^7 $ | $ 7! = 1×2×3×4×5×6×7 $ | --- ## ✅ 我们可以这样一步一步计算每一项: - **分子**:每次乘上 `x * x` - **分母**:每次乘上两个新的数(比如从 2×3,到 4×5,到 6×7) - **符号**:正负交替变化 --- ## ✅ 通俗易懂的代码实现如下: ```c #include <stdio.h> int main() { double x; scanf("%lf", &x); double sum = x; // 初始和为第一项 x double numerator = x; // 分子初始为 x double denominator = 1; // 分母初始为 1! int factorial = 1; // 阶乘从1开始 int sign = -1; // 第二项是负号 int term_count = 2; // 从第二项开始循环 while (1) { // 每次分子乘 x * x(x^1 -> x^3 -> x^5 -> ...) numerator = numerator * x * x; // 分母每次乘两个连续的数(1 -> 2×3 -> 4×5 -> ...) factorial += 1; denominator *= factorial; factorial += 1; denominator *= factorial; // 计算当前项 double term = numerator / denominator * sign; // 如果当前项的绝对值小于 1e-5,就停止 if (term >= -1e-5 && term <= 1e-5) { break; } // 累加当前项 sum += term; // 改变符号 sign *= -1; } // 输出保留4位小数 printf("%.4lf\n", sum); return 0; } ``` --- ## ✅ 示例说明: 假设输入 `x = 0.5` - 第1项:`0.5` - 第2项:`- (0.5^3) / 3! = -0.125 / 6 = -0.0208333` - 第3项:`+ (0.5^5) / 5! = +0.03125 / 120 = +0.0002604` - ... - 最后加起来就是 `sin(0.5)` 的近似值 --- ## ✅ 与你原来的问题相比,这种方式有什么优点? | 你原来的问题 | 现在的方式 | |--------------|------------| | 用了一个复杂的递推公式 | 每一项都从头计算,更直观 | | 不容易理解分母怎么来的 | 每次乘两个新数,就像手动计算阶乘 | | 不容易理解为什么乘 x² | 每次乘 x * x 就是让幂次 +2 | | 不知道什么时候停止 | 当某一项小于 1e-5 时就停止 | --- ## ✅ 总结 - 你可以把每一项看成:**分子是 x 的奇数次幂,分母是对应的阶乘** - 每次循环中,**分子乘 x²,分母乘两个连续的数** - **符号交替变化** - **当某一项小于 1e-5 时停止** 这样写虽然效率略低(因为重复计算),但**更容易理解**! ---
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值