Least-squares line fitting: Difference between revisions

From JSXGraph Wiki
No edit summary
No edit summary
Line 6: Line 6:
<jsxgraph width="600" height="600">
<jsxgraph width="600" height="600">
var brd = JXG.JSXGraph.initBoard('jxgbox',{boundingbox:[-5,5,5,-5], keepaspectratio:true, axis:true});
var brd = JXG.JSXGraph.initBoard('jxgbox',{boundingbox:[-5,5,5,-5], keepaspectratio:true, axis:true});
var i, p = [], angle, xr, yr, delta = 0.01;
var i, p = [], angle, xr, yr, delta = 0.00;


// Random points are constructed which lie roughly on a line
// Random points are constructed which lie roughly on a line
Line 23: Line 23:
n = p.length;
n = p.length;
for (i=0;i<n;i++) {
for (i=0;i<n;i++) {
     M.push([p[i].X(), p[i].Y(), 1.0]);
     M.push([1,0,p[i].X(), p[i].Y(), 1.0]);
     y.push(p[i].X()*p[i].X() + p[i].Y()*p[i].Y());
     y.push(1+p[i].X()*p[i].X() + p[i].Y()*p[i].Y());
}
}


Line 39: Line 39:
// Finally, we can read from the solution vector z the coordinates [xm, ym] of the center
// Finally, we can read from the solution vector z the coordinates [xm, ym] of the center
// and the radius r and draw the circle.
// and the radius r and draw the circle.
var xm = z[0]*0.5;
var zm = z[0]*0.5;
var ym = z[1]*0.5;
var xm = z[1]*0.5;
var r = Math.sqrt(z[2]+xm*xm+ym*ym);
var ym = z[2]*0.5;
var r = Math.sqrt(z[3]+zm*zm+xm*xm+ym*ym);


brd.create('circle',[ [xm,ym], r]);  
brd.create('circle',[ [zm,xm,ym], r]);  
//alert([xm,ym,r].toString());
//alert([xm,ym,r].toString());
/*
/*

Revision as of 11:48, 7 November 2010

This little JXSGraph application finds the line - described by homogeneous coordinates [a,b,c] - that minimizes

[math]\displaystyle{ \sum_{i=1}^n (ax_i+by_i+cz_i)^2. }[/math]

Coming soon...