Mehrdim. Nullstellensuche < Nichtlineare Gleich. < Numerik < Hochschule < Mathe < Vorhilfe
|
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
Hallo,
ich muss die Nullstellen einer nicht lin. Vektorfunktion möglichst schnell finden. Für meine Funktion kann ich den Gradienten nur aufwendig numerisch berchnen.
Die beste Methode die ich gefunden habe ist die Methode von Broyden (http://en.wikipedia.org/wiki/Broyden%27s_method). Die ist soweit ganz gut aber ich will wissen ob es noch etwas besseres gibt.
Verstehe ich das richtig das ich für die anderen Quasi-Newton Methoden wie BFGS, DFP und SR1 immer den Gradinenten brauche? Oder gibt es hier ein Trick? Bzw. das ich hier Äpfel mit Birnen vergleiche?
Gruß
Luke
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 21:40 Mi 08.01.2014 | Autor: | chrisno |
Wenn es auf die Geschwindigkeit ankommt, dann musst Du eventuell verschiedene Algorithmen ausprobieren. Wie gut die Nullstellensuche klappt, hängt auch davon ab, wie gutartig Deine Funktion ist.
Levenberg-Marquardt kenne ich als Standard-Methode. Dabei wird durchaus auch der Gradient numerisch berechnet. Dabei ist immer dann das Problem, dass es am Ende schwierig werden kann, die Nullstelle genau zu finden, weil die Rechenungenauigkeiten bei der Gradientenbildung zunehmen. Da ist auch die Frage, wie genau Du die Nullstellen haben musst. Einfach und robust ist false-position. Die konvergiert zwar langsam, dafür ist auch wenig zu rechnen.
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 19:41 Mi 29.01.2014 | Autor: | wieschoo |
Ich kenne bzw. nutze den L-BGFS-B für nichtlineare Opt-Probleme (mit Nebenbedingungen). Hier ist schon die Berechnung der Hessematrix nicht explizit nötig und wird gefeiert.
Wie möchtest du ein Optimierungsproblem lösen ohne den Gradienten zu benutzen?
Da bleiben nur noch die Verfahren aus der diskreten Optimierung.
Das ist aber wie Spatzenschießen im Dunkeln mit einer Wasserpistole.
Ansonsten:
http://www.ime.unicamp.br/~martinez/lmrreport.pdf
|
|
|
|
|
Ich weiß nicht mit welchen Hilfsmitteln (Matlab, C++, ...) du dein Problem numerisch löst. Es gibt jedoch Bibliotheken, die dir deine Funktion differenzieren (weder symbolisch noch numerisch!)
Vielleicht ist der Gradient dann doch gar nicht so schlecht. Mit automatischen Differenzieren kann man ganze Routinen "ableiten".
Schau mal hier: http://www.autodiff.org/
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 16:20 Sa 08.02.2014 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|