Forum: Digitale Signalverarbeitung / DSP / Machine Learning Levenberg_Marquardt Algorithmus und Matlab für Anfänger


von Coriane J. V. (coriane)


Lesenswert?

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

von Jan K. (jan_k)


Lesenswert?

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

von Coriane J. V. (coriane)


Lesenswert?

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

von Detlef _. (detlef_a)


Lesenswert?

>>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

: Bearbeitet durch User
von Jan K. (jan_k)


Lesenswert?

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).

von Detlef _. (detlef_a)


Lesenswert?

>>>> Magst du das mal etwas ausführen?

Findest Du incl. Code z.B. hier:

Beitrag "Frequenzlinie ausfiltern und deren Amplitude auswerten"

Cheers
Detlef

von Coriane J. V. (coriane)


Lesenswert?

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

von db (Gast)


Lesenswert?

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..

von Coriane J. V. (coriane)


Lesenswert?

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 ;)

von Coriane J. V. (coriane)


Lesenswert?

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

von hubert (Gast)


Lesenswert?

Vielleicht erst mal

http://www.mathworks.de/de/help/matlab/getting-started-with-matlab.html

aufrufen und ganz gründlich durcharbeiten. Dann ist das Thema matlab 
schon mal etwas klarer.

von Coriane J. V. (coriane)


Lesenswert?

Coriane J. Voukeng schrieb:
> Jan K. schrieb:
>> doc lsqnonlin ;)
>>
>> Hallo Jan,
>>
>> Leider kann ich nicht mit "lsqnonlin "sondern mit "leasqr" arbeiten, weil es 
auf " mein Matlab" nirgendwo zu sehen ist. Es gibt allerdings sehr wenig Leute, 
die sich damit beschäftigt haben. hast du vielleicht mal eine Idee wie das 
funktionniert würde oder auch ein Beispiel-Code ?

von Mar V. (marvol)


Lesenswert?

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

von Coriane J. V. (coriane)


Lesenswert?

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ß

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.