我遇到了一个问题,函数和它的导数应该有相同的值。这个函数是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有不同的值。有谁能解释一下这一点,以及如何修复它?
发布于 2021-02-24 15:47:41
正如@SevC_10在他的回答中指出的那样,您缺少dx参数。
我喜欢向案例展示派生操作的渐近使用,我发现在许多情况下它要容易得多。
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])发布于 2021-02-24 15:40:05
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 I get:
2.718281828459045
2.718282281505724https://stackoverflow.com/questions/66346408
复制相似问题