quoslibero
Version:
FusionCharts JavaScript charting framework
1 lines • 1.33 kB
JavaScript
function quadraticYOnX(d){d.sort(function(c,a){return parseFloat(c.x)-parseFloat(a.x)});let g,h,i,j,k,p,s,A,B,C,D=[],x=[],y=0,E=0,F=d.length,G=0,H=0,I=0,J=0,K=0,L=[];for(let a=0;a<d.length;a++)(B=+d[a].x,C=+d[a].y,!(isNaN(B)||isNaN(C)))&&(D.push(B),x.push(C));F=D.length;for(let a=0;a<F;a++)y+=x[a],E+=D[a]*x[a],K+=D[a]*D[a]*x[a],G+=D[a],H+=D[a]*D[a],J+=D[a]*D[a]*D[a],I+=D[a]*D[a]*D[a]*D[a];if(g=H-G*G/F,h=E-G*y/F,i=J-H*G/F,j=K-H*y/F,k=I-H*H/F,0==g*k-i*i||0===F)return[d,[]];p=(j*g-h*i)/(g*k-i*i),s=(h*k-j*i)/(g*k-i*i),A=y/F-s*(G/F)-p*(H/F);for(let a=0;a<F;a++)L.push({x:D[a],y:p*D[a]*D[a]+s*D[a]+A});return[d,L]}function quadraticXOnY(d){d.sort(function(c,a){return parseFloat(c.x)-parseFloat(a.x)});let g,h,i,j,k,p,s,A,B,C,D=[],x=[],y=0,E=0,F=d.length,G=0,H=0,I=0,J=0,K=0,L=[];for(let a=0;a<d.length;a++)(B=+d[a].x,C=+d[a].y,!(isNaN(B)||isNaN(C)))&&(D.push(B),x.push(C));F=D.length;for(let a=0;a<F;a++)y+=D[a],E+=x[a]*D[a],K+=x[a]*x[a]*D[a],G+=x[a],H+=x[a]*x[a],J+=x[a]*x[a]*x[a],I+=x[a]*x[a]*x[a]*x[a];if(g=H-G*G/F,h=E-G*y/F,i=J-H*G/F,j=K-H*y/F,k=I-H*H/F,0==g*k-i*i||0===F)return[d,[]];p=(j*g-h*i)/(g*k-i*i),s=(h*k-j*i)/(g*k-i*i),A=y/F-s*(G/F)-p*(H/F);for(let a=0;a<F;a++)L.push({x:p*x[a]*x[a]+s*x[a]+A,y:x[a]});return[d,L]}export default function getPolynomialRegressionPoints(a,b){return+b?quadraticYOnX(a):quadraticXOnY(a)}