DMUG-Archiv 2003

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

Re: AW: FindMinimum und MathLink

Hallo,


> > und auf die Idee, das beim Minimieren ein *Gradient* berechnet
> > werden muss, was bei einer MathLink Funktion wohl
> > nicht geht ist man wohl nicht gekommen ??
> 
> Doch, aber das könnte ja auch über eine Finite Differenzen Approximation
> geschehen.

Ja aber dazu muss Mathematica wissen das es die Funktion nicht
analytisch
bearbeiten kann. Die von Dir verwendete Definition wird aber immer, auch
f"ur 
symbolische Argumente ausgewertet -- es geht daher also darum die
Auswertung *zuverhindern* und nicht sie, v"ollig nutzloser Weise, 
bei einer Funktion die ihre Argumente sowieso immer auswertet mit einem
Evaluate[] zu erzwingen.


> >
> > Was soll "uberhaupt der Return[]/Evaluate[] Unsinn (??)
> Damit wollte ich erzwingen, dass FindMinimum jedesmal, wenn es meine
> Mathlink-Routine aufruft, dieser einen numerischen Wert übergibt. Dahinter
> stand die "Hoffnung", dass FindMinimum eine numerische Approximation des
> Gradienten versucht.
> 
> > und schreibt man dumm im Module[] nicht mit zwei "m" ?
> 
> Wer aber ohne Fehl ist, ......
> 
> Wie wär es statt solcher Bemerkungen mit einem Tipp, wie ich das
> geschilderte Problem lösen könnte?


Leider kann ich auf diese Entfernungen nicht hellsehen.
Und bei Templates f"ur MathLink klappt das ganz schlecht...
Normalerweise w"urde man im Pattern des MathLink-Programmes
verhindern, das symbolische Argumente bis dorthin gelangen.
Also

:Begin:
:Function: foo
:Pattern: f[x_Real]
:Arguments: {x}
:ArgumentTypes: {Real}
:ReturnType: Real
:End:

Falls das *nicht* der Fall ist muss man

testf[x_?NumericQ] :=scalcml[N[x]]

 FindMinimum[testf[x], {x,-13.5, 13.5}]

eben die Auswertung verhindern ...

In diesem Fall sollte FindMimimum[] funktionieren, allerdings
mit *zwei* Start-Werten weil dann ein  Brent Verfahren verwendet
wird was ohne Ableitungen auskommt.

Und endliche Differenzen werden da nie genommen, weil ein
Brent-Verfahren
eine Parabel in die Kurve legt -- deshalb braucht es auch zwei Punkte
die das Minimum einschliessen, zusammen mit einem dritten Punkt wird
dann die Parabel approximiert und das Mimimum dieser Parabel weiter
verwendet.

Und wenn man schon mal dabei ist ein MathLink Programm zu verwenden,
dann ist es Unsinn das Minimum *nicht im C-Programm zu berechnen
denn der Protokoll-Overhead f"ur das Hin- und Herschicken von ein
Paar Real Variablen ist ziemlich gewaltig und solange man
bloss was eindimensionales will kann man einfach den C-Code
aus

http://lib-www.lanl.gov/numerical/bookcpdf/c10-2.pdf

mit copy/paste "ubernehmen. 

Gruss
  Jens


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

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