产生f的导数的函数

时间:2018-02-18 10:42:44

标签: python symbolic-math derivative calculus

我正在尝试构造一个函数,该函数返回f的派生,这是一个变量的函数。

返回值应该是一个近似f'导数的函数 使用对称差商,使返回的函数计算(f(x+h) -f(x-h))/2h.

该功能应该像这样开始:

def derivative(f, x):

应近似于x点附近的函数f的导数。 有没有人知道我可以用什么类型的代码构建这种类型的函数?

/亚历

4 个答案:

答案 0 :(得分:2)

对于一般函数f(x),您可以通过标准(二阶)近似(f(x + h) - f(x-h))/ 2h直接获得其一阶导数的数值近似。主要挑战是选择h与f(x)显示非二次变化的长度相比较小,但足够大以避免在减去附近的f(x)值时出现舍入误差。

但是,如果您想要一种区分功能的代数方法,那么事情就更具挑战性。容易的情况是f(x)已知为多项式,因此可以用x的幂系数向量表示。在这种情况下,numpy.polyder()可用于计算第n个导数的系数。

对于更复杂的功能,您可能需要查看SymPy

numpy.polyder()和SymPy选项都要求您以专门针对这些特定工​​具的方式表示您的函数。我不知道任何方法可以采用普通的Python函数并构造另一个实现精确派生的函数。

答案 1 :(得分:1)

你希望函数返回什么? 如果你想在某个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

答案 2 :(得分:1)

你最好的选择可能是使用SymPy,它可以进行符号整合和其他方面的差异:

>>> from sympy import *
>>> x, y, z = symbols('x y z')
>>> diff(x**2, x)
2*x

答案 3 :(得分:0)

首先你可以定义一个函数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):

由于你在x点附近逼近函数f 的导数,它应该是:

def derivative(f, x):

如我的代码所示