2009-10-05 8 views
5

Mit Mathematica muss ich eine Funktion optimieren, die in BinCounts definiert ist; Die Argumente, die ich maximieren möchte, definieren die Bin-Cutpoints.Optimierung mit Mathematica: Verwenden Sie BinCounts in Zielfunktion

ich glaube, das Problem ist, dass Mathematica die Zielfunktion in Bezug auf die Argumente erweitert, bevor sie Werte numerische gegeben wurden, so BinCounts beklagt, dass der Behälter Spezifikation nicht „eine Liste ist reale Werte, Unendlichkeit enthält, und -Unendlichkeit".

Ich denke, das folgende ist ein minimales Beispiel für die Art von Dingen, die ich versuche zu tun und was passiert ist. Ich wäre sehr dankbar für einen Hinweis auf , wie Sie dieses Problem angehen.

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

Antwort

3

Die Lösung ist einfach, um anzugeben, dass die Zielfunktion nur in Bezug auf numerische Argumente definiert ist, wie folgt:

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