03.06 看完這篇讓你高數不掛科之——泰勒公式

今天的文章我們來討論大名鼎鼎的泰勒公式

泰勒公式[1]真的非常有名,我相信上過高數課的一定都記得它的大名。即使你翹掉了所有的課,也一定會在考前重點裡見過。


我對它的第一映像就是比較難,而且感覺沒有太多意思,就是一個近似的函數而已。最近重溫了一下有了一些新的心得,希望盡我所能講解清楚。


泰勒公式的用途


在看具體的公式和證明之前,我們先來了解一下它的用途,然後帶著對用途的理解再去思考它出現的背景以及原理會容易許多。這也是我自學這麼久總結出來的規律。


泰勒公式本質解決的是近似的問題,比如說我們有一個看起來很複雜的方程,我們直接計算方程本身的值可能非常麻煩。所以我們希望能夠找到一個近似的方法來獲得一個足夠近似的值。


從這裡,我們得到了兩個重點,一個是近似的方法,另一個是近似的精度。我們既需要找到合適的方法來近似,同時也需要保證近似的精度是可控的。否則一切都沒有意義,結合實際其實很好理解,比如我們用機床造一個零件。我們都知道世界上不存在完美的圓,實際上我們也並不需要完美,但是我們需要保證偏差是可控的,並且在一定的範圍內。泰勒公式也是一樣,它既可以幫助我們完成近似,也可以保證得到的結果是足夠精確的。


泰勒公式的定義


我們下面來看看泰勒公式的定義,我們已經知道了它的用途是求一個函數的近似值。但是我們怎麼來求呢,其實一個比較樸素的思路是通過斜率逼近


舉個例子:

看完這篇讓你高數不掛科之——泰勒公式


這是一張經典的導數圖,從上圖我們可以看到,隨著Δx的減小,點 P0 和 P 也會越來越接近,這就帶來了 Δy 越來越接近 Δx f'(x0)。


當然,當 Δx 比較大的時候顯然誤差就會比較大,為了縮小誤差,我們可以引入二階導數、三階導數以及高階導數。由於我們並不知道函數究竟可以有多少階導數,我們不妨假設f(x)在區間內一直有(n+1)階導數,我們試著寫出一個多項式來逼近原函數:


看完這篇讓你高數不掛科之——泰勒公式


我們希望這個式子與原值的誤差越小越好,究竟要多小才算足夠好呢?數學家們給出了定義,希望它是

(x-x0)^n 的高階無窮小。也就是說誤差比上 (x-x0)^n 的極限是0。


我們前面說了,我們是通過導數來逼近的,所以我們假設:


看完這篇讓你高數不掛科之——泰勒公式


按照這個假設我們可以很方便地得到係數了,其實很簡單,我們構造係數使得求導之後相乘的常數項全部約掉。


看完這篇讓你高數不掛科之——泰勒公式


我們把這兩個式子帶入一下,可以得到:


看完這篇讓你高數不掛科之——泰勒公式


泰勒公式的證明


其實上面的式子就是泰勒公式的內涵了,也就是說我們通過高階導數來逼近了原函數。最後我們只需要證明這個式子就是我們想要的,也就是它的誤差足夠小。


我們同樣用一個函數 R(x) 來表示 P_n(x) 與原函數 f(x) 的差值。我們直接比較比較困難,所以數學家採取了一系列花裡胡哨、歎為觀止的操作。


我們帶入一下可以發現,R(x0) = 0,不僅如此:


看完這篇讓你高數不掛科之——泰勒公式


以上步驟完全不需要證明,我們直接帶入求導就可以得到。因為存在 x - x0 的項,很明顯當 x = x0 的時候,可以得到如上的結論。


到這裡,我們需要進行一個猜測,這裡的步驟有一點跳躍。就連課本上都沒有詳細的解釋,沒有詳細解釋的原因也很簡單,因為需要用到積分的知識。而讀者在這裡是還沒有接觸過積分的,不過,我們不是嚴謹的論文,可以稍稍放鬆一些。其實根據上面的公式,我們是可以有些猜測的。根據上面的規律,以及我們的目標——證明這個 R(x) 函數是一個關於 (x-x0)^n 的無窮小,所以我們可以猜測它應該是一個與 (x - x0)^(n+1) 相關的函數。


有了這個猜測之後,我們套用一下柯西中值定理:


看完這篇讓你高數不掛科之——泰勒公式


我們令 f(x)=R_n(x), F(x)=(x-x0)^(n+1),套用中值定理可以得到:


看完這篇讓你高數不掛科之——泰勒公式


有了這個結論之後,我們再對函數 R'_n(x) 和(n+1)(x-x0)^n 在區間 (x0, ξ1) 上再次應用柯西中值定理:


看完這篇讓你高數不掛科之——泰勒公式


接下來就是熟悉的套娃環節了,經過一共n+1次套娃之後,我們可以得到:


看完這篇讓你高數不掛科之——泰勒公式


我們對 P_n(x) 求n+1次導數,可以得到0,因為所有項最多隻有n次,求n+1次導數之後全部變成0。也就是說


看完這篇讓你高數不掛科之——泰勒公式


所以


看完這篇讓你高數不掛科之——泰勒公式


我們把這項代入上式,可以得到:


看完這篇讓你高數不掛科之——泰勒公式


證明一下誤差


接下來我們要證明這個誤差 R_n(x) 是 (x-x0)^n 的高階無窮小。


到這裡,證明就很簡單了,在固定的區間(a, b)中,很明顯函數 f^(n+1)(x) 存在最大值,我們假設這個最大值是M。也就是說


看完這篇讓你高數不掛科之——泰勒公式


那麼:


看完這篇讓你高數不掛科之——泰勒公式


由於x逼近 x0,M是一個常數,所以這個極限趨向於0,我們可以用極限的定義很容易證明。於是我們證明了,誤差 R_n(x) 是比 (x-x0)^n 更高階的無窮小。


所以我們可以得到:


看完這篇讓你高數不掛科之——泰勒公式


由於我們一共用到了n階導數來表達原函數,所以我們稱為這是原函數f(x)的n階泰勒展開。最後的

R_n(x) ,我們稱它為拉格朗日餘項。我們也可以簡寫為 o[(x-x0)^n] ,它稱為佩亞諾型餘項,其實和拉格朗日餘項是一回事,只是寫的形式不同。


我們如果令 x0 = 0 的話,還可以將式子進一步化簡。由於 ξ 在0和x中間,所以我們可以令 ξ = θx,原公式可以寫成:


看完這篇讓你高數不掛科之——泰勒公式


和上面的式子相比,這個式子要簡單許多,它也有一個名字,叫做麥克勞林公式。在麥克勞林公式下的佩亞諾餘項寫成o(x^n),看起來非常簡單。


如果覺得上面的式子有點多記不過來可以忽略原式,只需要記住麥克勞林公式即可。對於拉格朗日餘項,我們也只會在計算誤差的時候用到,在不需要考慮誤差的場景下也可以忽略。


舉例


下面我們來看一個實際的例子,來感受一下泰勒公式的強大。

我們都知道有一些函數的值我們很難直接計算,比如 f(x)=e^x,和正弦餘弦函數等。由於e本身就是一個無理數,有沒有想過我們怎麼來求一個帶e的函數值?其實很多時候,就是用的泰勒公式。


我們就用f(x)=e^x 舉例,看看怎麼利用泰勒公式來計算。


為了簡化計算,我們顯然考慮麥克勞林公式。由於 x=0 時,e^x=1,並且 f'(x)=e^x=1。


所以我們可以得到:


看完這篇讓你高數不掛科之——泰勒公式


我們代入泰勒公式,可以得到:


看完這篇讓你高數不掛科之——泰勒公式


我們如果把最後一項當成誤差,那麼可以得到:


看完這篇讓你高數不掛科之——泰勒公式


當n=10時,x=1,產生的誤差為:


看完這篇讓你高數不掛科之——泰勒公式


我們稍微算一下就可以知道,這個誤差小於1e-6,已經足夠接近了。也就是說我們把原本不太好計算的函數轉化成了若干個多項式的和,可以非常簡單地獲得一個足夠接近的近似值。並且除此之外,我們還能算出它的最大誤差,實在是非常完美了。


思考

到這裡還沒有結束,看完所有的推導和計算之後,不知道你們有沒有一個疑惑,這麼一個牛叉並且複雜並且有用的公式,泰勒是怎麼靈光一閃想到的?好像用一時的靈感很難解釋。畢竟人的靈感往往都是一瞬間對某個點的頓悟,而這麼多公式和結論是很難頓悟的。


之前上學的時候我完全沒有意識到這個問題,這次重溫的時候才覺得不對。當然你可能會說這裡有這麼多數學家的名字,顯然不是一個人的功勞。但即使是這樣,我仍然好奇,

究竟是什麼起因引出了這麼偉大的公式?


直到我無意間看到知乎撒歡大神[2]的回答才恍然大悟。


我們設想一個問題,如果f(x)=g(x),那麼顯然f(x)和g(x)的各階導數全都相等。那麼問題來了,如果我們人為地構造一個函數h(x),使得它的各階導數和g(x)吻合,那麼是不是可以認為這個我們人為構造出來的函數也和g(x)相等呢?


然而有些函數的高階導數是無窮無盡的,我們不可能人工全部擬合,所以只能退而求其次,擬合其中的n項。顯然這樣會有誤差,那麼我們需要知道誤差的大小。於是就有了後面的拉格朗日餘項大小的推算。


泰勒公式的出現和推導過程正是基於這樣的思路,想到這裡,我又有了新的想法。如果把各階導數的項看成是特徵,那麼這個問題其實轉化成了機器學習當中的

迴歸問題,只不過在機器學習當中我們是設定優化目標和優化方法,讓模型自行訓練來擬合逼近,而泰勒公式其實是通過思維和數學的力量推算出了結果,兩者的目的和結果是一樣的,但是過程完全迥異,兩個看似完全風馬牛不相及的問題殊途同歸,不得不說數學的魅力真的令人折服。


今天的文章就是這些,如果覺得有所收穫,請順手點個關注或者轉發吧,你們的舉手之勞對我來說很重要。


[1]

高等數學(上海交大第五版): https://book.douban.com/subject/2112359/

[2]

撒歡大神的回答: https://www.zhihu.com/question/20887356


分享到:


相關文章: