新聞中心
python實現(xiàn)函數(shù)求導(dǎo)的方法是:1、利用sympy庫中的symbols方法傳入x和y變量;2、利用sympy庫中的diff函數(shù)傳入需要求導(dǎo)的函數(shù)即可返回求導(dǎo)之后的結(jié)果。
為儀征等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及儀征網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為做網(wǎng)站、網(wǎng)站設(shè)計、儀征網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
python利用sympy庫對某個函數(shù)求導(dǎo),numpy庫使用該求導(dǎo)結(jié)果計算的程序
在python數(shù)據(jù)處理過程中,我們經(jīng)常會遇見這樣一種情況。需要對一個函數(shù)表達式求偏導(dǎo),并將具體數(shù)值代入導(dǎo)數(shù)式。
而python中通??捎糜诤瘮?shù)求導(dǎo)的函數(shù)是sympy庫中的diff()函數(shù)。
但他通常所求得的導(dǎo)數(shù)只是一個符號表達式。不能直接帶入數(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
那么該如何解決這個問題呢?
對x,y使用evalf()函數(shù)分別賦值后,用float進行類型轉(zhuǎn)換后,才能利用numpy進行數(shù)值計算。
如下例:
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不是單一的值呢?而是一個數(shù)組。
我們可以利用一個循環(huán)來完成。
如下例:
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 = []#先定義一個用于存儲x偏導(dǎo)的空列表
temp_y = []#先定義一個用于存儲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)#將計算得到的偏導(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]
由此便實現(xiàn)了由sympy得到求導(dǎo)結(jié)果,到numpy庫進行數(shù)值計算。
本人還是python初學(xué)者,有什么錯誤懇請各位大佬及時指正~
學(xué)習(xí)路上共同進步~
推薦課程:Python3 Selenium3 自動化測試開發(fā)實戰(zhàn)
文章名稱:創(chuàng)新互聯(lián)Python教程:python怎么實現(xiàn)函數(shù)求導(dǎo)
URL地址:http://m.fisionsoft.com.cn/article/djdjpcj.html


咨詢
建站咨詢

