創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!
小編給大家分享一下python實(shí)現(xiàn)函數(shù)求導(dǎo)的方法,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
python實(shí)現(xiàn)函數(shù)求導(dǎo)的方法是:1、利用sympy庫(kù)中的symbols方法傳入x和y變量;2、利用sympy庫(kù)中的diff函數(shù)傳入需要求導(dǎo)的函數(shù)即可返回求導(dǎo)之后的結(jié)果。
python利用sympy庫(kù)對(duì)某個(gè)函數(shù)求導(dǎo),numpy庫(kù)使用該求導(dǎo)結(jié)果計(jì)算的程序
在python數(shù)據(jù)處理過(guò)程中,我們經(jīng)常會(huì)遇見(jiàn)這樣一種情況。需要對(duì)一個(gè)函數(shù)表達(dá)式求偏導(dǎo),并將具體數(shù)值代入導(dǎo)數(shù)式。
而python中通??捎糜诤瘮?shù)求導(dǎo)的函數(shù)是sympy庫(kù)中的diff()函數(shù)。
但他通常所求得的導(dǎo)數(shù)只是一個(gè)符號(hào)表達(dá)式。不能直接帶入數(shù)據(jù)使用。
如下例:
import sympy as sp import numpy as np x,y = sp.symbols('x y') z = sp.sin(2*sp.pi*x+2*y/5) zx = sp.diff(z,x) zy = sp.diff(z,y) print(zx) print(zy)
其輸出為:
2*pi*cos(2*pi*x + 2*y/5) 2*cos(2*pi*x + 2*y/5)/5
那么該如何解決這個(gè)問(wèn)題呢?
對(duì)x,y使用evalf()函數(shù)分別賦值后,用float進(jìn)行類型轉(zhuǎn)換后,才能利用numpy進(jìn)行數(shù)值計(jì)算。
如下例:
import sympy as sp import numpy as np x,y = sp.symbols('x y') z = sp.sin(2*sp.pi*x+2*y/5) zx = sp.diff(z,x) zy = sp.diff(z,y) x1 = 10 y1 = 5 z_x1 = float(zx.evalf(subs={x:x1,y:y1})) z_y1 = float(zy.evalf(subs={x:x1,y:y1})) print(z_x1) print(z_y1)
其輸出結(jié)果:
-2.61472768902227 -0.16645873461885696
那如果我的x或y不是單一的值呢?而是一個(gè)數(shù)組。
我們可以利用一個(gè)循環(huán)來(lái)完成。
如下例:
import sympy as sp import numpy as np x,y = sp.symbols('x y') z = sp.sin(2*sp.pi*x+2*y/5) zx = sp.diff(z,x) zy = sp.diff(z,y) x_array = np.linspace(-5, 5, 10) y_array = np.linspace(-5, 5, 10) temp_x = []#先定義一個(gè)用于存儲(chǔ)x偏導(dǎo)的空列表 temp_y = []#先定義一個(gè)用于存儲(chǔ)y偏導(dǎo)的空列表 for i in range(10): z_x = float(zx.evalf(subs={x:x_array[i],y:y_array[i]})) temp_x.append(z_x)#將計(jì)算得到的偏導(dǎo)值一一添加到列表中 z_y = float(zy.evalf(subs={x:x_array[i],y:y_array[i]})) temp_y.append(z_y) zx_array = np.array(temp_x)#將列表轉(zhuǎn)換為數(shù)組 zy_array = np.array(temp_y) print(zx_array) print(zy_array)
輸出結(jié)果為:
[-2.61472769 4.11163864 6.02946289 0.89585862 -5.2854481 -5.2854481 0.89585862 6.02946289 4.11163864 -2.61472769] [-0.16645873 0.26175505 0.38384753 0.05703213 -0.33648208 -0.33648208 0.05703213 0.38384753 0.26175505 -0.16645873]
由此便實(shí)現(xiàn)了由sympy得到求導(dǎo)結(jié)果,到numpy庫(kù)進(jìn)行數(shù)值計(jì)算。
看完了這篇文章,相信你對(duì)python實(shí)現(xiàn)函數(shù)求導(dǎo)的方法有了一定的了解,想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝各位的閱讀!
分享名稱:python實(shí)現(xiàn)函數(shù)求導(dǎo)的方法-創(chuàng)新互聯(lián)
分享網(wǎng)址:http://www.sd-ha.com/article5/dchsoi.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、微信小程序、品牌網(wǎng)站建設(shè)、網(wǎng)站改版、營(yíng)銷型網(wǎng)站建設(shè)、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容