Berechnung der Koeffizienten - Trendfunktionen höherer Ordnung

13/12/2007 - 11:30 von erik.mautsch | Report spam
Hallo in die Runde,

ich habe einen Prognosealgorithmus programmiert (Verwendung u. a. von
SimpleRegression -> Commons Math), der aktuell nur die lineare
Trendfunktion betrachtet (exp. Glàttung fiel beim Qualitàtstest
bereits raus).
lin. Trendfunktion: y = a + bx
Die Koeffizienten a und b der Funktion bestimme ich so, dass die Summe
der quadratischen Abweichungen der Zeitreihenwerte von der
Trendfunktion minimiert wird.

Jedoch muss ich auf Grund einer Änderung noch
Implementierungen für folgendes nachliefern:
- y=a + bx + cx^2 + dx^3 (Trendfunktion 3. Grades)
- y=a + be^c (exponentielle Trendfunktion)

Ein Kollege hatte mir den Hinweis gegeben, dass ich die höheren Grade
(resp. deren Koeffizienten) ebenfalls über vorhandene Funktionalitàten
von Commons Math berechnen kann.
Stichwörter waren Real matrices und Solving linear systems ...
Das bezieht sich leider schon auf die eigentliche programmatische
Umsetzung.

Kann mir jemand einen Tipp geben, wie für den Fall der Trendfunktion
3. Grades die Koeffizienten a, b, c und d berechnet werden?
Die quadratischen Abweichungen müssen hier doch ebenfalls minimiert
werden ...

Danke und viele Grüße
Erik
 

Lesen sie die antworten

#1 earthnut
14/12/2007 - 01:47 | Warnen spam
wrote:

Hallo in die Runde,

ich habe einen Prognosealgorithmus programmiert (Verwendung u. a. von
SimpleRegression -> Commons Math), der aktuell nur die lineare
Trendfunktion betrachtet (exp. Glàttung fiel beim Qualitàtstest
bereits raus).

Jedoch muss ich auf Grund einer Änderung noch
Implementierungen für folgendes nachliefern:
- y=a + bx + cx^2 + dx^3 (Trendfunktion 3. Grades)

Kann mir jemand einen Tipp geben, wie für den Fall der Trendfunktion
3. Grades die Koeffizienten a, b, c und d berechnet werden?
Die quadratischen Abweichungen müssen hier doch ebenfalls minimiert
werden ...



Du hast also an gewissen Stellen x_k (i = 1..N) "Messwerte" y_k, und du
möchtest nun eine Fkt 3. Grades der Form

y = a + bx + cx^2 + dx^3

"möglichst gut" durch diese Wert hindurchlegen.

Die Messwerte sollen also die Gleichungen (für k = 1..N)

y_k ~ a + bx_k + cx_k^2 + dxk^3

"möglichst gut erfüllen".

Schauen wir uns dieses Gleichungssystem mal etwas genauer an. Wir können
es auch umschreiben zu:

1 * a + x_k * b + x_k^2 * c + x_k^3 * d ~ y_k ,

was Matrix-Vektor-Form ausgeschrieben dem überbestimmten (falls N > 4)
Linearen Gleichungssystem:

( 1 x_1 x_1^2 x_1^3 ) ( a ) ( y_1 )
( 1 x_2 x_2^2 x_2^3 ) ( b ) ~ ( y_2 )
( : : : : ) ( c ) ~ ( : )
( 1 x_N x_N^2 x_N^3 ) ( d ) ( y_N )

entspricht. Oder Kurz:

X z ~ y

Mit X ist Nx4-Matrix, z ist 4-dimensionaler Spaltenvektor und y ist
N-dimensionaler Spaltenvektor.

Nun gibt es für "überbestimmte lineare Gleichungssysteme" (evtl.
googlen) eine ganz einfache Theorie, die einem die "bestmögliche" Lösung
liefert. In deinem Fall suchst du die Lösung, mit der geringsten
Fehlerquadrat Summe. Die bekommst du, in dem du das Gleichungssystem von
links mit X^T (X transponiert) durchmultiplizierst und dann Löst.

Betrachte also

X^T X z = X^T y

oder
G z = b ,

mit G = X^T X und b = X^T y.

Dieses Gleichungssystem ist eindeutig lösbar, wenn X mindestens 4 linear
unabhàngige Zeilen besitzt (glaub ich zumindest). Und die Lösung z gibt
dir genau die gesuchten Koeffizienten a, b, c und d für deine
Trendfunktion.

Bastian

Ähnliche fragen