Taylor series is an extremely powerful function approximation tool in mathematics - 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 ,它就是一個無限階光滑的函數,因為其導數無非就是一直循環 cos x \cos x cos x 、− sin x -\sin x − sin x 、− cos x -\cos x − cos x 、sin x \sin x sin x 。
什麼是近似#
函數的近似是指使用另一個函數來逼近原函數,使得它們在某個範圍內僅存在較小的誤差。從這段描述中可以看出,近似可以作為一種計算複雜函數的手段,只需要將一些不好計算的函數近似成好計算的函數即可。僅從語言上理解總覺得有些怪,舉個例子或許會更加直觀,比如說遇到需要手算求解 sin 2 \sin 2 sin 2 的場景通常會將其在零點進行泰勒展開為 ∑ n = 0 + ∞ ( − 1 ) n ( 2 n + 1 ) ! ( 2 ) 2 n + 1 \sum_{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 − ∞ + ∞ ) 上,所以可以直接帶入計算。以後再寫、以後再寫。