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/