如何解决使用 scipy.misc.derivative 找到函数的导数
我遇到了一个问题,即函数及其导数应该具有相同的值。 函数是 y=e^x 所以它的导数应该是一样的 y'=e^x 但是当我用 scipy 做到这一点时:
from scipy.misc import derivative
from math import *
def f(x):
return exp(x)
def df(x):
return derivative(f,x)
print(f(1))
print(df(1))
它将打印不同的值 f(1) = 2.178 ... df(1) = 3.194 ... 所以这意味着,e 具有不同的值。 谁能解释一下以及如何解决它?
解决方法
derivative
函数还有其他参数。来自help(derivative)
:
Parameters
----------
func : function
Input function.
x0 : float
The point at which the nth derivative is found.
dx : float,optional
Spacing.
n : int,optional
Order of the derivative. Default is 1.
args : tuple,optional
Arguments
order : int,optional
Number of points to use,must be odd.
如您所见,您没有指定 dx
参数,因此这会导致舍入错误,因为近似导数是在更大的间隔上计算的。从文档中,默认值为 1 (https://docs.scipy.org/doc/scipy/reference/generated/scipy.misc.derivative.html)。
简单地尝试减少间距间隔:例如,使用1e-3
我得到:
2.718281828459045
2.718282281505724
,
正如@SevC_10 在他的回答中指出的那样,您缺少 dx 参数。
我喜欢展示使用 sympy 进行派生操作的案例,我发现在很多情况下它更容易。
import sympy
import numpy as np
x = sympy.Symbol('x')
f = sympy.exp(x) # my function e^x
df = f.diff() # y' of the function = e^x
f_lambda = sympy.lambdify(x,f,'numpy')
df_lambda = sympy.lambdify(x,yprime,'numpy') # use lambdify
print(f_lambda(np.ones(5)))
# array([2.71828183,2.71828183,2.71828183])
print(df_lambda(np.ones(5)))
# array([2.71828183,2.71828183])
print(f_lambda(np.zeros(5)))
# array([1.,1.,1.])
print(df_lambda(np.zeros(5)))
# array([1.,1.])
print(f_lambda(np.array([0,1,2,3,4])))
# array([ 1.,7.3890561,20.08553692,54.59815003])
print(df_lambda(np.array([0,54.59815003])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。