我正在尝试构造一个函数,该函数返回f
的派生,这是一个变量的函数。
返回值应该是一个近似f'
导数的函数
使用对称差商,使返回的函数计算(f(x+h) -f(x-h))/2h.
该功能应该像这样开始:
def derivative(f, x):
应近似于x点附近的函数f的导数。 有没有人知道我可以用什么类型的代码构建这种类型的函数?
/亚历
答案 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):
如我的代码所示