[英]A function generating the derivative of f
我正在嘗試構造一個函數,該函數返回f
的導數,一個變量的函數。
返回值應該是一個使用對稱差商逼近f'
導數的f'
,這樣返回的函數將計算(f(x+h) -f(xh))/2h.
該函數應該像這樣開始:
def derivative(f, x):
它應該近似函數 f 圍繞點 x 的導數。 有沒有人知道我可以使用什么類型的代碼來構造這種類型的函數?
/亞歷克斯
對於一般函數 f(x),您可以通過標准(二階)近似 (f(x+h) - f(xh)) /2h 直接獲得其一階導數的數值近似。 主要挑戰是選擇 h 與 f(x) 顯示非二次變化的 lenghscale 相比較小,但足夠大以避免在減去 f(x) 的附近值時出現舍入誤差。
但是,如果您想要一種對函數進行微分的代數方法,那么事情就更具挑戰性。 最簡單的情況是 f(x) 已知為多項式,因此可以用 x 的冪系數向量表示。 在這種情況下, numpy.polyder()可用於計算 n 次導數的系數。
對於更復雜的功能,您可能需要查看SymPy 。
numpy.polyder() 和 SymPy 選項都要求您以專用於這些特定工具的方式表示您的函數。 我不知道有任何方法可以采用普通的 Python 函數並構造另一個實現精確導數的函數。
你希望函數返回什么? 如果您想要某個 x 中的導數值,您可能需要三個參數:
def derivative(f, h, x):
return (f(x+h) - f(x-h))/2h
如果你想得到一個函數來計算上面的任何 x 你可以使用:
def derivative(f, h):
return lambda x: (f(x+h) - f(x-h))/2h
您最好的選擇可能是使用 SymPy,它可以進行符號集成和區分等:
>>> from sympy import *
>>> x, y, z = symbols('x y z')
>>> diff(x**2, x)
2*x
首先你可以定義一個函數 f(例如:f(x) = x ^ 2):
def f(x): return x ** 2
接下來使用導數的定義:
def derivative(function, x, accuracy = 20): # The 'Default' of accuracy is 20 and is an optional argument.
step = 1 / accuracy
return (function(x + step) - function(x - step)) / (step * 2)
~~~~~~~~~~~~~~~~~~~~~
順便說一句,我認為這是一個錯字:
def derivative(f, h):
由於您正在逼近函數 f圍繞點 x的導數,它應該是:
def derivative(f, x):
如我的代碼所示
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.