泰勒级数是在数学中极其强大的函数近似工具 —— 3Blue1Brown
这两天重新学习了关于泰勒展开式的内容,决定趁热打铁水一篇文章出来作为学习记录。
泰勒定理的大致思想为如果一个函数足够光滑,在已知函数某一点各阶导数的前提下,便可以利用这些导数值作为系数构建一个多项式来近似该函数在这一点的邻域中的值。
公式表达为
Copy g ( x ) = f ( a ) + f ′ ( x ) 1 ! ( x − a ) + f 2 ( x ) 2 ! ( x − a ) 2 + . . . + f n ( x ) n ! ( x − a ) n + R n ( x ) g(x) = f(a) + \frac{f^{\prime}(x)}{1!} (x - a) + \frac{f^2(x)}{2!} (x - a)^2 + ... + \frac{f^n(x)}{n!} (x - a)^n + R_n(x) g ( x ) = f ( a ) + 1 ! f ′ ( x ) ( x − a ) + 2 ! f 2 ( x ) ( x − a ) 2 + ... + n ! f n ( x ) ( x − a ) n + R n ( x )
上面的式子暂且先放到一边,这里先解释什么样的函数会被认为是光滑的,一个光滑的函数是具有无限阶导数的函数,它在定义域内的每个点处都可以被无限次微分,且导数在该点处连续。比如 y = x y = x y = x ,它的导数为 y ′ = 1 y^{\prime} = 1 y ′ = 1 ,常数再导下去就一直是 0 了,因此称 y = x y = x y = x 是一个一阶光滑的函数。再比如像 y = sin x y = \sin x y = sin x ,它就是一个无限阶光滑的函数,因为其导数无非就是一直循环 c o s x cos x cos x 、− s i n x -sin x − s in x 、− c o s x -cos x − cos x 、s i n x sin x s in x 。
什么是近似#
函数的近似是指使用另一个函数来逼近原函数,使得它们在某个范围内仅存在较小的误差。从这段描述中可以看出,近似可以作为一种计算复杂函数的手段,只需要将一些不好计算的函数近似成好计算的函数即可,仅从语言上理解总觉得有些怪,举个例子或许会更加的直观,比如说遇到需要手算求解 sin 2 \sin 2 sin 2 的场景通常会将其在零点进行泰勒展开为 Σ n = 0 + ∞ ( − 1 ) n ( 2 n + 1 ) ! ( 2 ) 2 n + 1 \varSigma_{n=0}^{+\infty} \frac{(-1)^n}{(2n+1)!} (2)^{2n+1} Σ n = 0 + ∞ ( 2 n + 1 )! ( − 1 ) n ( 2 ) 2 n + 1 (这里仅仅是举个例子,后面会介绍如何展开),只需要取前几项便可以求出一个近似解。但不管怎么近似最后必然还是存在误差的(即表达式中R n ( x ) R_n(x) R n ( x ) ),当然在后面我们还会再讨论到。
如何去近似一个函数#
函数在某一点的导数是指这个函数在这一点附近的变化率(可参考 ),那么如果对求导后的结果再求导则对应的是该点变化率的变化率,这个关系如果继续向下推的话会变得无穷无尽,总的来说如果想要近似一个函数,那么只要做到使它们的任意 n 阶导数相同即可(只要变化率、变化率的变化率... 等等都相同,它们的函数图像必然会无限的接近)。因此如果我们想要近似一个函数 f (x) 可以假设一个对应的 g ( x ) = a 0 + a 1 ( x ) + a 2 ( x 2 ) + . . . + a n ( x n ) g(x) = a_0 + a_1(x) + a_2(x^2) + ... + a_n(x^n) g ( x ) = a 0 + a 1 ( x ) + a 2 ( x 2 ) + ... + a n ( x n ) 其中 n 为任意正整数,之所以这么设 g (x) 的目的也很简单,这种形式的表达更方便对其求任意 n 阶段的导数。
对其进行在零点的展开
Copy { f ( 0 ) = g ( 0 ) f ′ ( 0 ) = g ′ ( 0 ) f 2 ( 0 ) = g 2 ( 0 ) . . f n ( 0 ) = g n ( 0 ) \begin{cases}
f(0) = g(0) \\
f^{\prime}(0) = g^{\prime}(0) \\
f^{2}(0) = g^{2}(0) \\
. \\
. \\
f^{n}(0) = g^{n}(0)
\end{cases} ⎩ ⎨ ⎧ f ( 0 ) = g ( 0 ) f ′ ( 0 ) = g ′ ( 0 ) f 2 ( 0 ) = g 2 ( 0 ) . . f n ( 0 ) = g n ( 0 )
以下是 a n a_n a n 阶导数的求解过程
Copy ∵ f n ( 0 ) = g n ( 0 ) ∴ f n ( 0 ) = a n n ! ∴ a n = f n ( 0 ) n ! \because f^{n}(0) = g^{n}(0) \\
\therefore f^{n}(0) = a_n n! \\
\therefore a_n = \frac{f^{n}(0)}{n!} ∵ f n ( 0 ) = g n ( 0 ) ∴ f n ( 0 ) = a n n ! ∴ a n = n ! f n ( 0 )
可得
Copy { a 0 = f ( 0 ) a 1 = f ′ ( 0 ) 1 ! a 2 = f 2 ( 0 ) 2 ! . . a n = f n ( 0 ) n ! \begin{cases}
a_0 = f(0) \\
a_1 = \frac{f^{\prime}(0)}{1!} \\
a_2 = \frac{f^2(0)}{2!} \\
. \\
. \\
a_n = \frac{f^n(0)}{n!}
\end{cases} ⎩ ⎨ ⎧ a 0 = f ( 0 ) a 1 = 1 ! f ′ ( 0 ) a 2 = 2 ! f 2 ( 0 ) . . a n = n ! f n ( 0 )
于是我们得到了在零点处泰勒展开的式子(麦克劳林展开)
Copy g ( x ) = f ( 0 ) + f ′ ( 0 ) 1 ! ( x ) + f 2 ( 0 ) 2 ! ( x ) 2 + . . . + f n ( 0 ) n ! ( x ) n + R n ( x ) g(x) = f(0) + \frac{f^{\prime}(0)}{1!} (x) + \frac{f^2(0)}{2!} (x)^2 + ... + \frac{f^n(0)}{n!} (x)^n + R_n(x) g ( x ) = f ( 0 ) + 1 ! f ′ ( 0 ) ( x ) + 2 ! f 2 ( 0 ) ( x ) 2 + ... + n ! f n ( 0 ) ( x ) n + R n ( x )
把这个展开变成通式,比如说对 a 点展开,只需要进行一个右移即可
Copy g ( x ) = f ( a ) + f ′ ( a ) 1 ! ( x − a ) + f 2 ( a ) 2 ! ( x − a ) 2 + . . . + f n ( a ) n ! ( x − a ) n + R n ( x ) g(x) = f(a) + \frac{f^{\prime}(a)}{1!} (x - a) + \frac{f^2(a)}{2!} (x - a)^2 + ... + \frac{f^n(a)}{n!} (x - a)^n + R_n(x) g ( x ) = f ( a ) + 1 ! f ′ ( a ) ( x − a ) + 2 ! f 2 ( a ) ( x − a ) 2 + ... + n ! f n ( a ) ( x − a ) n + R n ( x )
我们称上式的 R n ( x ) R_n(x) R n ( x ) 为余项,接下来会进行单独处理。倘若将此项删除,上述等式只能画上约等号,毕竟即使 n 为无穷也会有 n+1 的存在。
对余项 R n ( x ) R_n(x) R n ( x ) 进行处理#
推起来太麻烦了,留着以后写。
不管是过程还是结果其实都在表达 —— 目标点与展开点越远,其误差就越大。比如说我们对 sin x 在零点处展开,但是求值时带入的 2,那么这个 2 就是目标点,但为什么允许在零点展开后带入 2 去计算 sin 2 \sin 2 sin 2 呢?这又与收敛区间有关系,因为 sin 的收敛区间在 (− ∞ + ∞ -\infty +\infty − ∞ + ∞ ) 上,所以可以直接带入计算。以后再写、以后再写。