最小二乘法直线拟合

   public   static   void  LeastSquare2(Graphics g, List < PointF >  lp)
        {
            
//  Clear the client window with the white color
            g.Clear(Color.White);

            
//  Move the drawing origin to the point(200,200)
            g.TranslateTransform( 200 200 );

            
//  Use FillEllipse method to draw each point as an ellipse
             foreach  (PointF p  in  lp)
            {
                g.FillEllipse(Brushes.Red, 
new  RectangleF(p.X  -   5.0f , p.Y  -   5.0f 10.0f 10.0f ));
            }


            
int  i;
            
float  a, b, sumX, sumY2, sumY, sumXY;
            sumX 
=   0.0f ;
            sumY2 
=   0.0f ;
            sumY 
=   0.0f ;
            sumXY 
=   0.0f ;

            
//  To calculate as per the description of the Mathematical Formular
             for  (i  =   0 ; i  <  lp.Count; i ++ )
            {
                sumY 
+=  lp[i].Y;
                sumY2 
+=  lp[i].Y  *  lp[i].Y;
                sumX 
+=  lp[i].X;
                sumXY 
+=  lp[i].X  *  lp[i].Y;
            }

            
//  Deduct the coefficients required to do the approximation using the mathematical formular
            a  =  (lp.Count  *  sumXY  -  sumX  *  sumY)  /  (lp.Count  *  sumY2  -  sumY  *  sumY);
            b 
=  (sumY2  *  sumX  -  sumY  *  sumXY)  /  (lp.Count  *  sumY2  -  sumY  *  sumY);

            Pen newPen 
=   new  Pen(Color.Blue,  3.0f );
            g.DrawLine(newPen, 
new  PointF( 0 - /  a),  new  PointF( 360 , ( 360   -  b)  /  a));
        }

你可能感兴趣的:(职场,休闲,最小二乘法直线拟合)