我试着用sympy和scipy计算一个函数的导数值。用scipy计算的值随着参数dx的值的变化而变化。代码如下所示
import sympy as smp
import numpy as np
import scipy as sp
x=smp.symbols('x',real=True)
f=smp.exp(-smp.sin(x**2))*smp.sin(2**x)*smp.log(3*smp.sin(x)**2/x)
smpval=smp.diff(f,x,4).subs([(x,4)]).evalf()
def f(x):
return sp.exp(-sp.sin(x**2))*sp.sin(2**x)*sp.log(3*sp.sin(x)**2/x)
from scipy.misc import derivative
spval=derivative(f, x0=4,dx=1e-6,n=4,order=5)
print(smpval)
print(spval)
我得到的值是smpval=-73035.8044625845和spval=15154544286.133389。为什么会有这么大的偏差,如何才能确定哪个值是正确的?
1条答案
按热度按时间qoefvg9y1#
至于文档,函数scipy.misc.derivative .
最终它是在计算
对于较小的值,它收敛于导数,但实际上,如果使用的值太小,舍入误差将占主导地位,因此,你必须找到一个合理的值
dx
为您的目的,而且,正如你已经知道,你可以计算符号的导数。