python機(jī)器學(xué)習(xí)高數(shù)篇之泰勒公式
不少同學(xué)一提到泰勒公式,腦海里立馬浮現(xiàn)高大上的定義和長(zhǎng)長(zhǎng)的公式,令人望而生畏。
實(shí)際上,泰勒公式?jīng)]有那么可怕,它是用簡(jiǎn)單的多項(xiàng)式來逼近一個(gè)光滑的函數(shù),從而近似替代不熟悉的函數(shù)。由于泰勒公式具有將復(fù)雜函數(shù)近似成多個(gè)冪函數(shù)疊加形式的性質(zhì),可以用它進(jìn)行比較、求極限、求導(dǎo)、解微分方程等。
我們先來看一下泰勒公式的發(fā)明者,布魯克·泰勒——
布魯克·泰勒(Brook Taylor,1685-1732),英國(guó)數(shù)學(xué)家,牛頓學(xué)派最優(yōu)秀的代表人物之一,他于1712年的一封信里首次敘述了泰勒公式。
再來看一下高數(shù)書上對(duì)泰勒公式的定義:
公式3-5就稱為f(x)在x0處的帶有拉格朗日余項(xiàng)的n階泰勒公式。
初看這個(gè)泰勒公式的定義,就覺得恢宏大氣,氣勢(shì)磅礴。不過光從泰勒公式的定義,很難直觀看出它是怎么用多項(xiàng)式逼近原函數(shù)的。接下來我們用圖像和圖表來感受一下——
這里我們先列舉出f(x) = cosx在原點(diǎn)的泰勒2階、4階、6階、8階、10階的多項(xiàng)式,并用圖像表示該函數(shù)及其泰勒n階多項(xiàng)式。
對(duì)應(yīng)圖像如下,其中黑色線條為原函數(shù)f(x),彩色線條為多項(xiàng)式g(x)??梢钥吹诫S著階數(shù)的增大,多項(xiàng)式在更大范圍內(nèi)越來越逼近原函數(shù)。
我們?cè)儆胮ython實(shí)現(xiàn)函數(shù)y=cosx的泰勒n階多項(xiàng)式,并與y=cosx的實(shí)際值進(jìn)行比較,其中令n=40。
def f_cos(x): m = 20+1 sum = 1.0 for i in range(1,m): #range函數(shù)取值是左閉右開 n = 2 * i tmp1,tmp2,tmp3 = 1,1,1 for j in range(1,i+1): tmp1 = -tmp1 for j in range(1,n+1): tmp2 = tmp2*x tmp3 = tmp3*j sum = sum + tmp1*tmp2/tmp3 return sum
from numpy import * for x in range(-20,21): print("x = " + str(x)) print("f_cos(x) = " + str(f_cos(x))) print("cos(x) = " + str(cos(x)))
比較自定義的f_cos(x)和numpy庫(kù)的cosx的誤差:
x取值 | 自定義的f_cos(x) | numpy庫(kù)的cosx | 誤差(f_cos(x) - cos(x)) | 分析 |
---|---|---|---|---|
20 | 2577.3069 | 0.4081 | 2576.8988 | 誤差非常大 |
19 | 305.1701 | 0.9887 | 304.1814 | 誤差較大 |
18 | 32.5969 | 0.6603 | 31.9366 | 存在誤差 |
17 | 2.6676 | -0.2752 | 2.9428 | 存在誤差 |
16 | -0.7234 | -0.9577 | 0.2343 | 存在0.1級(jí)誤差 |
15 | -0.7439 | -0.7597 | 0.0158 | 存在0.01級(jí)誤差 |
14 | 0.1376 | 0.1367 | 0.0009 | 存在0.0001級(jí)誤差 |
13 | 0.9075 | 0.9074 | 0.0000 | 精度范圍內(nèi)一致 |
12 | 0.8439 | 0.8439 | 0.0000 | 精度范圍內(nèi)一致 |
11 | 0.0044 | 0.0044 | 0.0000 | 精度范圍內(nèi)一致 |
10 | -0.8391 | -0.8391 | 0.0000 | 精度范圍內(nèi)一致 |
9 | -0.9111 | -0.9111 | 0.0000 | 精度范圍內(nèi)一致 |
8 | -0.1455 | -0.1455 | 0.0000 | 精度范圍內(nèi)一致 |
7 | 0.7539 | 0.7539 | 0.0000 | 精度范圍內(nèi)一致 |
6 | 0.9602 | 0.9602 | 0.0000 | 精度范圍內(nèi)一致 |
5 | 0.2837 | 0.2837 | 0.0000 | 精度范圍內(nèi)一致 |
4 | -0.6536 | -0.6536 | 0.0000 | 精度范圍內(nèi)一致 |
3 | -0.9900 | -0.9900 | 0.0000 | 精度范圍內(nèi)一致 |
2 | -0.4161 | -0.4161 | 0.0000 | 精度范圍內(nèi)一致 |
1 | 0.5403 | 0.5403 | 0.0000 | 精度范圍內(nèi)一致 |
0 | 1.0000 | 1.0000 | 0.0000 | 精度范圍內(nèi)一致 |
由于f(x) = cosx函數(shù)關(guān)于y軸對(duì)稱,這里只列舉出了x軸右半部分[0,20]的范圍,x軸左半部分的結(jié)果與右半部分結(jié)果相同。
在[0,20]范圍內(nèi),當(dāng)x=20時(shí),二者的誤差非常大。隨著x的減小,二者的誤差也在逐漸減小。在[0,13]范圍內(nèi),二者在精度范圍內(nèi)完全一致,幾乎零誤差。
大家可以嘗試一下,把n的值調(diào)大,這個(gè)精度一致的范圍會(huì)變大。例如此例若n=30,即y=cosx的泰勒30階多項(xiàng)式,則在[-20,20]范圍內(nèi),二者精度都完全一致。感興趣的同學(xué)可以運(yùn)用同樣的方法,分析一下其他函數(shù)。
再試著寫出函數(shù)y=sinx的泰勒n階多項(xiàng)式的python程序,其中n=19。
def f_sin(x): m = 10+1 sum = 0.0 for i in range(1,m): n = 2 * i - 1 tmp1,tmp2,tmp3 = 1,1,1 for j in range(1,i): tmp1 = -tmp1 for j in range(1,n+1): tmp2 = tmp2*x tmp3 = tmp3*j sum = sum + tmp1*tmp2/tmp3 return sum
from numpy import * for x in range(-20,21): print("x = " + str(x)) print("f_sin(x) = " + str(f_sin(x))) print("sin(x) = " + str(sin(x)))
后續(xù)會(huì)繼續(xù)增加一些函數(shù)的泰勒n階多項(xiàng)式python程序(可能會(huì)偷懶)。
最后推薦一個(gè)比較好用的在線畫函數(shù)的工具Desmos:
https://www.desmos.com/calculator?lang=zh-CN
簡(jiǎn)易教程:
https://www.ravenxrz.ink/archives/27d14722.html
還可以用著名的心形線畫個(gè)愛心哦:
到此這篇關(guān)于python機(jī)器學(xué)習(xí)高數(shù)篇之泰勒公式的文章就介紹到這了,更多相關(guān)python泰勒公式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python機(jī)器學(xué)習(xí)高數(shù)篇之函數(shù)極限與導(dǎo)數(shù)
- Python機(jī)器學(xué)習(xí)入門(一)序章
- Python機(jī)器學(xué)習(xí)入門(二)之Python數(shù)據(jù)理解
- Python機(jī)器學(xué)習(xí)入門(三)之Python數(shù)據(jù)準(zhǔn)備
- Python機(jī)器學(xué)習(xí)入門(四)之Python選擇模型
- Python機(jī)器學(xué)習(xí)入門(五)之Python算法審查
- Python機(jī)器學(xué)習(xí)入門(六)之Python優(yōu)化模型
相關(guān)文章
解決python3.6 右鍵沒有 Edit with IDLE的問題
這篇文章主要介紹了解決python3.6 右鍵沒有 Edit with IDLE的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03pytorch 實(shí)現(xiàn)計(jì)算 kl散度 F.kl_div()
這篇文章主要介紹了pytorch 實(shí)現(xiàn)計(jì)算 kl散度 F.kl_div(),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05解決jupyter notebook 出現(xiàn)In[*]的問題
這篇文章主要介紹了解決jupyter notebook 出現(xiàn)In[*]的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04python中關(guān)于range()函數(shù)反向遍歷的幾種表達(dá)
這篇文章主要介紹了python中關(guān)于range()函數(shù)反向遍歷的幾種表達(dá),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05Python關(guān)于print的操作(倒計(jì)時(shí)、轉(zhuǎn)圈顯示、進(jìn)度條)
這篇文章主要介紹了Python關(guān)于print的操作(倒計(jì)時(shí)、轉(zhuǎn)圈顯示、進(jìn)度條),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05python實(shí)現(xiàn)對(duì)excel進(jìn)行數(shù)據(jù)剔除操作實(shí)例
python在數(shù)據(jù)分析這方便的介紹應(yīng)該不用多說了,下面這篇文章主要給大家介紹了關(guān)于利用python實(shí)現(xiàn)對(duì)excel進(jìn)行數(shù)據(jù)剔除操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。2017-12-12Python利用wxPython制作股票價(jià)格查詢工具
在當(dāng)今信息時(shí)代,金融市場(chǎng)是一個(gè)引人注目的話題。本文將介紹如何使用 Yahoo Finance API、yfinance 模塊和 wxPython 庫(kù)來創(chuàng)建一個(gè)簡(jiǎn)單的全球股市實(shí)時(shí)價(jià)格查詢工具,希望大家能夠喜歡2023-05-05談?wù)勅绾问謩?dòng)釋放Python的內(nèi)存
Python不會(huì)自動(dòng)清理這些內(nèi)存,這篇文章主要介紹了談?wù)勅绾问謩?dòng)釋放Python的內(nèi)存,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-12-12