【发布时间】:2019-08-26 10:34:20
【问题描述】:
一般:
我正在使用最大熵来查找正整数向量的分布,我可以估计均值和方差,并且我试图找到三个方程 a 和 b,
方程式:
integral(exp(a*x^2+bx+c) from (0 , infinity))-1
integral(xexp(ax^2+bx+c)from (0 , infinity))-均值
integral(x^2*exp(a*x^2+bx+c) from (0 , infinity))- mean^2 - var
([0,∞)之间的整数)
问题:
我正在尝试使用数值求解器,我使用了 sympy 的 fsolve 但我想我缺少一些知识。
我的代码:
import numpy as np
import sympy as sym
from scipy.optimize import *
def myFunction(x,*data):
y = sym.symbols('y')
m,v=data
F = [0]*3
x[0] = - abs(x[0])
print(x)
F[0] = (sym.integrate(sym.exp(x[0] * y ** 2 + x[1] * y + x[2]), (y, 0,sym.oo)) -1).evalf()
F[1] = (sym.integrate(y*sym.exp(x[0] * y ** 2 + x[1] * y + x[2]), (y, 0,sym.oo))-m).evalf()
F[2] = (sym.integrate((y**2)*sym.exp(x[0] * y ** 2 + x[1] * y + x[2]), (y,0,sym.oo)) -v-m).evalf()
print(F)
return F
data = (10,3.5) # mean and var for example
xGuess = [1, 1, 1]
z = fsolve(myFunction,xGuess,args = data)
print(z)
我的结果不太准确,有没有更好的解决方法?
积分(exp(a*x^2+bx+c))-1 = 5.67659292676884
积分(xexp(ax^2+bx+c))-均值 = -1.32123173796713
积分(x^2*exp(a*x^2+bx+c))-均值^2 - var = −2.20825624606312
谢谢
【问题讨论】:
-
这是Gaussian 分布吗?高斯公式(使用均值和方差)可以写成 exp(ax2 + bx +c),例如 a=-1/(2*sigma2) ...跨度>
-
您好,感谢您的回答,我编辑了积分边界从 0 到无穷大的问题
-
看看
scipy.optimize.minimize。如果您认为您的问题不是凸的,请查看global optimization 部分。
标签: python numpy entropy scipy-optimize