nichtlineare regression "von hand" / alternative

Neue Frage »

mastah Auf diesen Beitrag antworten »
nichtlineare regression "von hand" / alternative
Ich habe diese Frage auch in folgenden Foren auf anderen Internetseiten gestellt:
[http://www.matheraum.de/read?i=667077]


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]

un brauche ich a und b, welches für alle 4 gleichungen einsetzbar ist, 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. RWegr. 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? IAch habe versucht das durchauflösen und Einsetzen irgendwie zu berechnen: Mit Matlab habe ich y 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 - 80)/S)^2)/2)

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!
[%sig%]
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »