您好,登錄后才能下訂單哦!
小編給大家分享一下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實現函數求導的方法有了一定的了解,想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。