nichtlineare regression < Nichtlineare Gleich. < Numerik < Hochschule < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 00:45 Mi 24.03.2010 | Autor: | eume1337 |
Ich habe diese Frage auch in folgenden Foren auf anderen Internetseiten gestellt:
[http://www.matheboard.de/thread.php?threadid=414952]
Hallo,
ich habe eine Frage zur nichtlinearen Regressionsanalye (hoffe, dass ich hier unter 'Numerik' am besten hinpasse).
Ich habe einen funktionierenden Code für Matlab für meine regr. analyse. (nach Levenberg-Marquardt) gegeben ist folgendes:
(0) y = (a - 80) / S + sqrt((2*b)/S) ist die Formel.
weiterhin habe ich für y die Werte [1146.5 652.389 369.256 246.82] und für S [0.25 0.5 1.0 1.5]
Nun brauche ich a und b, welche für alle 4 Gleichungen einsetzbar sind, also für:
(1) 1146.500 = (a - 80) / 0.25 + sqrt((2*b) / 0.25)
(2) 652.389 = (a - 80) / 0.5 + sqrt((2*b) / 0.5)
(3) 369.256 = (a - 80) / 1.0 + sqrt((2*b) / 1.0)
(4) 246.820 = (a - 80) / 1.5 + sqrt((2*b) / 1.5)
Das das nur über eine nichtlin. Regr. funktioniert (nlinfit) ist mir klar; Matlab hat mir auch folgende Werte für die zugehörige Funktion ausgegeben:
a = 292.581; b = 11371.5 für
(1') 1151.928 = (a - 80) / 0.25 + sqrt((2*b) / 0.25)
(2') 638.436 = (a - 80) / 0.5 + sqrt((2*b) / 0.5)
(3') 363.388 = (a - 80) / 1.0 + sqrt((2*b) / 1.0)
(4') 264.412 = (a - 80) / 1.5 + sqrt((2*b) / 1.5)
Meine Frage: Gibt es einen Weg, wie ich das "per Hand" in etwa approximieren kann? Ich habe versucht das durch Auflösen und Einsetzen irgendwie zu berechnen: Mit Matlab habe ich (0) jew. nach a und b aufgelöst mit folgendem Ergebnis:
(5) a = (S*y - 2^(1/2)*S*(b/S)^(1/2) + 80)
und
(6) b = ((S*(y - (a - [mm] 80)/S)^2)/2)
[/mm]
Nun wollte ich (5) in (6) bzw. (6) in (5) einsetzen und jew. nach a bzw. b auflösen (y und S sind mir ja jew. bekannt) und dann der Reihe nach in (1) - (4) einsetzen, damit ich insg. für a und b jeweils 4 Ergebnisse bekomme, deren Durchschnitt ich als "Ergebnis" verwenden könnte; also wie folgt:
Aus (1) => a1, dieses a1 in (2) => b1, dieses b1 in (3) =>a2 und dieses wiederum in (4) => b2
sowie
Aus (1) => b3 dieses b3 in (2) => a3, dieses a3 in (3) =>b4 und dieses wiederum in (4) => a4
Meine Ergebnis (a') wäre dann der Mittelwert aus [a1,a2,a3,a4] und (b') entsprechend der Mittelwert aus [b1,b2,b3,b4].
Ich weiß, dass das im mathematischen Sinne nicht ansatzweise eine adäquate Lösung ergibt bzw. ein adäquates Vorgehen ist; aber genau das würde mir reichen, wenn die Abweichung von a' und b' von den von matlab errechneten Ergebnissen kleiner als 5-10% ist.
Mein problem nun: wenn ich (5) in (6) bzw (6) in (5) einsetze, kann ich nicht nach a, bzw b auflösen; ebenso nicht wenn ich (5) bzw (6) in (0) einsetze.
Habe ich da irgendwie einen Denkfehler? (entweder habe ich immer a, b oder y auf beiden Seiten des Gleichheitsszeichens stehen).
Hintergrund:
Ich bin an der Implementierung in C++, aber da es mich noch ein wenig Zeit kosten wird den Levenberg-Marquardt-Algorithmus zu implementieren, wollte ich eine vorläufige Lösung, die zumindest ansatzweise approximiert.
(vielleicht hat jemand auch eine Anregung oder dergleichen für die Umsetzung in C++, sprich einen Tip für eine nutzbare vorhandene Library etc... bin im Moment bei LAPACK gelandet aber bis jetzt bringt mich das nciht sonderlich weit)
Vielen Dank schonmal für eure Hilfe und Denkanstöße!
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 01:46 Mi 24.03.2010 | Autor: | Blech |
Hi,
>
> Hallo,
> ich habe eine Frage zur nichtlinearen Regressionsanalye
> (hoffe, dass ich hier unter 'Numerik' am besten hinpasse).
>
> Ich habe einen funktionierenden Code für Matlab für meine
> regr. analyse. (nach Levenberg-Marquardt) gegeben ist
> folgendes:
>
> (0) y = (a - 80) / S + sqrt((2*b)/S) ist die Formel.
Die Gleichung ist aber linear in den Parametern a und b.
[mm] $y=\frac{a-80}{S} +\sqrt{\frac{2b}{S}}$
[/mm]
[mm] $\Leftrightarrow\ \underbrace{y+\frac{80}{S}}_{=:y'} [/mm] = [mm] \frac1{S}*a [/mm] + [mm] \sqrt{\frac{2}{S}}*\sqrt{b}$
[/mm]
[mm] $\Leftrightarrow\ [/mm] y' = [mm] \underbrace{\pmat{\frac1{S} & \sqrt{\frac{2}{S}}}}_{=:x^t}*\underbrace{\pmat{a\\ \sqrt{b}}}_{=:\theta}$
[/mm]
> weiterhin habe ich für y die Werte [1146.5 652.389
> 369.256 246.82] und für S [0.25 0.5 1.0 1.5]
d.h. mit der Notation von oben willst Du
[mm] $\|\underbrace{(y_i')_i}_{:=Y'} [/mm] - [mm] \underbrace{(x_i^t)_i}_{=:X}*\theta\|$
[/mm]
minimieren.
Das wäre lineare Ausgleichsrechnung mit den üblichen Normalengleichungen
[mm] $X^tY'=X^tX\theta$
[/mm]
oder welches Verfahren auch immer Du anwenden willst. Das Ergebnis sind Werte für a und [mm] $\sqrt{b}$
[/mm]
Es ist grausam spät, aber ich sehe nicht, warum das nicht funktionieren sollte.
ciao
Stefan
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 20:41 Fr 28.05.2010 | Autor: | eume1337 |
> Hi,
>
Danke erstmal für deine Hilfestellung, vor allem war das sehr schnell
>
> Die Gleichung ist aber linear in den Parametern a und b.
>
> [mm]y=\frac{a-80}{S} +\sqrt{\frac{2b}{S}}[/mm]
> [mm]\Leftrightarrow\ \underbrace{y+\frac{80}{S}}_{=:y'} = \frac1{S}*a + \sqrt{\frac{2}{S}}*\sqrt{b}[/mm]
>
> [mm]\Leftrightarrow\ y' = \underbrace{\pmat{\frac1{S} & \sqrt{\frac{2}{S}}}}_{=:x^t}*\underbrace{\pmat{a\\ \sqrt{b}}}_{=:\theta}[/mm]
>
>
> > weiterhin habe ich für y die Werte [1146.5 652.389
> > 369.256 246.82] und für S [0.25 0.5 1.0 1.5]
>
> d.h. mit der Notation von oben willst Du
>
> [mm]\|\underbrace{(y_i')_i}_{:=Y'} - \underbrace{(x_i^t)_i}_{=:X}*\theta\|[/mm]
>
> minimieren.
Ich weiß nicht, ob ich dir folgen kann.... Nach o.g. definitionen habe ich ausgerechnet:
[mm](y_1')_1 = 1766,5[/mm], [mm](x_1^t)_1 = 11,31[/mm]
[mm](y_2')_2 = 812,4[/mm], [mm](x_2^t)_2 = 4[/mm]
[mm](y_3')_3 = 449,3[/mm], [mm](x_3^t)_3 = 1,41[/mm]
[mm](y_4')_4 = 300,153[/mm], [mm](x_4^t)_4 = 0,77[/mm]
das wäre dann entsprechend
1: [mm]\|1766,5 - 11,31 * \pmat{a\\ \sqrt{b}}\|[/mm]
2: [mm]\|812,4 - 4 * \pmat{a\\ \sqrt{b}}\|[/mm]
3: [mm]\|449,3 - 1,41 * \pmat{a\\ \sqrt{b}}\|[/mm]
4: [mm]\|300,153 - 0,77 * \pmat{a\\ \sqrt{b}}\|[/mm]
sehe ich das richtig?
Und hier komme ich nun nicht weiter...
>
> Das wäre lineare Ausgleichsrechnung mit den üblichen
> Normalengleichungen
>
> [mm]X^tY'=X^tX\theta[/mm]
Ich glaube dass ich irgendetwas gravierendes nicht verstehe...
[mm]X^tY'=X^tX\theta[/mm]
[mm]\Leftrightarrow\ Y'=X\theta [/mm] ? ([mm] X^t[/mm] kürzt sich weg??)
>
> oder welches Verfahren auch immer Du anwenden willst. Das
> Ergebnis sind Werte für a und [mm]\sqrt{b}[/mm]
>
> Es ist grausam spät, aber ich sehe nicht, warum das nicht
> funktionieren sollte.
Es ist ein wenig Zeit vergangen und ich habe mir immer und immer wieder deine Antwort angeschaut, wenn ich Zeit gefunden habe; wie du siehst, sehe ich nicht, warum das funktionieren sollte....
Wäre sehr dankbar für weitere Hilfestellung..
>
> ciao
> Stefan
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 17:44 Di 01.06.2010 | Autor: | eume1337 |
DANKE FÜR DIE BEMÜHUNGEN,
für mich hat sich diese Frage erledigt;
ich weiß zwar noch immer nicht genau, wie die Funktionsweise hinter dem Problem ist,
habe jedoch eine Library gefunden, die genau mein Problem löst (levmar25).
Danke nochmals
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 19:25 Sa 12.06.2010 | Autor: | Blech |
> > > weiterhin habe ich für y die Werte [1146.5 652.389
> > > 369.256 246.82] und für S [0.25 0.5 1.0 1.5]
> >
> > d.h. mit der Notation von oben willst Du
> >
> > [mm]\|\underbrace{(y_i')_i}_{:=Y'} - \underbrace{(x_i^t)_i}_{=:X}*\theta\|[/mm]
>
> >
> > minimieren.
>
> Ich weiß nicht, ob ich dir folgen kann.... Nach o.g.
> definitionen habe ich ausgerechnet:
>
> [mm](y_1')_1 = 1766,5[/mm], [mm](x_1^t)_1 = 11,31[/mm]Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
Es galt doch
$y_1'= y_1+\frac{80}{S_1}=1146+\frac{80}{0.25}=1466$
Und
$x_1^t=\pmat{\frac 1 {S_1}& \sqrt{\frac2{S_1}}$
ist ein Zeilenvektor, keine Zahl.
$(y'_i)_i=\pmat{y'_1\\ y'_2\\ y'_3\\y'_4}$
$(x^t_i)_i=\pmat{x^t_1\\x^t_2\\x^t_3\\x^t_4},$
also ist X eine Matrix und Y' ein Vektor und somit ist
$X^tY'=X^tX\theta$
ein lineares Gleichungssystem.
Was mich zu meiner eigentlichen Frage führt:
> > Das wäre lineare Ausgleichsrechnung mit den üblichen
> > Normalengleichungen
> >
> > [mm]X^tY'=X^tX\theta[/mm]
>
> Ich glaube dass ich irgendetwas gravierendes nicht
> verstehe...
>
> [mm]X^tY'=X^tX\theta[/mm]
> [mm]\Leftrightarrow\ Y'=X\theta[/mm] ? ([mm] X^t[/mm] kürzt sich weg??)
Wie bist Du ins Hauptstudium gekommen, ohne je mit Matrizen zu arbeiten? Ich hatte eine Informatik für Nebenfach Vorlesung voll mit Geisteswissenschaftler und wir hatten jede Menge lineare Algebra. =)
ciao
Stefan
|
|
|
|