到目前为止,这是我的代码,我认为我可以使用scipy,但是它不能为二阶导数moment(0,2)提供正确的答案。我的猜测是我没有正确应用scipy.misc.derivative,我应该使用sympy的diffs_exp,但是我也无法使用它。

from scipy import misc
import numpy as np

def mgf(s):
    mu = 2
    sigma = 0.5
    mgf = np.exp(mu*s + ((sigma**2)*(s**2))/2)
    return mgf

def moment(s, i):
    mo = misc.derivative(mgf, s, dx=0.000000001, n=i)
    return mo


当i = 1时,矩(s,i)正确评估,但当i> 1时,矩不正确。 moment(0,2)应该等于sigma ^ 2或.25,但函数当前返回0.0

仅当s = 0时才评估函数,更重要的是微分是正确的。

最佳答案

这是使用sympy象征性地进行操作并以数值方式评估特定musigmas的结果的方法

In [1]: from sympy import *

In [2]: mu, sigma, s = symbols("mu sigma s")

In [3]: expr = exp(mu*s+(sigma*s)**2/2)

In [4]: f = lambdify((mu, sigma, s), expr.diff(s, 2))

In [5]: f(2, 0.5, 0)
Out[5]: 4.25

关于python - 如何在python中计算矩生成函数的导数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31300686/

10-13 07:23