none
Lineare Regression - Allgemeine Fragen RRS feed

  • Frage

  • 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/anwendungenmath/Korrelation_Regression/Regre... 
      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?id=114769&key=72372343&ende

    Datei Excel:

    http://www.fileuploadx.de/622293

    http://www.mathdotnet.com/downloads/Iridium-2008-8-16-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(); 
            } 

    Montag, 14. Juni 2010 18:52

Antworten