特定の平均と分散を満たすワイブル分布パラメーター(形状「k」とスケール「ラムダ」)を抽出しようとしています。この例では、平均は4、分散は8です。これは2つの未知数と2つの方程式のタイプの問題です。
このアルゴリズムはExcel2010のGRGソルバーで機能するため、問題をフレーミングする方法、または潜在的には使用しているライブラリに関するものであると確信しています。私は最適化ライブラリにあまり詳しくないので、エラーがどこにあるか教えてください。
以下はスクリプトです:
from scipy.optimize import fmin_cg
import math
def weibull_mu(k, lmda): #Formula can be found on wikipedia
return lmda*math.gamma(1+1/k)
def weibull_var(k, lmda): #Formula can be found on wikipedia
return lmda**2*math.gamma(1+2/k)-weibull_mu(k, lmda)**2
def min_function(arggs):
actual_mean = 4 # specific to this example
actual_var = 8 # specific to this example
k = arggs[0]
lmda = arggs[1]
output = [weibull_mu(k, lmda)-(var_wei)]
output.append(weibull_var(k, lmda)-(actual_var)**2-(actual_mean)**2)
return output
print fmin(min_function, [1,1])
このスクリプトにより、次のエラーが発生します。
[...]
File "C:\Program Files\Python27\lib\site-packages\scipy\optimize\optimize.py", line 278, in fmin
fsim[0] = func(x0)
ValueError: setting an array element with a sequence.