python求导函数的值_python怎么实现函数求导
python實現函數求導的方法是:1、利用sympy庫中的symbols方法傳入x和y變量;2、利用sympy庫中的diff函數傳入需要求導的函數即可返回求導之后的結果。
python利用sympy庫對某個函數求導,numpy庫使用該求導結果計算的程序
在python數據處理過程中,我們經常會遇見這樣一種情況。需要對一個函數表達式求偏導,并將具體數值代入導數式。
而python中通常可用于函數求導的函數是sympy庫中的diff()函數。
但他通常所求得的導數只是一個符號表達式。不能直接帶入數據使用。
如下例: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()函數分別賦值后,用float進行類型轉換后,才能利用numpy進行數值計算。
如下例: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)
其輸出結果:-2.61472768902227
-0.16645873461885696
那如果我的x或y不是單一的值呢?而是一個數組。
我們可以利用一個循環來完成。
如下例: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偏導的空列表
temp_y?=?[]#先定義一個用于存儲y偏導的空列表
for?i?in?range(10):
z_x?=?float(zx.evalf(subs={x:x_array[i],y:y_array[i]}))
temp_x.append(z_x)#將計算得到的偏導值一一添加到列表中
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)#將列表轉換為數組
zy_array?=?np.array(temp_y)
print(zx_array)
print(zy_array)
輸出結果為:[-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]
由此便實現了由sympy得到求導結果,到numpy庫進行數值計算。
本人還是python初學者,有什么錯誤懇請各位大佬及時指正~
學習路上共同進步~推薦課程:Python3 Selenium3 自動化測試開發實戰
總結
以上是生活随笔為你收集整理的python求导函数的值_python怎么实现函数求导的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 批量提取文件创建时间_不要眨眼!批量提取
- 下一篇: python时间函数报错_Python