Levenberg_Marquardt Algorithmus und Matlab für Anfänger

OP #3370059
Hallo Guyyyzzzzzz,

meine Frage bezieht sich heute auf Matlab und die Methode des kleinsten 
Quadrate. Ich habe eine verrrauschte Sinus-Funktion: x = 3 Nm + 
A*sin(w*t+ phinull). um die Parametern dieses Funtion zu bestimmen muss 
ich die Levenberg Methode über Matlab einsetzen. Ich habe zwar an der 
Uni mich mit andere Optimierungsverfahren beschäftigt aber noch nicht 
mit dieser und auch wenig mit Matlab.

Ich freue mich riesig auf Ihre Frage, Vorschläge und alles was dazu 
kommt
#3370277
doc lsqnonlin ;)

Etwas auführlicher:

Du musst eine Funktion schreiben (entweder als anonymes function handle 
oder als eigene datei), die deinem x (nenn sie lieber anders, y, oder z 
oder so) entspricht und deine Parameter w, phi etc. vektoriell (also 
zusammengefasst in einen x vektor, um bei der matlab Schreibweise zu 
bleiben) beinhaltet.

Diese musst du lsqnonlin übergeben, Anfangswerte angeben und starten. 
Der macht nicht automatisch Levenberg Marquardt, vielleicht kann man das 
erzwingen.

Oder musst du den selber implementieren?

Schöne Grüße,
Jan
OP #3370288
Jan K. schrieb:
> doc lsqnonlin ;)
>
> Etwas auführlicher:
>
> Du musst eine Funktion schreiben (entweder als anonymes function handle
> oder als eigene datei), die deinem x (nenn sie lieber anders, y, oder z
> oder so) entspricht und deine Parameter w, phi etc. vektoriell (also
> zusammengefasst in einen x vektor, um bei der matlab Schreibweise zu
> bleiben) beinhaltet.
>
> Diese musst du lsqnonlin übergeben, Anfangswerte angeben und starten.
> Der macht nicht automatisch Levenberg Marquardt, vielleicht kann man das
> erzwingen.
>
> Oder musst du den selber implementieren?
>
> Schöne Grüße,
> Jan

Hallo Jan,

danke für deine Antwort. Ich muss es selbst implementieren und ich habe 
dabei keinen blassen Schirm!!!! :))) Traurig
#3370617
>>Ich habe eine verrrauschte Sinus-Funktion x = 3 Nm +  A*sin(w*t+ phinull).

3Nm ist ne Konstante, die unbekannten Parameter sind A,w und phinull ?
Dann benötigt man zur Bestimmung der Parameter keine nichtlineare 
Optimierung sondern kann die Parameter durch ein lineares 
Gleichungssystem bestimmen, yo :-)) .

Cheers
Detlef
#3370665
Klingt interessant, Detlef.

Mir fallen als Alternativen momentan nur fft/fourierreihe und 
Autokorrelation ein, aber mit nem einfachen LGS ist es da nicht getan.

Magst du das mal etwas ausführen?

Da aber ja ausdrücklich der LM Algorithmus gewünscht wird:

@ coriane
Wenn du andere Optimierungsverfahren kennst und verstanden hast, wirst 
du dir auch den Levenberg anlesen können.

Hier gibts eine Implementierung, wie gut die ist, weiß ich nicht: 
http://www.mathworks.com/matlabcentral/fileexchange/16063-lmfsolve-m-levenberg-marquardt-fletcher-algorithm-for-nonlinear-least-squares-problems

Newton Verfahren kennst du? Lokal geht das Levenberg Marquardt Verfahren 
nämlich darin über. Im Prinzip linearisierst du die nichtlineare 
Funktion und machst dann Newton(-Rhapson).
OP #3371284
Detlef _a schrieb:

>>>Ich habe eine verrrauschte Sinus-Funktion x = 3 Nm +  A*sin(w*t+ phinull).
>
> 3Nm ist ne Konstante, die unbekannten Parameter sind A,w und phinull ?

Hallo Detlef,

danke für deinen Beitrag. Erstmal muss ich dir sagen, dass A und w 
bekannt sind. Man kann näcmlich A über fft bestimmen. Mein Problem liegt 
bei der Bestimmung von Phinull. Mein Betreuer ist aber der Meinung, dass 
man phi null mit der Levenberg-Marquardt Methode finden kann und damit 
auch das Rauschen beseitigen. Wie ich die Methode in Matlab 
implementieren soll weiss ich nicht wo ich anfangen wirst ----> Hilfe
Gast #3371287
Alter,
Oben hat Jan dir doch schon ne Beispiel Implementation verlinkt! 
Versteht du denn den algo? Und warum solltest du A mit ner FFT 
bestimmen? Entweder oder... Bei einer sinus regression (und unter 
anderem dafür ist levenberg Marquardt) kannst du alle Parameter fitten..
OP #3371290
Jan K. schrieb:
> >
> > @ coriane
> Wenn du andere Optimierungsverfahren kennst und verstanden hast, wirst
> du dir auch den Levenberg anlesen können.
>
> Hier gibts eine Implementierung, wie gut die ist, weiß ich nicht:
> 
http://www.mathworks.com/matlabcentral/fileexchange/16063-lmfsolve-m-levenberg-marquardt-fletcher-algorithm-for-nonlinear-least-squares-problems
>
> Newton Verfahren kennst du? Lokal geht das Levenberg Marquardt Verfahren
> nämlich darin über. Im Prinzip linearisierst du die nichtlineare
> Funktion und machst dann Newton(-Rhapson).

Hey Jan K. nett von dir!!!! Klar haben wir schon mit mehrere Optimierung 
beschäftigt und Ich kann dir auch sagen, dass das LM Verfahren bezieht 
sich auf der Gauß Newton- und Gradienten Verfahren. Aber wie man die in 
Matlab implementieren soll weiss ich nicht. Das hatten wir noch nicht 
gesehen. Nichtsdestotrotz bedanke ich mich bei dir wegen des Links ;)
OP #3371307
db schrieb:
> Alter,
> Oben hat Jan dir doch schon ne Beispiel Implementation verlinkt!
> Versteht du denn den algo? Und warum solltest du A mit ner FFT
> bestimmen? Entweder oder...


:)) Sag man auch zu einer Frau "ALter" ? Danke db für deine Antwort .Ich 
beschäftige mich gerade mit dem Link... Hatte Gestern kein 
Netzverbindung. und was die Amplitude angeht bin völlig deiner Meinung. 
War nur ein Idee meines Betreuers
#3373956
Hallo.

Der lsqnonlin ist in der Toolbox Optimierung drin, wahrscheinlich ist 
die nicht beim Standardpaket dabei (kenne mich mit Mathlab nicht aus).

Alternativ kannst Du das Modul levmar nehmen, dort gibt es auch eine 
Mathlab Schnittstelle:

http://users.ics.forth.gr/~lourakis/levmar/

Andere Option wäre statt Mathlab, Scilab zu benutzen, dort ist der 
Algorithmus enthalten - die Software ist kostenlos:

* lsqrsolve -> minimize the sum of the squares of nonlinear functions, 
levenberg-marquardt algorithm.

Gruß
Marvol
OP #3374566
Mar Vol schrieb:
> Hallo.
>
> Der lsqnonlin ist in der Toolbox Optimierung drin, wahrscheinlich ist
> die nicht beim Standardpaket dabei (kenne mich mit Mathlab nicht aus).
>
> Alternativ kannst Du das Modul levmar nehmen, dort gibt es auch eine
> Mathlab Schnittstelle:
>
> http://users.ics.forth.gr/~lourakis/levmar/
>
> Andere Option wäre statt Mathlab, Scilab zu benutzen, dort ist der
> Algorithmus enthalten - die Software ist kostenlos:
>
> * lsqrsolve -> minimize the sum of the squares of nonlinear functions,
> levenberg-marquardt algorithm.
>
> Gruß
> Marvol

Hi Marvol

ich nehme momentan Octave ist auch eine Alternative. Danke sehr

Gruß

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.