日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

怎么求导来着?别费劲了,试试这个Python的通用求导法

發布時間:2024/9/15 python 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 怎么求导来着?别费劲了,试试这个Python的通用求导法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天的CSDN問答專欄里出現了一個實戰中遇到的問題:現有兩組數據,一組是時間序列,一組是對應時間序列的旋轉角度,請問怎樣計算某一時刻的角速度呢?

時間(s)角度(°)
1927.085
19310.497
19414.019
19517.683
19621.487
19725.403
19829.402
19933.467

顯然,這是一個求導即可解決的問題。如果將時間記作t,將旋轉角度記作θ,那么θ就是t的函數:

對上式求導,就得到角速度v對時間t的函數:

通常,我們把第1個公式叫做原函數,把第2個公式叫做導函數。有了原函數,利用六大基本初等函數的求導公式,或者應用復合函數求導法則,一般都可以得到導函數。

然而,本問題的原函數f(t)在哪里呢?我們手頭有的,不過是兩組離散的測量數據而已。漫說f(t)不見蹤影,就算f(t)已經存在,倘若不是基本初等函數的話,恐怕大多數程序員也早已忘記如何求導了吧?

看起來真的是山窮水盡無從下手了。不過呢,不用擔心,今天推薦一個通用的求導方法,可以幫助程序員徹底擺脫求導的困惑。這個通用方法有兩個步驟:第一步是通過離散數據找到原函數,第二步是不依賴于求導公式和技巧就可以得到導函數,無論原函數有多么復雜。

1. 尋找原函數

從兩組離散數據中找到它們之間的內在關系,是一個回歸問題,而數據插值就是對回歸函數的應用。這啟發了我從scipy的插值問題中尋找回歸函數。為了使方法更具通用性,下面的代碼用自變量x代替時間t,用因變量y代替旋轉角度θ,借助scipy模塊的一維插值函數interp1d,輕松得到了本文開始給出的兩組數據間隱含的函數關系。

>>>?import?numpy?as?np >>>?from?scipy?import?interpolate >>>?_x?=?np.linspace(192,199,8) >>>?_y?=?np.array([7.085,10.497,14.019,17.683,21.487,25.403,29.402,33.467]) >>>?f?=?interpolate.interp1d(_x,?_y,?kind='cubic')

這段代碼最后得到的f,就是旋轉角度對于時間的函數,自變量的值域范圍限定在原始的時間數據的變化范圍內。現在我們可以用它來計算192~199范圍內任意時刻的旋轉角度了。

>>>?f(193.3) array(11.54026091) >>>?f(193.35) array(11.71517478) >>>?f(193.351) array(11.71867619)

分別輸入193.3、193.35、193.351等時刻,簡單測試了一下,看上去還都挺象那么回事兒。

2. 求解導函數

原函數找是找到了,卻猶抱琵琶半遮面,究竟什么模樣,我們還是不得而知。沒關系,下面這個通用的求導方法根本不在意原函數長什么樣,只要原函數是真實存在的,就足夠了。這個方法的原理,就是令自變量x在某處有一個極小的增量dx,將因變量y的增量dy與dx之比近似視為函數在該處的導數。這里默認dx=1.0X10的-10次方,如有必要,還可以將其設置為更小的數值。

>>>?def?get_derivative(f,?delta=1e-10):"""導函數生成器"""def?derivative(x):"""導函數"""return?(f(x+delta)-f(x))/deltareturn?derivative

這不是一個閉包函數嗎?熟悉閉包的讀者一眼就會看出來。沒錯,導函數生成器就是一個閉包函數,只要告訴它原函數,它就返回對應的導函數。用剛才得到的旋轉角度關于時間的原函數來測試一下,輕松得到其導函數,也就是旋轉角速度關于時間的函數。

>>>?fd?=?get_derivative(f)

用這個導函數計算一下193.5和195.8兩個時刻的角速度:

>>>?fd(193.5) 3.590830143540664 >>>?fd(195.8) 3.8961776076555026

至此,問題得解。

各位伙伴們好,詹帥本帥搭建了一個個人博客和小程序,匯集各種干貨和資源,也方便大家閱讀,感興趣的小伙伴請移步小程序體驗一下哦!(歡迎提建議)

推薦閱讀

牛逼!Python常用數據類型的基本操作(長文系列第①篇)

牛逼!Python的判斷、循環和各種表達式(長文系列第②篇)

牛逼!Python函數和文件操作(長文系列第③篇)

牛逼!Python錯誤、異常和模塊(長文系列第④篇)

總結

以上是生活随笔為你收集整理的怎么求导来着?别费劲了,试试这个Python的通用求导法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。