DMUG-Archiv 2004

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

Re: FindMinimum mit selbstdefinierten Funktionen

Hallo,

vielleicht l"ost Du erst mal das Problem, heraus zu finden,
das FindMinimum[] eine Zielfunktion mit einem *skalaren*
Ergebnis minimiert. Du aber aus LinearProgramming[] 
und damit aus f[] einen Vektor
erh"altst, zu dessen Komponeten dann noch ein paar Skalare in g[]
addiert werden. Also g[] eine Liste mit zwei Komponeten zur"uckliefert.

Wenn Du dieses Problem gel"ost hast, dann wird es richtig
kompliziert. Dann muss man n"amlich die Fehlerausschrift
lesen, da steht

> FindMinimum::fmgs: Could not symbolically find the gradient of \
> g[{x$340,x$341}]. Try using the default method, giving two starting values \
> for each variable.

Es w"are also angebracht *ein Intervall* f"ur die Variablen anzugeben 
statt eines einzelnen Wertes. Bei einem Wert *muss* man n"amlich den
Gradienten
bilden sonst weiss man ja nicht wo es bergab geht ...

Wenn numerisch ein Minimum gesucht wird dann kann man erwarten,
das "numerisch ein Minimum" gesucht wird, man kann nicht erwarten
das numerisch ein Gradient gebildet wird. Wenn man das machen will
dann kann man ja immer noch die Gradient Option von FindMinimum[]
verwenden.

Ansonsten solltes Du die Finger von Code lassen, den Du nicht verstehst
und Dir FunctionalFindMinimum[] g"anzlich sparen denn es sollte
wenigstens

FunctionalFindMinimum[f_, 
      start_List] := (# /. 
            Last[FindMinimum[f @@ #, 
                Evaluate[Sequence @@ (Transpose[{#, start}])]]]) &[
      Unique[x] & /@ start];

heissen, oder Du "anderst die Definition von f[] in

f[{x_,y_}]:= ..

Gruss
  Jens



andreas tanner wrote:
> 
> Hallo Liste,
> 
> wieso geht folgendes nicht (Mathematica 4.2):
> 
> f[x_, y_] := LinearProgramming[{x + y, x - y}, {{}}, {}, {{0, 1}, {2, 3}}];
> g[a_, b_] := a + b + f[a + b, a - b];
> 
> FunctionalFindMinimum[f_, start_List] := (# /. Last[
>      FindMinimum[f[#], Evaluate[Sequence @@ (
>            Transpose[{#, start}])]]]) &[Unique[x] & /@ start];
> 
> FunctionalFindMinimum[g, {0.1, 0.1}]
> 
> ergibt
> 
> FindMinimum::fmgs: Could not symbolically find the gradient of \
> g[{x$340,x$341}]. Try using the default method, giving two starting values \
> for each variable.
> 
> ReplaceAll::reps: {{x$341,0.1}} is neither a list of replacement rules
> nor a \
> valid dispatch table, and so cannot be used for replacing.
> 
> Die Definition von FunctionalFindMinimum habe ich ergoogelt, ein
> einfaches FindMinimum funktioniert auch nicht.
> 
> In Wirklichkeit ist natürlich das Problem, das ich lösen möchte,
> komplexer, er lässt sich aber allgemein als Verkettung von
> LinearProgramming und FindMinimum darstellen.
> 
> Ich verstehe nicht, warum Mathematica den Gradienten symbolisch
> bestimmen möchte, aus der Dokumentation erwarte ich, dass numerisch ein
> Minimum gesucht wird?
> 
> Dankbar für Hinweise
> 
> Andreas Tanner.
> 
> --
> Intelligente Netze und Management verteilter Systeme
> TU Berlin
> Fakultät 4, Sekretariat EN 6
> Einsteinufer 17
> D-10587 Berlin
> Tel. +49 30 314 79835 Fax +49 30 314 24573
> http://www.ivs.tu-berlin.de


Antworten:
Verweise:
Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

DMUG DMUG-Archiv, http://www.mathematica.ch/archiv.html