DMUG-Archiv 2008

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

Re: Minimierung multidimensionaler Funktionen

Hallo Martin,

ich möchte eine Funktion, die von fünf Variablen abhängt und den Wert
eines numerischen Integrals zurückliefert, minimieren und hatte gehofft,
hierzu den Befehl FindMinimum verwenden zu können (siehe
Mathematica-file "Minimization Problem.nb" im Anhang). Leider ist dem
wohl nicht so, ich bekomme eine Fehlermeldung, die sich wohl auf den
internen Programmablauf von FindMinimum bezieht.

.. wenn es nicht nachvollziehbar ist, kann man's debuggen: Bevor FindMinimum[{FunctionToMinimize[aa, bb, cc, dd, ee], <snip>}, <snip>] aufgerufen wird, Evaluation -> Debugger wählen, dann gibt's ein Fenster Breakpoints, ein Fenster Stack und ein Fenster mit Steuerelementen; im Fenster Breakpoints tippt man unter message breakpoints die SparseArray::posd Meldung ein und los geht's ... der Stackframe enthält dann tausende von Zeilen der Art

<snip>

\!\(\*FrameBox[
RowBox[{"getInitialPoint", "[",
RowBox[{"parms$360", ",",
RowBox[{"{",
RowBox[{
RowBox[{"-", "12.5`"}], ",",
RowBox[{"-", "6.5`"}], ",",
RowBox[{"-", "3.`"}], ",", "2.5`", ",", "3.5`"}], "}"}], ",",
   "problem$360", ",", "scaling$360"}], "]"}]]\)

<snip>

man kann auf den Linksrechtsdoppelpfeil klicken, um die RowBoxes vom Short- auf den Komplettmodus umzustellen. Jedenfalls hat Mma die Kette

Diag$369=SparseArray[{LorU$369->Table[ONE,{Length[LorU$369]}]},{n,n}]
SparseArray[{LorU$369->Table[ONE,{Length[LorU$369]}]},{n,n}]
SparseArray[{{{1,1},{2,2},{3,3},{4,4},{5,5}}->{1,1,1,1,1}},{2,2}]

im Stack, deren letztes Kommando falsch ist. Den Wert n bekommt es von einer Zeile

{f$369, n, meqs$369, eqs$369, mineqs$369, ineqs$369, lb$369, ub$369,
   vartypes$369, lvars$369, uvars$369, luvars$369, lv$369, uv$369,
   freevars$369, freesplitvars$369, fval$369, eqsval$369,
   ineqsval$369} = problem$360;

n ist dort der zweite Parameter und das problem$360 kann man identifizieren als

{
 {Optimization`NonlinearInteriorPointDump`problem, {\!\(\*
     TagBox[
      RowBox[{"Experimental`NumericalFunction", "[",
       RowBox[{
        RowBox[{"{",
         RowBox[{"aa", ",", "bb", ",", "cc", ",", "dd", ",", "ee"}],
         "}"}], ",",
        RowBox[{"FunctionToMinimize", "[",
         RowBox[{"aa", ",", "bb", ",", "cc", ",", "dd", ",", "ee"}],
         "]"}], ",", "\<\"-NumericalFunctionData-\"\>"}], "]"}],
      False,
      Editable->False]\), 5, 0,
   Optimization`NonlinearInteriorPointDump`eqs$360, 0,
   Optimization`NonlinearInteriorPointDump`ineqs$360, {-12.5, -6.5, \
-3., 2.5, 3.5}, {-7.5, -3.5, -1., 3.5, 4.5}, {3, 3, 3, 3,
    3}, {}, {}, {1, 2, 3, 4, 5}, {1, 2, 3, 4, 5}, {1, 2, 3, 4,
    5}, {}, {}, None, None, None}}
}

der zweite Parameter ist dort noch 5, wenn SparseArray[] gerufen wird, dann ist n bereits gleich 2. So what? How would you call it?

Das n wird in dem o.g. Module anscheinend nicht lokalisiert. Wenn anderswo im Verlauf ebenfalls ein nicht lokalisiertes n verwendet und modifiziert wird, dann fliegen die Fetzen. Vielleicht gelingt es Ihnen, anhand des Stackframe die Stelle mit Hilfe eines Watchpoints zu finden und WRI einen bug report zu schicken.

Mit den besten Grüssen
Udo.

--
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/


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

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