ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

泰勒展开与麦克劳林公式:极限、近似计算与误差控制实战

泰勒展开与麦克劳林公式:极限、近似计算与误差控制实战 1. 泰勒展开到底在解决什么问题先说结论泰勒展开公式这件事本质上就一句话——用一堆最简单的幂函数去冒充一个复杂函数在某个点附近的行为。这个冒充能成立是因为多项式是我们唯一可以熟练求导、求积分、做四则运算的函数族。你只要能把它换成多项式极限、近似值、误差估计、方程求解这些问题就全部降维成合并同类项级别的操作。我第一次真正对它有感觉是在做一道极限题的时候。题目是求 x 趋近于 0 时某个式子的极限值用洛必达法则上下求导五六次还是 0/0式子越写越长。后来换成把分子分母各自展成幂级数两项一减一次项、三次项该消的消掉答案不到半分钟就出来了。那种感觉就像你手里突然多了一把万能钥匙泰勒展开真正的价值不在于背下来多少条公式而在于它给了你一套不用聪明也能做对的机械流程。所以这篇文章我会分几块讲常见的展开式该背哪些、怎么背不混复杂函数怎么一步步拆成能处理的形态阶数到底展开到多少才够以及我在做题和写代码时踩过的那些坑。适合刚学微积分的学生、准备考试的人也适合做数值计算、需要写近似公式的工程师。基础要求不高会求导就够了剩下的我尽量用生活化的语言说清楚。1.1 从一个骗字说起用多项式冒充复杂函数我们把一个函数 f(x) 在点 x₀ 附近展开成f(x) a₀ a₁(x-x₀) a₂(x-x₀)² a₃(x-x₀)³ ... aₙ(x-x₀)ⁿ 余项问题是这些系数 a₀、a₁、a₂ 到底该取多少思路非常朴素既然要像那就让两边的各阶导数在 x₀ 这个点上全都相等。在 x₀ 处代入左边是 f(x₀)右边只剩 a₀所以 a₀ f(x₀)。求一阶导再代入右边只剩 a₁所以 a₁ f(x₀)。求二阶导右边是 2a₂所以 a₂ f(x₀)/2。求三阶导右边是 3·2·a₃所以 a₃ f(x₀)/6。规律就出来了第 n 项系数是 f⁽ⁿ⁾(x₀) 除以 n 的阶乘。这就是泰勒公式的系数来源不是什么天上掉下来的东西。那个阶乘也不是装饰品它就是求了 n 次导后幂函数前面累积出来的常数被除回去的结果。提示记忆的时候不要死记n 阶导除以 n 阶乘而要记住让导数相等这个出发点。这样一来任何变形的公式——比如展开点是 x₀ 而不是 0——你都能自己推出来而不用去翻书。工程上最常见的用法是取 x₀ 0这时候叫麦克劳林公式。比如电路里算小信号近似常常把 e^u 近似成 1u把 cos θ 近似成 1-θ²/2这些其实都是泰勒展开截断到前几项的结果。1.2 余项决定你敢用几阶的那道门槛很多人学到这里会有一个错觉既然是约等于那我多写几项不就完了关键问题是你凭什么认为后面那些项可以扔掉答案在余项里。带拉格朗日余项的泰勒公式长这样f(x) Σ(k0..n) f⁽ᵏ⁾(x₀)/k! · (x-x₀)ᵏ f⁽ⁿ⁺¹⁾(ξ)/(n1)! · (x-x₀)ⁿ⁺¹最后那一坨就是余项 Rₙ(x)其中 ξ 是介于 x 和 x₀ 之间的某个点。注意它是个存在某个点不是具体某个点——这看着很难用但实际估计误差足够了因为我们只需要知道 f⁽ⁿ⁺¹⁾ 在区间上的最大值 M就能给出|Rₙ(x)| ≤ M/(n1)! · |x-x₀|ⁿ⁺¹这里有个非常重要的直觉阶乘增长得极快而 |x-x₀| 只要小于 1它的幂次也是越乘越小。所以两个因素一叠加误差会以惊人的速度衰减。这也是为什么近似计算里用泰勒展开特别划算。举个具体的算 sin(0.1)用 sin x ≈ x - x³/6 x⁵/120得到 0.1 - 0.0001666667 0.00000008333 ≈ 0.0998334167。真值是多少0.0998334166468......误差在 1e-11 量级。也就是说你用三项就拿到了小数点后十位的精度。而如果 x 取 3同样的三项误差就是灾难级的了——这直接引出后面要讲的收敛半径问题。实践中还有个更好的工具如果是交错级数正负交替、绝对值单调递减趋于 0余项的绝对值不超过被截断的第一项。比如算 e⁻¹e⁻¹ 1 - 1 1/2! - 1/3! 1/4! - ...取到 1/6! 这一项误差就小于 1/7! ≈ 0.000198。这个判据不需要求导、不需要找最大值比拉格朗日余项好用得多。我在做题时如果看到交错结构第一反应就是用这个估计。1.3 什么场景下我会优先想用泰勒展开不是所有题都适合展开用错工具反而更慢。我总结几类情况看到就优先考虑泰勒第一类是0/0 型的极限尤其是分母是 x 的幂次、分子是各种函数的差。这种题洛必达能做但求导次数多了容易算错泰勒是稳的。第二类是近似值与误差控制。比如你要估算 √1.02、sin(0.05)、ln(1.01)或者写代码时想避免调用昂贵的函数就直接用展开式算。第三类是无法求原函数的积分。像 ∫e^(-x²)dx 这种原函数不是初等函数但展开后逐项积分就能得到一个级数解工程上高斯误差函数就是这么处理的。第四类是微分方程的近似解。有些非线性方程没有解析解但可以设 y a₀ a₁x a₂x² ... 代入方程比较系数逐阶求出系数的递推关系这就是级数解法。反过来如果函数在某点导数不存在、或者 x 离展开点很远泰勒就不好用了。还有就是周期性强的函数做全局近似时傅里叶级数往往比泰勒更合适——泰勒是局部最准傅里叶是全局最匀这是两套不同的思路。2. 八个必须刻在脑子里的基础展开式基础展开式必须熟到看到 1-cos x 脑子里自动蹦出 x²/2的程度。因为所有复杂展开都是把这些基础式子做加减乘除、复合、求导、积分拼出来的。基础不牢后面每一步都在翻书速度就没了。我这里列的不是越多越好而是真正高频的核心组。剩下的可以推但这一组我建议直接背下来。2.1 指数、正弦、余弦奇偶性与阶乘的配合这三个是最重要的因为它们的收敛半径是无穷大随便用。e^x 1 x x²/2! x³/3! x⁴/4! ... xⁿ/n! o(xⁿ) sin x x - x³/3! x⁵/5! - x⁷/7! ... (-1)ⁿx^(2n1)/(2n1)! o(x^(2n1)) cos x 1 - x²/2! x⁴/4! - x⁶/6! ... (-1)ⁿx^(2n)/(2n)! o(x^(2n))这三个式子的结构非常优美e^x 全项都有sin x 只有奇次项cos x 只有偶次项系数都是阶乘的倒数正负号交替。这里有个特别好用的记忆抓手e^(ix) cos x i·sin x欧拉公式。把 e^(ix) 展开实部正好凑出 cos虚部正好凑出 sin。你要是忘了 sin 的符号是正的还是负的用这个推一下三十秒就能确认。另一个抓手是奇偶性sin 是奇函数所以只有奇数次的项且首项系数必须是 1cos 是偶函数只有偶数次项首项是 1。这个约束能帮你排除掉大部分记忆错误。注意sin x 的第三项是 x⁵/5!不是 x⁵/5。这个错误我见过太多次尤其在紧张考试的时候。指数函数和三角函数的分母都是阶乘而 ln 系列的分母是自然数这两组千万别串。还有个高频变形e^(-x²) 1 - x² x⁴/2! - x⁶/3! ...这个在概率和热传导问题里出现频率极高。它的来源就是把 x 换成 -x²代入即可不需要重新求导。2.2 对数与幂函数定义域和符号最容易翻车这一组的坑最多因为涉及定义域。ln(1x) x - x²/2 x³/3 - x⁴/4 ... (-1)^(n-1)·xⁿ/n o(xⁿ) -1 x ≤ 1 (1x)^α 1 αx α(α-1)x²/2! α(α-1)(α-2)x³/3! ... |x| 1 1/(1-x) 1 x x² x³ ... xⁿ o(xⁿ) |x| 1 1/(1x) 1 - x x² - x³ ... (-1)ⁿxⁿ o(xⁿ) |x| 1先说 ln(1x)。它的分母是自然数 1、2、3、4不是阶乘这一点必须和三角函数区分开。符号是交替的从正号开始。还有一点很关键它的收敛半径是 1而且 x 1 时收敛得到 ln2 的级数x -1 时发散。所以用这个式子的时候x 的取值范围一定要看清楚。再说 (1x)^α。这个式子叫广义二项式展开α 可以是任何实数不限于正整数。当 α 是正整数 n 时展开会在第 n1 项之后自动终止退化成高中就学过的二项式定理——因为从某一项开始会乘到 (α-α) 0。这是判断自己有没有记错的一个很实用的检查点。最常见的几个特例必须背熟α 的取值展开式α 1/2√(1x) 1 x/2 - x²/8 x³/16 - 5x⁴/128 ...α -1/21/√(1x) 1 - x/2 3x²/8 - 5x³/16 ...α -11/(1x) 1 - x x² - x³ ...α 1/3(1x)^(1/3) 1 x/3 - x²/9 5x³/81 - ...顺便说一句1/(1-x) 这个式子虽然简单但它是反向使用的关键工具。当你要展开一个分式函数比如 1/(2-x)先把它写成 (1/2)·1/(1-x/2)就能套这个公式。这个技巧后面还会反复用到。2.3 反三角、正切、双曲系数不在阶乘里这几个的系数规律不明显但出现频率也不低建议记住前两到三项。arctan x x - x³/3 x⁵/5 - x⁷/7 ... |x| ≤ 1 arcsin x x x³/6 3x⁵/40 5x⁷/112 ... |x| 1 tan x x x³/3 2x⁵/15 17x⁷/315 ... |x| π/2 sinh x x x³/3! x⁵/5! ... 全域 cosh x 1 x²/2! x⁴/4! ... 全域arctan x 的规律和 ln(1x) 很像分母是奇数 1、3、5、7符号交替。你可以这么记arctan x 的导数是 1/(1x²)把 1/(1x²) 展开再逐项积分就得到上面这个式子。忘了的话现推一分钟的事。arcsin x 的系数不太规整6、40、112只能硬记。但它有个推导捷径arcsin 的导数是 (1-x²)^(-1/2)用广义二项式展开α -1/2把 x 换成 -x²再逐项积分。我在 3.4 节会完整演示一遍这个过程。tan x 的系数 1/3、2/15、17/315 更不好记我一般只记前两项 x x³/3。真需要更高阶的时候用 sin x / cos x 做长除法现算比硬背靠谱。后面 3.3 节会讲这个算法。双曲函数是最省心的sinh 和 sin 长得一模一样只是没有负号cosh 和 cos 一模一样也是没有负号。原因也很简单它们的定义里没有 i 这个虚数单位。2.4 展开点不在原点时怎么平移所有上面的式子都是 x₀ 0 的情况。遇到展开点不是 0 的题不需要重新背新公式做一个换元就行。比如要在 x 1 处展开 ln x就令 t x - 1那么 x 1 tln x ln(1t)直接套 ln(1x) 的公式ln x (x-1) - (x-1)²/2 (x-1)³/3 - (x-1)⁴/4 ...同理e^x 在 x 2 处展开令 t x-2e^x e²·e^t e²(1 t t²/2! ...) e²(1 (x-2) (x-2)²/2! ...)。注意前面那个 e² 是系数不能漏。提示展开点选得好不好直接决定收敛快慢。算 ln(1.1)在 x1 处展开t 0.1级数收敛飞快前两项就够了。但如果你非要在 x0 展开 ln x那根本展不开因为 ln x 在 0 处没有定义。工程上选展开点的原则是离计算点越近越好。这个平移思路还能处理更复杂的情况。比如要展开 1/(x²-3x2)先因式分解成 1/[(x-1)(x-2)]再拆成部分分式各自用 1/(1-x) 的形式处理。这类题的核心就是努力把式子往已知的标准形上凑。3. 复杂展开的六个套路基础式子会背了接下来是真正的技术活怎么把一个陌生的复杂函数一步步化简成基础式子的组合。我把它总结成六种套路覆盖了我见过的绝大多数情况。3.1 换元把陌生函数塞进已知式子这是使用频率最高的方法。核心思想是不要对整体求导而是找到一个内核让整体变成已知函数的形态。最典型的例子是 e^(x²)、e^(sin x)、ln(1x²)、1/√(1-x²) 这类复合函数。以 e^(x²)展开到 x⁶ 项为例e^u 1 u u²/2! u³/3! ..., 令 u x² e^(x²) 1 x² x⁴/2 x⁶/6 ...完全不需要对 e^(x²) 求六次导数直接代换、化简就行。再看一个稍微复杂的e^(sin x)展开到 x⁵ 项。第一步把 sin x 展到需要的阶sin x x - x³/6 x⁵/120 o(x⁵)第二步记 u sin x那么 e^u 1 u u²/2 u³/6 u⁴/24 u⁵/120 o(u⁵)。第三步逐项把 u 的幂算出来只保留到 x⁵u x - x³/6 x⁵/120 u² x² - x⁴/3 2x⁶/45 ... 保留到 x⁴ 就够因为要乘 1/2 u³ x³ - x⁵/2 ... u⁴ x⁴ ... u⁵ x⁵ ...第四步代入并按 x 的幂次归并x¹ 项1x² 项1/2x³ 项-1/6 1/6 0x⁴ 项-1/6来自 u² 的 -x⁴/3 乘 1/2 1/24来自 u⁴ 乘 1/24 -4/24 1/24 -1/8x⁵ 项1/120u 的 x⁵ (-1/12)u² 无 x⁵ 项此项来自 u³ 的 -x⁵/2 乘 1/6 1/120 2/120 - 10/120 -1/15最后得到e^(sin x) 1 x x²/2 - x⁴/8 - x⁵/15 o(x⁵)注意 x³ 项消失了这不是巧合。因为 e^(sin x) e^x · e^(sin x - x)而 sin x - x 的最低次项是 -x³/6乘 e^x 后对 x³ 的贡献是 -1/6和 e^x 自身展开的 x³ 系数 1/6 正好抵消。心得换元之后每一层的 o() 都要小心。一开始写 sin x 时就该想清楚要展到几阶——因为后面还要平方、立方最高阶会被抬高。一般来说如果最终要 x⁵sin x 展到 x⁵ 是够的因为 u³ 只用到 x³ 项u² 只用到 x² 项。这个够不够的判断就是下一节的内容。3.2 乘法与待定系数阶数先估再算当函数是两个函数相乘的形式比如 e^x·sin x、x·arctan x、cos x·ln(1x)处理方法很直接各自展开然后做多项式乘法只保留需要的阶数。以 f(x) e^x · sin x 展开到 x⁴ 为例e^x 1 x x²/2 x³/6 x⁴/24 ... sin x x - x³/6 ...逐项相乘只保留到 x⁴1 · sin x → x - x³/6 x · sin x → x² - x⁴/6 (x²/2) · sin x → x³/2 (x³/6) · sin x → x⁴/6 (x⁴/24) · sin x → x⁵/24 超出 x⁴舍去归并x¹1x²1x³-1/6 1/2 1/3x⁴-1/6 1/6 0所以 e^x·sin x x x² x³/3 o(x⁴)。x⁴ 项确实是 0因为 e^x sin x (e^(2x) - 1)/(2e^x)... 用复数形式 e^x sin x Im[e^((1i)x)] 可以验证。待定系数法是另一个好帮手特别适合用于方程两边都含未知展开式的情况。做法是设结果形如 a₀ a₁x a₂x² ...代回原式比较两边同次幂的系数列出方程组解出 a₁、a₂。比如已知 y e^(x·y)求 y 在 0 附近的展开。设 y a₀ a₁x a₂x² a₃x³ ...由 x0 得 y(0)1所以 a₀ 1。那么 e^(xy) 1 xy (xy)²/2 ... 而 xy x(a₀ a₁x a₂x²) a₀x a₁x² a₂x³。代入左边 1 a₁x a₂x² a₃x³ 右边 1 (a₀x a₁x² a₂x³) (a₀²x² 2a₀a₁x³)/2 (a₀³x³)/6 1 a₀x (a₁ a₀²/2)x² (a₂ a₀a₁ a₀³/6)x³比较系数a₁ a₀ 1a₂ a₁ a₀²/2 1 1/2 3/2a₃ a₂ a₀a₁ a₀³/6 3/2 1 1/6 8/3所以 y 1 x (3/2)x² (8/3)x³ ...。这就是级数解法的典型流程在微分方程近似求解里非常好用。3.3 除法与长除tan x 和 sec x 是怎么来的除法情况不能像乘法那样简单相乘得用多项式长除法或者待定系数法。以 tan x sin x / cos x 展开到 x⁵ 为例。先写sin x x - x³/6 x⁵/120 ... cos x 1 - x²/2 x⁴/24 ...tan x 是奇函数所以设 tan x a₁x a₃x³ a₅x⁵ o(x⁵)。两边乘 cos x(a₁x a₃x³ a₅x⁵)(1 - x²/2 x⁴/24) x - x³/6 x⁵/120左边展开x 项a₁ x³ 项a₃ - a₁/2 x⁵ 项a₅ - a₃/2 a₁/24比较a₁ 1a₃ - 1/2 -1/6 → a₃ 1/3a₅ - (1/3)/2 1/24 1/120 → a₅ 1/120 1/6 - 1/24 1/120 20/120 - 5/120 16/120 2/15所以 tan x x x³/3 2x⁵/15 ...和前面给的结果一致。这个方法的关键在于利用奇偶性减少未知量。tan 是奇函数所以只有奇次项未知系数直接减半。同理sec x 是偶函数设 sec x b₀ b₂x² b₄x⁴用 sec x · cos x 1 去比较系数能算出 sec x 1 x²/2 5x⁴/24 ...注意长除法写的时候一定要对齐幂次中间缺项要补 0。我见过不少人在手算 x⁵ 项时漏掉 a₃ 和 -x²/2 相乘的贡献结果整个算错。建议用表格列出来每一项来自哪里写清楚。3.4 先求导再积分arcsin x 的捷径当函数是某个人畜无害的表达式的积分时先求导、展开、再积分是最快的路。arcsin x 本身不好展开但它的导数简单(arcsin x) (1-x²)^(-1/2)用广义二项式展开α -1/2把 x 换成 -x²(1u)^(-1/2) 1 - u/2 3u²/8 - 5u³/16 ... 令 u -x² (arcsin x) 1 x²/2 3x⁴/8 5x⁶/16 ...逐项积分arcsin 0 0所以积分为 0 处起算arcsin x x x³/6 3x⁵/40 5x⁷/112 ...和前面给的表格完全对上了。同样的方法可以推 arctan x导数是 1/(1x²) 1 - x² x⁴ - ...积分得 x - x³/3 x⁵/5 - ...这个方法我说它捷径是因为求导把问题降到了熟悉的分式形态而分式的展开是标准套路。如果硬去求 arcsin 的高阶导数那会是一场噩梦。反过来的方向也常用当函数本身是某个函数的导数时先展开、再求导。比如求 (ln(1x)) 的展开就没必要先求导再展开直接展开 ln(1x) 然后逐项求导更快。这类题的核心判断是哪一个方向能让你更快落到基础展开式上就往哪个方向走。3.5 隐函数确定的函数展开有一类题不给显式表达式只说 y 由某个方程确定让你求 y 的展开。这种没有捷径就是待定系数硬算但要注意每步只保留需要的阶数。例题设 y y(x) 满足 y x y²/2且 y(0) 0求 y 展开到 x³ 项。设 y a₁x a₂x² a₃x³ o(x³)由 y(0)0 得常数项为 0。右边 y² (a₁x a₂x² a₃x³)² a₁²x² 2a₁a₂x³ o(x³)所以 y²/2 (a₁²/2)x² a₁a₂x³。代入原方程a₁x a₂x² a₃x³ x (a₁²/2)x² a₁a₂x³比较系数a₁ 1a₂ a₁²/2 1/2a₃ a₁a₂ 1/2所以 y x x²/2 x³/2 o(x³)。注意一个细节算 y² 的时候a₃x³ 这一项和 a₁x 相乘产生的是 x⁴ 项超出了我们要的范围所以可以直接扔掉不写。这种只保留到目标阶数的意识是手算不出错的关键。很多人写着写着手滑把高阶项带进去结果越算越长最后自己也搞混了。另外要提醒的是隐函数展开只告诉你存在一条解曲线在 0 附近至于这个解是不是唯一、展开式能用到多远需要看隐函数存在定理的条件。做题时通常题目会默认条件成立但如果是工程应用这一步不能省。3.6 含参数、复合嵌套与二元展开含参数的情况很常见典型题型是求 lim(x→0) (cos x - e^(-ax²/2))/x⁴问 a 取什么值时极限存在。做法是把两个函数都展到 x⁴cos x 1 - x²/2 x⁴/24 o(x⁴) e^(-ax²/2) 1 - ax²/2 a²x⁴/8 o(x⁴)相减(1 - a)x²/2 的系数来自 x² 项要让它消失就必须 a 1当 a 1 时x⁴ 项系数是 1/24 - 1/8 1/24 - 3/24 -1/12所以极限是 -1/12。这类题的解题逻辑很清晰**参数的存在让低阶项无法自动抵消必须人为设定参数让它们消失这样高阶项才有机会主导极限。**这个思路在物理里叫消除发散本质是同一个数学机制。二元函数的泰勒展开思路一样只是项数变多了f(x,y) f(0,0) (f_x·x f_y·y) (1/2!)(f_xx·x² 2f_xy·xy f_yy·y²) ...其中所有偏导数都在 (0,0) 处取值。可以用算子形式记f(x,y) Σ (1/n!)(x·∂/∂x y·∂/∂y)ⁿ f |_(0,0)。这个形式在推导误差传播公式时特别顺手比如测量中两个量各自有误差合成误差的公式就是从这里的一阶项来的。多层嵌套的复合函数处理原则是由内向外逐层展开。比如 ln(1 sin(x²))先算 sin(x²) x² - x⁶/6 ...再算 ln(1 u)u x² - x⁶/6得到 u - u²/2 ... x² - x⁶/6 - x⁴/2 ...。每一层都只保留到目标阶数。4. 阶数怎么定从极限题到工程近似我见过太多人卡在这一步函数能展开但不知道该展到第几项才停。展少了答案不对展多了浪费时间还容易算错。这一节专门解决这个问题。4.1 分母定阶法极限题的通用起手式对于 0/0 型极限一条非常实用的经验规则是看分母的最低次幂分子各项就展开到那一阶。道理很简单。如果分母是 x²那么分子里所有 o(x²) 的项除以 x² 之后是 o(1)在 x→0 时趋于 0不影响结果。而 x² 及以下的项会影响结果必须全部保留。比如求 lim(x→0) (e^x - 1 - x)/x²。分母是 x²分子展到 x²e^x - 1 - x (1 x x²/2 o(x²)) - 1 - x x²/2 o(x²)除以 x² 得 1/2 o(1)极限是 1/2。再看一个经典题lim(x→0) (tan x - sin x)/x³。如果分子只展到 x²会发现 tan x 和 sin x 都是 x ...x 项抵消后你得不出 x³ 的信息。这就是抵消现象。正确做法是先看两个函数的一次项是否相同——tan x ≈ xsin x ≈ x确实相同所以要往下多展一阶。tan x x x³/3 o(x³) sin x x - x³/6 o(x³) tan x - sin x (1/3 1/6)x³ o(x³) x³/2 o(x³)除以 x³ 得 1/2。通用起手式先看分母的阶数 n再判断分子最低次项是多少。如果分子在 n 阶之前有抵消就要展到能出现非零系数的最高阶为止。这个最多多展一阶的保险策略几乎能应付所有考试题。4.2 抵消现象与多展一阶的保险策略抵消是泰勒展开题里最容易出事的地方。它的本质是两个函数在同一阶上有相同的系数相减之后这一阶及以上被削掉真正决定极限的项被推到了更高阶。判断会不会抵消有个快速的试算法把两个函数都展到一阶看一次项系数是否相同如果相同再看三次项以此类推。一般抵消不会超过两阶否则题目就没什么可考的点了。举几个常见的抵消对表达式抵消到哪一阶需要展到tan x - sin xx 项抵消x³x - sin xx 项抵消x³ln(1x) - xx 项抵消x²sin x - x x³/6x 和 x³ 都抵消x⁵e^x - 1 - xx 项抵消x²注意抵消判断最好在动笔前做完写在草稿边上。我自己的习惯是先在纸上写分母 x³分子首项抵消一阶展到 x³。这一句话能省掉中途的犹豫也能防止算到一半忘了自己想要什么。还有一个更隐蔽的坑分母是多个项相加的时候。比如 (x - sin x)/(x²·sin x)分母里 sin x 也是变量这时候要把分母整体的最低阶找出来。x²·sin x 的最低阶是 x³因为 sin x ~ x所以等价于分母是 x³。这类题先做分母的阶数分析再处理分子顺序不能反。4.3 近似计算的误差控制与验算工程上用泰勒展开做近似关注点从极限存不存在变成误差有多大、够不够用。这时候判断依据换成前面讲的余项估计。举个实际例子用展开式计算 √1.02要求误差小于 1e-6。用 (1x)^(1/2) 1 x/2 - x²/8 x³/16 - ...取 x 0.021 0.01 - 0.00005 0.0000005 1.0099505真值是 1.0099504938...误差在 1e-8 量级三项就远远够用了。如果要求的精度更高或者 x 更接近 1比如算 √1.9级数收敛会变慢需要更多项。一个改善技巧是提取因子√1.9 √(4×0.475) 2√0.475但这样也不理想。更好的做法是围绕 1.96 1.4² 这个点展开√1.9 1.4·√(1 - 0.06/1.96) 1.4·√(1 - 0.0306...)此时 x -0.0306 很小收敛很快。这就是选好展开点的实际价值。验算有几个便宜又有效的办法第一数值验算。取几个小的具体数值代入近似公式和计算器或编程环境的结果对比。第二数量级检查。算出的误差如果比理论估计大了好几个数量级一定是哪里错了。第三对称性检查。如果函数是奇函数结果里不该出现偶次项偶函数反之。这一条能拦住很多低级错误。第四量纲检查针对物理应用。展开式中每一项的量纲必须一致否则说明项写错了。5. 常见错误清单与排查表我把这些年见过的、以及自己犯过的错误整理一下。这一节可以当成自查表用。5.1 o(xⁿ) 的运算规则用错小 o 的运算规则看着简单但用错的人特别多。核心几条o(x^m) o(x^n) o(x^min(m,n)) 保留较低阶 o(x^m) · o(x^n) o(x^(mn)) x^k · o(x^m) o(x^(mk)) o(o(x^m)) o(x^m) 嵌套不改变阶数 C · o(x^m) o(x^m) 常数不影响 o(x^m) / x^k o(x^(m-k)) 当 m k 时趋于 0最常见的错误是把 o(x^m) 当成一个可以随便加减小量。比如有人写 o(x²) o(x³) o(x⁵)这是错的应该等于 o(x²)。因为 o(x³) 里面每一项至少是 x³ 以上而 o(x²) 允许 x² 项存在两者之和的最低阶由较弱的那一个决定。另一个高频错误是忘记在换元后调整阶数。比如写 e^(x²) 1 x² o(x²)这是错的。因为 e^u 1 u o(u)令 u x² 得 e^(x²) 1 x² o(x²)。这个其实是对的。但如果写 e^x 1 x o(x²)然后换元 x → x² 得到 e^(x²) 1 x² o(x⁴)就错了——输入和输出的阶数要一致地变换o(x) 换成 o(x²) 才对不是 o(x⁴)。这个坑我踩过写完之后自己检查了一遍才发现。提示每次换元之后把 o() 里的变量也同步换掉并且重新确认阶数。这一步花十秒钟能省掉整道题重算的半小时。5.2 定义域、收敛半径、展开点搞混这三件事经常被混为一谈但它们是三个不同的概念。定义域是函数本身有意义的范围。ln(1x) 要求 1x 0即 x -1。收敛半径是展开式有效的范围。ln(1x) 在 0 处展开的收敛半径是 1所以只在 -1 x ≤ 1 内有效。定义域更大但展开式管不到那么远。展开点是你选择在哪里做展开。同一个函数在不同展开点有完全不同的展开式收敛范围也不同。这三者的关系用一个例子说清楚f(x) 1/(1-x)。定义域是 x ≠ 1。在 0 处展开收敛半径是 1只在 |x| 1 有效。但如果改在 x 2 处展开注意 2 在定义域内得到的展开式收敛范围是 |x-2| 1也就是 1 x 3。同一个函数换个展开点能用的区域完全不同。实际做题时怎么避坑三步先确认函数在展开点有定义且足够光滑再把展开式的收敛半径标出来最后检查你要计算的 x 是否落在收敛范围内。任何一步不满足展开式就不能直接用。5.3 一份可以直接照着查的排错表症状可能原因排查动作算出的极限是 0 或无穷展开阶数不够主项被抵消了检查分子低阶项是否相消多展一阶结果里出现不该有的偶次项奇偶性判断错误确认函数的奇偶性奇函数只保留奇次项近似值和真值差很多计算点超出收敛半径换展开点或改用其他方法分母是阶乘却写成了自然数ln 系列和三角系列混淆三角与指数用阶乘ln 用自然数长除法算出的系数和标准答案不符漏掉了交叉项列出所有相乘组合逐项对齐幂次换元后 o() 的阶数不对换元时没有同步变换阶数输入输出阶数一致变换隐函数展开解不唯一只比较了系数没验证存在性补验隐函数存在定理条件数值验算误差远超估计符号或系数抄错逐项对照基础展开式这张表我自己用的时候一般是从症状往下看找到最像的那一行然后去做排查动作。大部分错误在前三步就能定位。6. 我踩过的坑与几条实用心得前面讲的都是应该怎么做这一节说说容易忽略但很实用的细节。6.1 手算时的书写习惯写展开式的时候我强烈建议一项一行、按幂次排序、每行右边标注来源。看起来啰嗦但能显著降低出错率。比如算 e^(sin x) 的时候我会写成来自 u: x -x³/6 x⁵/120 来自 u²/2: x²/2 -x⁴/6 来自 u³/6: x³/6 -x⁵/12 来自 u⁴/24: x⁴/24 来自 u⁵/120: x⁵/120然后把同一列加起来。这样做的最大好处是任何一项漏了都能一眼看出来因为列是空的。我用这个方法之后复杂展开的错误率下降了一大半。另一个习惯是先写目标阶数再动笔。在纸的右上角写一行 x⁵算的时候心里始终有个锚点。看到超出这个阶数的项直接划掉不用纠结。还有一点系数尽量用分数写不要提前化成小数。分数在通分时精确小数容易在中间步骤引入舍入误差而且在比较系数时容易看错。6.2 用代码验算我最推荐的复核手段如果条件允许用一段几行的代码做符号验算是最省事的复核手段。Python 的 sympy 库可以直接给出展开式import sympy as sp x sp.symbols(x) expr sp.exp(sp.sin(x)) print(sp.series(expr, x, 0, 8))输出会直接给出 1 x x²/2 - x⁴/8 - x⁵/15 - x⁶/240 ...和你手算的结果一对就放心了。如果是纯数值验算更方便不需要任何符号库import math def approx_sin(x): return x - x**3/6 x**5/120 for v in [0.01, 0.1, 0.5]: err abs(approx_sin(v) - math.sin(v)) print(v, approx_sin(v), math.sin(v), err)跑一遍就能看到误差随 x 的衰减速度也能直观感受到三项够不够用。注意验算的目的是发现错误不是替代推导。如果只是抄一个结果考试的时候还是得自己算。我的建议是平时练习时用手算做完再用代码验一遍把每次的差异点记下来慢慢就会形成直觉。6.3 一个容易被忽略的加速技巧最后分享一个小技巧处理高阶展开时特别管用先做因式分解或提取主项把表达式化简再展开。举个具体例子。要求 (e^x - 1 - x)/(x²) 在 x 0 附近的高阶展开。直接硬算分子当然可以但如果先注意到 e^x - 1 - x x²/2 x³/6 ...马上就能看出展开式是 1/2 x/6 x²/24 ...再复杂一点求 ln(sin x / x) 的展开。直接求导会很痛苦但可以拆成 ln(sin x) - ln x ln(1 (sin x - x)/x)。因为 (sin x - x)/x -x²/6 x⁴/120 ... 是小量可以直接套 ln(1u) 的公式u -x²/6 x⁴/120 ln(1u) u - u²/2 u³/3 - ... (-x²/6 x⁴/120) - (x⁴/72)/2 ... 注意 u² 的最低次是 x⁴/36 -x²/6 x⁴/120 - x⁴/72 -x²/6 (3/360 - 5/360)x⁴ -x²/6 - x⁴/180 ...所以 ln(sin x / x) -x²/6 - x⁴/180 ...。这个结果在数值计算里用来做 sinc 相关函数的校正我第一次看到的时候还挺惊讶——两个看起来毫不相干的常数 6 和 180居然是这么凑出来的。核心思路就是一句话把大函数减小函数的形式改写成1 加上小量的形式然后所有展开式的适用条件就都满足了。这个转换多做几次就会变成条件反射。
返回列表