首页 > 解决方案 > Sympy:如何计算平方符号的导数

问题描述

我想计算正态分布变化的导数。所有这些都是为了使用最大似然法了解变异的估计量。那是我的代码。

import numpy as np
import sympy as sym

from sympy.solvers import solve

from sympy import Product, Function, oo, IndexedBase, diff, Eq, symbols, Sum, factorial, E, sqrt, pi, exp


x = IndexedBase('x')
i = symbols('i', positive=True)
n = symbols('n', positive=True)
s = symbols('s') # s = standard deviation
m = symbols('m') # m = expected value

def var(): # var = variance (function var() has been created as variance depends on standard deviation)
    return s*s

formula = (1/(s*sqrt(2*pi)))*exp((-1/2)*((x[i]-m)**2/(var())))

涵盖正态分布外观的概率质量函数和正态分布外观 的最大似然函数的 公式

下面是计算这个估计量的函数。

def Maximum_Likelihood(param, pmf): # probability mass function, param - parameter for which I want to get estimator
    
    i = symbols('i', positive=True)
    n = symbols('n', positive=True)
    
    Likelihood_function = Product(pmf, (i, 1, n)) 
    
    deriv = diff(Likelihood_function, param) # the problem is here with .diff()
    equation_to_solve = Eq(deriv,0).doit()
    
    return solve(equation_to_solve, param)

当我为参数执行上述函数时:

param = var()
pmf = formula
Maximum_Likelihood(param, pmf)

我收到: ValueError:无法计算 s**2 的导数。

我知道.diff() 无法计算非符号的导数,但我希望存在解决此问题的方法。

谢谢!

标签: pythonstatisticsdata-sciencesympy

解决方案


推荐阅读