Liebe Mathematica Spezialisten,
mir liegt folgendes Problem auf:
Die Funktion NIntegrate ist in der Lage, eine Funktion func[a,b] so
abzuarbeiten, daß zuerst die numerischen Werte in die Argumente
eingesetzt werden, und danach die Funktion evaluiert wird.
Es sei
func=Compile[{{a,_Real,1},{b,_Real,1}},Plus@@Flatten[Outer[Times,a,b]]]
eine compilierte Function mit vektoriellen Argumenten.
a und b werden z.B. definiert nach
a={c,d};b={e,f}
für die Werte c bis d gibt es eine Werteanweisung entsprechend
rpl={c->1.,d->2.,e->3.,f->4.}.
Mit NIntegrate kann ich die Funktion so aufrufen, daß zuerst die
Argumente, dann die Funktion evaluiert werden.
NIntegrate[func[a, b], {c, 0, 1}, {d, 0, 1}, {e, 0, 1}, {f, 0, 1}]
Ergebnis: 1.
Keine Fehlermeldung!
Ich möchte nun eine Funktion test erzeugen, die in Bezug auf den
Funktionsaufruf dasselbe leistet.
test[model_, parsNum_, pars_] :=
Module[{rpl},
rpl = MapThread[Rule, {pars, parsNum}];
model /. rpl
]
Der Aufruf
test[func[a, b], {1, 2, 3, 4}, {c, d, e, f}]
ergibt jedoch einen Error, weil die complilierte Funktion zuerst die
Variablen anstelle der Werte bekommt.
Mir ist bisher keine Möglichkeit bekannt, die Auswertereihenfolge
herumzudrehen. Auch mit HoldForm und ähnlichen Tricks habe ich es nicht
geschafft.
Ich würde mich freuen, wenn mir jemand den Trick verraten könnte. Es muß
gehen, da NIntegrate es ja schafft.
Herzlichen Dank
Wolfgang Ludwig
=======================================
Dr. W. Ludwig
STL Systremtechnik Ludwig GmbH
Max-Stromeyerstr. 116
D-78467 Konstanz
+49-7531-892888-0
+49-7531-892888-88 Fax
=======================================