为什么使用scipy计算的函数的导数随参数dx的值而变化?

z9smfwbn  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(125)

我试着用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.8044625845spval=15154544286.133389。为什么会有这么大的偏差,如何才能确定哪个值是正确的?

qoefvg9y

qoefvg9y1#

至于文档,函数scipy.misc.derivative .
最终它是在计算

sum(weights[k]*f(x0+(k-order//2)*dx) for k in range(order))/dx**n

对于较小的值,它收敛于导数,但实际上,如果使用的值太小,舍入误差将占主导地位,因此,你必须找到一个合理的值dx为您的目的,而且,正如你已经知道,你可以计算符号的导数。

相关问题