2009-10-05 6 views
5

Korzystając z Mathematica, potrzebuję zoptymalizować funkcję zdefiniowaną pod kątem BinCounts; argumenty, które chcę zmaksymalizować nad zdefiniować punkty odcięcia bin.Optymalizacja z Mathematica: Użyj BinCounts w Objective Function

Myślę, że problemem jest to, że Mathematica rozszerza funkcję celu pod względem argumentów, zanim zostały one podane numeryczna wartości, więc BinCounts skarży się, że specyfikacja bin nie jest”lista zawierający wartości rzeczywiste, nieskończoność, a -Nieskończoność".

Myślę, że poniższy przykład to minimalny przykład tego, co robię, próbuję zrobić i co się dzieje. Byłbym bardzo wdzięczny za porady dotyczące , jak rozwiązać ten problem.

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.}} 

Odpowiedz

3

Rozwiązaniem jest po prostu określić, że funkcja celu jest określona wyłącznie w kategoriach argumentów liczbowych, tak:

g[a_?NumericQ, b_?NumericQ, c_?NumericQ] := Max[f[a, b, c]] - Min[f[a, b, c]]