我正在尝试使用双组分混合威布尔分布拟合风数据集v=v1,.....,vm
。
我发现了一篇建议使用最大似然法的论文,特别是最大化以下等式:
Omega
,a1
,a2
,b1
和b2
是我想要更改的参数,以便最大化功能{{1} }是一系列已知的风速。
我一直在尝试使用SciPy最小化算法,但没有成功。
这是我到目前为止所做的:
v=v1,.....,vm
但是我继续收到以下错误:
minimizer_function()缺少5个必需的位置参数:' omega',' a1',' b1',' a2'和& #39; B2'
我很确定我错过了什么。
答案 0 :(得分:1)
scipy minimizers期望变量存储在单个一维数组中。在您的情况下,目标函数应该类似于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})