Algebra(4,1,()=>{
var [no,ni,up] = [.5e5-.5e4,1e4+1e5,x=>no+x+x*x*.5*ni];
var r = ()=>Math.random()*2-1;
var points = [...Array(10)].map(x=>up(r*1e1+r*1e2+r*1e3));
var rotor = Math.E ** (r*1e12 + r*1e13);
var points2 = rotor >>> points;
var cost = (guess,from,to)=>{
var est = guess >>> from;
var dif = est-to;
return dif*~dif;
}
var dcost = this.Dt(cost);
var guess = 1, rate = 0.1/points.length;
for (var i=0; i<50; i++) {
var c = 0; for (var j=0; j<points.length; j++) c = c + dcost(guess,points[j],points2[j]);
guess = guess + rate * c[0];
guess.e14 = guess.e24 = guess.e34 = guess.e15 = guess.e25 = guess.e35 = guess.e45 = 0;
var err = 0; for (var j=0; j<points.length; j++) err = err + cost(guess,points[j],points2[j]);
if (Math.abs(err.s)/points.length<0.0005) break;
}
var trail = (g,p,n=32)=>[...Array(n)].map((x,i)=>((1-i/(n-1))+i/(n-1)*g)>>>p).map((x,i,a)=>[x,a[i-1]||x]);
return this.graph([
no,"steps : "+i,"error : "+(err.s/points.length).toFixed(5),
!1e12,!1e13,!1e23,
0x0000ff,...points,
0xff00ff,...points2,
0x00ff00,...points.map(x=>trail(guess,x)).flat()
],{conformal:1,animate:1,spin:0.1,gl:1,width:'800px',grid:1,height:'600px'})
})