首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用scipy.misc.derivative求函数的导数

用scipy.misc.derivative求函数的导数
EN

Stack Overflow用户
提问于 2021-02-24 15:26:32
回答 2查看 175关注 0票数 0

我遇到了一个问题,函数和它的导数应该有相同的值。这个函数是y=e^x的,所以它的导数应该是y'=e^x,但是当我用scipy来做的时候:

代码语言:javascript
复制
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有不同的值。有谁能解释一下这一点,以及如何修复它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-24 15:47:41

正如@SevC_10在他的回答中指出的那样,您缺少dx参数。

我喜欢向案例展示派生操作的渐近使用,我发现在许多情况下它要容易得多。

代码语言:javascript
复制
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, 2.71828183, 2.71828183])

print(df_lambda(np.ones(5)))

# array([2.71828183, 2.71828183, 2.71828183, 2.71828183, 2.71828183])

print(f_lambda(np.zeros(5)))

# array([1., 1., 1., 1., 1.])

print(df_lambda(np.zeros(5)))

# array([1., 1., 1., 1., 1.])


print(f_lambda(np.array([0, 1, 2, 3, 4])))
# array([ 1.        ,  2.71828183,  7.3890561 , 20.08553692, 54.59815003])

print(df_lambda(np.array([0, 1, 2, 3, 4])))
# array([ 1.        ,  2.71828183,  7.3890561 , 20.08553692, 54.59815003])
票数 2
EN

Stack Overflow用户

发布于 2021-02-24 15:40:05

derivative函数还有其他参数。从help(derivative)

代码语言:javascript
复制
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 I get:

代码语言:javascript
复制
2.718281828459045
2.718282281505724
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66346408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档