Regression - Berechnung

22/04/2008 - 21:14 von Andreas Hoffmann | Report spam
Hallo,

wie berechne ich mit Hilfe von C# oder C++ die Regression aus?

Zum Einstellen wird gemessen, danach kann jeder Wert nahezu exakt
berechnet werden.

Grüße Andreas
x y
1 10 10
2 10 20
3 10 30
4 10 40
5 20 40
6 20 30
7 20 20
8 20 10
9 30 10
10 30 20
11 30 30
12 30 40
13 40 40
14 40 30
15 40 20
16 40 10
17 50 10
18 50 20
19 50 30
20 50 40

~~~~~~~~~~~~~~~~~~~~~

x-Gemessen y-Gemessen
1 10,05 10,10
2 10,05 20,11
3 10,05 30,14
4 10,05 40,15
5 20,08 40,15
6 20,08 30,20
7 20,08 20,12
8 20,08 10,09
9 30,15 10,10
10 30,15 20,16
11 30,15 30,21
12 30,15 40,16
13 40,22 40,17
14 40,22 30,22
15 40,22 20,18
16 40,22 10,09
17 50,31 10,10
18 50,31 20,12
19 50,31 30,19
20 50,31 40,18


Transformation:
-
X = -0.023 + 0.99*x + -0.000001*y + -0.000000*x*y +
-0.000084*x^2 + 0.000000*y^2

Y = 0.04 + -0.0031*x + 0.989*y + -0.00002*x*y +
0.00005*x^2 + 0.00019*y^2


X(x,y) = a0 + a1*x + a2*y + a3*x^2 + a4*y^2 + a5*x*y + ...
Y(x,y) = b0 + b1*x + b2*y + b3*x^2 + b4*y^2 + b5*x*y + ...
 

Lesen sie die antworten

#1 Christian Gollwitzer
23/04/2008 - 16:47 | Warnen spam
Andreas Hoffmann schrieb:
wie berechne ich mit Hilfe von C# oder C++ die Regression aus?

Zum Einstellen wird gemessen, danach kann jeder Wert nahezu exakt
berechnet werden.

X(x,y) = a0 + a1*x + a2*y + a3*x^2 + a4*y^2 + a5*x*y + ...
Y(x,y) = b0 + b1*x + b2*y + b3*x^2 + b4*y^2 + b5*x*y + ...



Solange die geuchten Koeffizienten nur linear in X enthalten sind, d.h.
es sind wie in Deinem Beispiel Vorfaktoren, kann man lineare Regression
machen. Seien die Messwerte mit x1, y1, X1 bezeichnet, dann musst Du
eine Matrix"gleichung" aufstellen:

M a = X

wobei M folgende Matrix ist

1 x1 y1 x1^2 y1^2 ...
1 x2 y2 x2^2 y2^2 ...

a ist der Vektor der Koeffizienten, also die Unbekannten

a0
a1
a2
a3
a4
.
.
.


und X ist ein Vektor mit den gemessenen X-Werten

X1
X2
X3
.
.
.

Analog für die gemessenen Y-Werte. Dieses überbestimmte Gleichungssystem
hat (meist) keine Lösung; die Lösung im Sinne der Regression bekommt man
auf zweierlei Arten;

1) Normalengleichungen: Man löse

M^T M a = M^T X

Dieses Gleichungssystem ist aber numerisch sehr instabil

2) Man benutze die QR-Zerlegung, d.h. man wendet auf das System
schrittweise Householdertransformationen an und löst dann das
Dreieckssystem auf

Wenn Du fertigen Code brauchst, suche nach "Linear least squares", z.B.
in den numerical recipes oder in der GSL

Christian

Ähnliche fragen