如何得到python中的数值导数函数?

How to get a numeric derivative function in python?

我想知道如何得到Python中的导数函数来组成泰勒级数。 我知道获得衍生品的各种方法。 以下列方式使用 SymPy 库的符号:

x = sy.Symbol('x')
y = 3*x**2 + 4*x**3
y.diff(x)

结果我得到了一个新函数,但是我不能用这个函数做任何事情。

第二种方式是通过以下方式区分使用scipy库:

def f(x):
    return 3*x**2 + 4*x**3
sc.derivative(f, 2)

但是它计算的是某个点的导数

但只需要得到另一个函数 f',它是 f 的导数。

有谁知道如何解决吗?

非常感谢。

你问的不是很清楚。然而,在这种情况下澄清问题的最简单方法似乎是提出解决方案。

考虑

from scipy.misc import derivative

def f(x):
    return 3*x**2 + 4*x**3

fprime = lambda x : derivative(f, x, dx=1e-6)
print(fprime(2))

Returns

60.000000004833964

这是一个数值导数。然后,您可以重复该过程以获得对应于高阶导数的函数,并使用所有这些在特定点评估您的泰勒级数。

使用 evalf()

from sympy import *
x = Symbol('x')
y = 3*x**2 + 4*x**3
t = y.diff(x)
print(t.evalf(subs={x: 2}))

结果:

t = y.diff(x)

t = 12 * (x**2) + (6*x)

t.evalf(subs={x: 2})

t(at x =2) : 60

只需将导数分配给一个变量,然后在您想要使用导数的地方使用该变量。采用方程的牛顿-拉夫森形式:f(x) = f(x0) + (x - x0)/f'(x0)。我们需要 f(x)。我们称它为 fx:

>>> fx = 3*x**2 + 4*x**3

我们需要导数。称它为 f1x:

>>> f1x = fx.diff(x)

假设 f(x) = 0 我们从 x0 计算 xx = x0 - f(x0)/f'(x0)。我们将 x xnewx0 称为 x:

>>> xnew = x - fx/f1x; xnew
x - (4*x**3 + 3*x**2)/(12*x**2 + 6*x)

要从 x = 1 计算 xnew,您可以使用替换(使用整数时)或使用替换求值以在使用浮点数时更好地保持准确性)

>>> xnew.subs(x, 1)
>>> xnew.subs(x,1)
11/18
>>> xnew.n(subs={x:1})
0.611111111111111

如果使用 f(x) 表单让您感觉更好,您可以按以下方式做同样的事情(这里我只展示步骤):

>>> f = Lambda(x, 3*x**2 + 4*x**3)
>>> f1 = Lambda(x, f(x).diff(x))
>>> xnew = x - f(x)/f1(x); xnew
x - (4*x**3 + 3*x**2)/(12*x**2 + 6*x)
>>> xnew.subs(x, 1)
11/18

在任何一种情况下,注意不要将 x 用作 SymPy 符号 x 以外的任何变量的 Python。如果你这样做,你将失去(暂时的,也许是神秘的,如果你是 Python/SymPy 的新手)你用 x:

重建 f(x) 的能力
>>> f(x)
4*x**3 + 3*x**2
>>> x = 2
>>> f(x)  # now interpreted as f(2)
44

糟糕!让我们 x 再次指向一个 Symbol

>>>> from sympy.abc import x
>>> f(x)
4*x**3 + 3*x**2

注意:如果您希望同时使用多个导数,您可以将它们存储在一个列表中并按导数的顺序访问它们:

>>> deriv = [f(x).diff(x, i) for i in range(4)]
>>> deriv[2]
6*(4*x + 1)