繁体   English   中英

使用python最大化多参数求和

[英]Maximize Multi-parameter summation with python

我正在尝试使用两成分混合的weibull分布拟合风数据集v=v1,.....,vm

我发现了一篇论文,建议使用“最大似然法”,尤其是最大化以下等式:

方程最大化

Omegaa1a2b1b2是我要更改的参数,以使函数最大化,并且v=v1,.....,vm是一系列已知的风速。

我一直在尝试使用SciPy最小化算法,但没有成功。

这是我到目前为止的内容:

def minimizer_function(v,omega,a1,b1,a2,b2):
   return np.reciprocal(np.sum((omega*(a1/b1)*((v/b1)**(a1-1))*(np.exp(-((v/b1)**a1)))+(1-omega)*(a2/b2)*((v/b2)**(a2-1))*(np.exp(-((v/b2)**a2))))))

x0 = np.array([0.5,1.0,1.0,1.0,1.0])
res = optimization.minimize(minimizer_function, x0, method='nelder-mead',options={'xtol': 1e-8, 'disp': True})

但是我继续收到以下错误:

minimalr_function()缺少5个必需的位置参数:“ omega”,“ a1”,“ b1”,“ a2”和“ b2”

我很确定我缺少什么。

scipy最小化器期望将变量存储在单个一维数组中。 在您的情况下,目标函数应类似于minimizer_function(x, v) ,其中x是包含omega,a1,b1,a2和b2的五个元素的数组。 也就是说,类似

def minimizer_function(x, v):
   omega, a1, b1, a2, b2 = x
   return np.reciprocal(np.sum((omega*(a1/b1)*((v/b1)**(a1-1))*(np.exp(-((v/b1)**a1)))+(1-omega)*(a2/b2)*((v/b2)**(a2-1))*(np.exp(-((v/b2)**a2))))))

minimize的呼唤就像

x0 = np.array([0.5,1.0,1.0,1.0,1.0])
res = optimization.minimize(minimizer_function, x0, args=(v,), method='nelder-mead',options={'xtol': 1e-8, 'disp': True})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM