簡體   English   中英

生成 f 的導數的函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM