一般的:
我正在使用最大熵来查找正整数向量的分布,我可以估计均值和方差,并尝试找到三个方程 a 和 b,
方程:
积分(exp(a*x^2+bx+c) from (0 , infinity))-1
积分(x exp(a x^2+bx+c)from (0 , infinity))- 均值
积分(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
积分(x exp(a x^2+bx+c))- 均值 = −1.32123173796713
积分(x^2*exp(a*x^2+bx+c))- 平均^2 - var = −2.20825624606312
谢谢