2009-10-05 51 views
5

Mathematicaを使用して、BinCountsで定義された関数を最適化する必要があります。 私が最大化したい引数は、ビンのカットポイントを定義します。Mathematicaによる最適化:目的関数でのBinCountの使用

私はそうBinCountsはインフィニティ、ビンの仕様は「本当の値を含む リストではないと文句を言い、問題は、彼らが 値の数値が与えられている前に、Mathematicaは、引数の面で目的関数 を展開していることだと思うし、 「無限大」

私は と何が起こっているのかの種類の最小の例だと思います。 この問題を解決するには、アドバイスをいただきありがとうございます。

In[1]:= data = RandomReal[1, 30]; (* Make some test data. *) 

In[2]:= f[a_, b_, c_] := BinCounts[data, {{0, a, b, c, 1}}] (* Shorthand to use below… *) 

In[12]:= g[a_, b_, c_] := Max[f[a, b, c]] - Min[f[a, b, c]] (* Objective function. *) 

In[13]:= NMaximize[{g[a, b, c], 0 < a < b < c < 1}, {a, b, c}] (* Try to oprimize. *) 

During evaluation of In[13]:= BinCounts::cvals: The bin specification {{0,a,b,c,1}} is not a list containing real values, Infinity, and -Infinity. >> 

During evaluation of In[13]:= BinCounts::cvals: The bin specification {{0,a,b,c,1}} is not a list containing real values, Infinity, and -Infinity. >> 

During evaluation of In[13]:= BinCounts::cvals: The bin specification {{0,a,b,c,1}} is not a list containing real values, Infinity, and -Infinity. >> 

During evaluation of In[13]:= General::stop: Further output of BinCounts::cvals will be suppressed during this calculation. >> 

Out[13]= {0., {a -> 0., b -> 0., c -> 1.}} 

答えて

3

溶液は、目的関数がそのようにように、唯一の数値引数で定義されるように指定するだけである。

g[a_?NumericQ, b_?NumericQ, c_?NumericQ] := Max[f[a, b, c]] - Min[f[a, b, c]] 
関連する問題