Lineare Regression - Allgemeine Fragen

14/06/2010 - 20:47 von Andreas Bauer | Report spam
Hallo,

ich habe jetzt die Lösung.
Vielleicht für Euch hilfreich.

Neuer Thread, ist einfacher für alle.
Ich habe noch ein paar Fragen, vielleicht kann mir jemand diese
beantworten.

Sieht relativ einfach aus.

Warum so:
StepsToAxis<=> UserCoordinatesInMM
fx = a*x + b*y + c Formel für 2 Dimensionen, weil von y noch
anhàngig?!?
und nicht
fx = a*x + b Formel für 1 Dimension ?!?

Wo ist diese Berechnung gut erklàrt, Formelsammlung.
Da wàre ich nie drauf gekommen.
Ich will es einfach nachvollziehen können.
Wie heißt da jetzt die math. Theorie?
http://www.mathematik.ch/anwendunge...lation.pdf
Ich finde nichts.
Welches Buch ist hier zu empfehlen?
b = inv(x'x)x'y

Oder anders, wie würde die Berechung aussehen wenn
StepsToAxis<=> UserCoordinatesInMM, wenn x nicht von y abhàngig wàre?

Oder nochmal anders, wie würde die Berechung aussehen wenn
StepsToAxis<=> UserCoordinatesInMM, wenn x von y und von einer z
Richtung abhàngig wàre?
wenn das Produkt schràg liegt.

Bild von Hand
http://www1.minpic.de/bild_anzeigen.php?id4769&keyr372343&ende

Datei Excel:

http://www.fileuploadx.de/622293



http://www.mathdotnet.com/downloads...6-470.ashx

fx = 0,639237208990945*x + 0,0326366299017556*y + 19,8200049707945
fy = 0,00341428308423573*x + -0,646872751008385*y + 273,495238414032

fx = a*x + b*y + c

using MathNet.Numerics.LinearAlgebra; // Assembly notwendig.
private void btnCalc_Click(object sender, EventArgs e)
{
double[] fx = { 130.816, 196.860, 113.987 }; // Steps
(eigentlich int)
double[] fy = { 266.000, 256.000, 175.000 }; // Steps
(eigentlich int)
double[] x = { 173.0, 275.5, 139.5 }; // mm
double[] y = { 12.5, 28.5, 153 }; // mm
double[] b;
Solve(fx, out b, x, y);
Console.WriteLine("fx = " + b[0] + "*x + " + b[1] + "*y +
" + b[2]);
Solve(fy, out b, x, y);
Console.WriteLine("fy = " + b[0] + "*x + " + b[1] + "*y +
" + b[2]);
//Console.ReadKey();
}

private static void Solve(double[] f, out double[] b, double[]
x, double[] y)
{
Vector one = Vector.Ones(x.Length);
Vector x2 = Vector.Create(x);
Vector y2 = Vector.Create(y);
Matrix xy3 = Matrix.CreateFromColumns(new List<Vector>
{ x2, y2, one });
Vector f2 = Vector.Create(f);
Matrix f3 = Matrix.CreateFromColumns(new List<Vector>
{ f2 });
Matrix b3 = xy3.Solve(f3);
Vector b2 = b3.GetColumnVector(0);
b = b2.CopyToArray();
}
 

Lesen sie die antworten

#1 Thomas Plehn
14/06/2010 - 22:16 | Warnen spam
Am 14.06.2010 20:47, schrieb Andreas Bauer:

private static void Solve(double[] f, out double[] b, double[]
x, double[] y)
{
Vector one = Vector.Ones(x.Length);
Vector x2 = Vector.Create(x);
Vector y2 = Vector.Create(y);
Matrix xy3 = Matrix.CreateFromColumns(new List<Vector>
{ x2, y2, one });
Vector f2 = Vector.Create(f);
Matrix f3 = Matrix.CreateFromColumns(new List<Vector>
{ f2 });
Matrix b3 = xy3.Solve(f3);
Vector b2 = b3.GetColumnVector(0);
b = b2.CopyToArray();
}



und, wenn du jetzt scharf hinschaust, siehst du, dass dies genau die
Matrix-Gleichung ist, die ich dir ursprünglich beschrieben habe.

das sollte so völlig richtig sein.

durch dich bin ich jetzt auf die von dir benutzte Bibliothek math.net
gekommen, kannte ich noch nicht.

Ähnliche fragen