问题发现

众所周知,一般来说,随着科技的逐渐发展,越来越多男朋友女朋友们通过做高等数学打发时间。这不,这天王小明同学就发来疑问,询问这道题怎么做了。

f(x)=0xtesintdtf(x)=\int_0^xte^{\sin{t}} \mathrm{d}t ,则当x0x\to0 时,f(x)f(x) 为无穷小xx 的多少阶?

于是,一众大神前来指点迷津,各显神通。解题方法那是层出不穷.

比如利用洛必达+泰勒的方式:

df(x)dx=xesinxxesinx=x+o(x)              (x0)f(x)=x2+o(x2)\because \frac{\mathrm{d}f(x)}{ \mathrm{d}x}=x·e^{\sin x}\\ x·e^{\sin x}=x+o(x)\;\;\;\;\;\;\;(x\to 0)\\ \therefore f(x)=x^2+o(x^2)

再比如,还有利用 拉格朗日 的方式:

f(x)=0xtesintdt=x(ξesinξ)        ξ(0,x)f(x)=\int_0^xte^{\sin{t}} \mathrm{d}t=x·(\xi e^{\sin \xi})\;\;\;\;\xi\in(0,x)

通过论证“ξ\xixx 同阶”而得到f(x)x2f(x)\sim x^2 的结论.


这时,李大福就不满意了,你如何得出ξ\xi 和谁同阶呢?

于是,李大福出了另一道题来反驳,题目如下:

f(x)=0x2t2dtf(x)=\int_0^{x^2}t^2\mathrm{d}t 几阶?

显然,利用洛必达不会出现问题,而利用拉格朗日:f(x)=x2ξ2f(x)=x^2\xi^2 ,就会得出4阶的结论

正当李大福洋洋得意之时,河神跑来了。河神指出,ξ\xi 并不是一成不变的,它和其上限同阶。于是这类题被河神总结如下:

F(x)=0f(x)g(x)dx,其中f(x)xn,g(x)xm方法一:dF(x)dx=f(x)g[f(x)]xn1×xmn:F(x)xn(m+1)方法二:F(x)=f(x)g(ξ),其中g(ξ)xmn于是,:F(x)xn(m+1)下面证明:ξxnG(x)=0f(x)x  dx,显然有:dG(x)dx=f(x)f(x)xn×xn1于是:G(x)=f(x)ξx2n,ξxn\begin{aligned} 记&F(x)=\int_0^{f(x)}g(x)\mathrm{d}x,其中f(x)\sim x^n,g(x)\sim x^m\\\\ \color{blue}{方法一:}&\frac{\mathrm d F(x)}{\mathrm dx}=f'(x)g[f(x)]\sim x^{n-1}\times x^{mn}\\ &故:F(x)\sim x^{n(m+1)}\\\\ \color{blue}{方法二:}&F(x)=f(x)g(\xi),其中g(\xi)\sim x^{mn}\\ &于是,有:F(x)\sim x^{n(m+1)}\\ \\ &下面证明:\xi \sim x^n\\ &记G(x)=\int_0^{f(x)}x\;\mathrm dx,显然有:\\ &\frac{\mathrm{d}G(x)}{\mathrm d x}=f'(x)f(x)\sim x^n\times x^{n-1}\\ &于是:G(x)=f(x)·\xi\sim x^{2n},即\xi \sim x^n \end{aligned}

王小明觉得受益匪浅,于是为了激励大家,出了另一道题对自己乃至大家进行检验:

f(x)=12x2ln(1+x)xt2dtf(x)=\int_{-\frac{1}{2}x^2} ^{\ln (1+x)-x}t^2\mathrm d t 几阶?

王小明指出,这道题用拉格朗日可以很简单得出答案:

f(x)=[ln(1+x)x+12x2]ξ213x3(x2)2x7f(x)=[\ln (1+x)-x+\frac 1 2x^2]\xi^2\sim \frac 1 3x^3·(x^2)^2\sim x^7

当然,得先论证ξx2\xi \sim x^2 .

那么,这题用洛必达怎么做呢?

f(x)=0ln(1+x)xt2dt012x2t2dtdf(x)dx=[ln(1+x)x]2×(x1+x)+14x5ln(1+x)x=12x2+o(x2)所以最终得到:df(x)dxx6f(x)=\int_0^{ln (1+x)-x}t^2dt-\int_0^{-\frac 1 2x^2}t^2dt\\ \frac{\mathrm d f(x)}{\mathrm d x}=[ln (1+x)-x]^2\times(-\frac{x}{1+x})+\frac 1 4x^5\\ 而\ln (1+x)-x= -\frac 1 2x^2+o(x^2)\\ 所以最终得到:\frac{\mathrm d f(x)}{\mathrm d x}\sim x^6

王小明提出疑问,为什么[ln(1+x)x]2[ln (1+x)-x]^2 可以只展开两项?换句话说,复合函数的泰勒展开究竟如何书写才不会漏写多写呢?

于是,终于引出了今天的主题:复合函数的泰勒展开式

具体实例与算法

  • f(x)=sinx×(xsinx)f(x)=\sin x\times(x-\sin x) 是几阶?

我们知道,sinx=x13!x3+15!x5...\sin x= x-\frac 1 {3!}x^3+\frac 1 {5!}x^5-...

所以相应的有,xsinx=13!x315!x5+...x-\sin x=\frac 1 {3!}x^3-\frac 1 {5!}x^5+...

我们将f(x)f(x) 分为左右两个部分,即把sinx\sin x看作(xsinx)(x-\sin x) 看作,因此,二者相乘其实就是对xx阶数进行配对

于是我们可以得到如下集合:

INPUT:Left={x,x3,x5,...}Right={x3,x5,x7,...}OUTPUT:Ans=Left×Right\begin{aligned} INPUT:&\\ &Left=\{x,x^3,x^5,...\}\\ &Right=\{x^3,x^5,x^7,...\}\\ OUTPUT:&\\ &Ans=Left\times Right \end{aligned}

显然,AnsAns 的结果由两个集合构成,AnsAnsxx 的阶数由两个集合中的阶数配对而成。

例如LeftLeft 中的xx 可以和RightRight 中的x3x^3 配对得到x4x^4,这是唯一的。但是也有不唯一的情况;

例如AnsAns 中的x6x^6 可以 由LeftLeft 中的xxRightRight 中的x5x^5 配对得到,也可以由LeftLeft 中的x3x^3RightRight 中的x3x^3 配对得到.

因此,我们要做的工作就是:

找到AnsAns 当前最小的阶数,计算其系数是否为0,如果不是则返回其阶数程序结束,否则将其弹出并继续寻找和计算,直到所有阶数可能性都被弹出,AnsAns 为空集时 程序结束。

显然,这是一个组合优化问题,甚至有可能属于是NPhardNP-hard,考虑最坏情况,其时间复杂度是O(nm)O(nm)(大概)

当然在实际考研数学(高等数学)中,最高不会让我们算太多,所以手算是可以完全满足需求的。

不过这需要我们展开很多项依次试探性计算,一点也不人性化呀!


但是天无绝人之路,既然解决不了问题,我们就解决出题的人。我们就可以改变问题。

是的,上述做法是因为我们将原式看作乘法来处理了,事实上还有优化方法。

注意到 :sinx(xsinx)=xsinxsin2x\sin x (x-\sin x)=x\sin x-\sin ^2x

所以我们可以把乘法变成加减法来降低手算成本!同样地,通过减号分为两个部分,于是有:

xsinx=x213!x4+...sin2x=(x13!x3+...)2x\sin x=x^2-\frac 1 {3!}x^4+...\\ \sin^2x=(x-\frac 1 {3!}x^3+...)^2

所以问题简化为:

INPUT:Left={x2,x4,x6,...}Right={x,x3,x5,...}×{x,x3,x5,...}={x2,x4,x6,...}OUTPUT:Ans=Left+Right\begin{aligned} INPUT:&\\ &Left=\{x^2,x^4,x^{6},...\}\\ &Right=\{x,x^3,x^5,...\}\times \{x,x^3,x^5,...\}=\{x^2,x^4,x^6,...\}\\ OUTPUT:&\\ &Ans=Left+ Right \end{aligned}

虽然RightRight 中不可避免地还是出现了相乘的情况,但是对于AnsAns 我们可以轻易得出结果。

我们可以快速判断出,xx 的阶数只可能在2、4、6等之中去取,不会出现1、3、5.

对于这道题,显然x2x^2 的时候LeftLeftRightRight 的系数都是1,二者相减之后就被抵消了。所以,最小阶数就是4.

即:f(x)=sinx×(xsinx)x4f(x)=\sin x\times(x-\sin x)\sim x^4

QED.


  • f(x)=sinx(cosx4)+3xf(x)=\sin x(\cos x-4)+3x 是几阶?

第一眼我们会想当然地得到如下解法:

cosx112x2sinxx于是:f(x)=sinx(cosx1)3sinx+3x=12x3+o(x3)x3\cos x-1\sim\frac 1 2x^2\\ \sin x\sim x\\ 于是:f(x)=\sin x(\cos x-1)-3\sin x+3x\\ =\frac 1 2x^3+o(x^3)\sim x^3

然而,当我们用洛必达进行验证的时候会发现,f(x)f(x)x3x^3高阶无穷小,换句话说这个做法是错误的。

错误原因在于我们只展开了1~2项导致系数未完全抵消从而保留了错误阶数

再次利用上面的求解思路我们走一遍流程:

INPUT:A1={x1,x3,x5,x7,...}A2={cosx1}={x2,x4,x6,x8,...}:A1×A2={x3,x5,x7,...}A3=A1={x1,x3,x5,x7,...}A4={x}OUTPUT:Ans=A1×A2A3+A4\begin{aligned} INPUT:\\ &A_1=\{x^1,x^3,x^5,x^7,...\}\\ &A_2=\{\cos x-1\}=\{x^2,x^4,x^6,x^8,...\}\\ &有:A_1\times A_2 =\{x^3,x^5,x^7,...\}\\ &A_3=A_1=\{x^1,x^3,x^5,x^7,...\}\\ &A_4=\{x\}\\ OUTPUT:\\ &Ans=A_1\times A_2-A_3+A_4 \end{aligned}

首先对xx的系数进行验证,显然被抵消了。

然后对x3x^3进行验证。

可见:sinx(cosx1)=12x3+o(x3)\sin x (\cos x-1)=\frac 1 2x^3+o(x^3),而3sinx3x=3×(13!x3)+o(x3)=12x3+o(x3)3\sin x-3x=3\times(\frac 1 {3!}x^3)+o(x^3)=\frac 1 2x^3+o(x^3)

当二者相减时,显然x3x^3 也被抵消了!

于是就该对x5x^5 进行验证了……

你可能会想:

这样不还是不人性化吗?如果没有自行展开足够多项,我们怎么走出这个误区呢?

别急,我们还是那句话,解决不了问题就转化问题。

上述解法中我们再一次出现了可憎的乘法,但是这个乘法我们同样可以改成加法!

f(x)=sinx(cosx4)+3x=12sin(2x)4sinx+3x\begin{aligned} f(x)&=&\sin x(\cos x-4)+3x\\ &=&\frac 1 2\sin (2x)-4\sin x+3x \end{aligned}

于是:

INPUT:A1=A2={x,x3,x5,...}A3={x}OUTPUT:Ans=A1A2+A3\begin{aligned} INPUT:\\ &A_1=A_2=\{x,x^3,x^5,...\}\\ &A_3=\{x\}\\ OUTPUT:\\ &Ans=A_1-A_2+A_3 \end{aligned}

我们可以轻易对12sin(2x)\frac 1 2\sin(2x)4sinx4\sin x 展开从而抵消,岂不美哉?


  • f(x)=[ln(1+x)x]2f(x)=[\ln{(1+x)}-x]^2 几阶?

我们的做法是通过等式:

ln(1+x)x=12x2+13x3+...\ln (1+x) -x=-\frac 1 2x^2+\frac 1 3 x^3+...\\

得出:A={x2,x3,x4,...},Ans=A2A=\{x^2,x^3,x^4,...\},Ans=A^2

于是我们可以轻易知道Ans={x4,x5,x6,...}Ans=\{x^4,x^5,x^6,...\},最小阶必为x4x^4

而王小明的做法是将完全平方展开,得到:

f(x)=ln2(1+x)+x22xln(1+x)f(x)=\ln^2(1+x)+x^2-2x\ln (1+x)

于是:

A1={x,x2,x3,...}2={x2,x3,x4,...}A2={x2}A3={x}×{x,x2,x3,...}={x2,x3,x4,...}Ans=A1+A2A3A_1=\{x,x^2,x^3,...\}^2=\{x^2,x^3,x^4,...\}\\ A_2=\{x^2\}\\ A_3=\{x\}\times \{x,x^2,x^3,...\}=\{x^2,x^3,x^4,...\}\\ Ans=A_1+A_2-A_3

也就是说,我们在验证x4x^4之前,还需要对x2x^2x3x^3的系数进行验证,徒增计算时间。

这是因为通过完全平方展开,导致原本可以合在一起简化计算的ln(1+x)x\ln (1+x) -x 被分开处理了

也就是说对x2x^2x3x^3的系数进行验证时,他们的系数之和必然为0.

但是你可能又要发出疑问了:

这次王小明的做法就是把乘法变成加减法来处理的,为什么反而又复杂了呢?

是的,显然无脑加减法也不人性化,因此我们总结这类问题如下:

  1. 若存在多项式函数g(x)=a0+a1x+a2x2+...+anxng(x)=a_0+a_1x+a_2x^2+...+a_nx^n,则其被作为外函数的复合函数的泰勒展开可以直接计算而不用特意展开
  2. 否则,通过形式变化将外函数h(x)h(x)转换为h(x)=f1(x)+f2(x)+...fn(x)h(x)=f_1(x)+f_2(x)+...f_n(x)的形式进行求解