如何在Javascript中创建最佳拟合多项式曲线?

如何在Javascript中创建最佳拟合多项式曲线?,javascript,best-fit-curve,Javascript,Best Fit Curve,我试图用3-6阶多项式计算数据的最佳拟合曲线。我发现这个教程: 首先,我似乎无法使我的输出与曲线进行远程匹配。请点击这里: 但是,在excel中使用LINEST时,它们是: -4.68257E-09 4.26789E-05 -0.01 45.39760539 我通过Excel中的Xs计算Y值来确认良好的相关性。最小化的结果不起作用 这是第一步,但理想情况下,我希望能够对4阶、5阶和6阶多项式做同样的事情 任何帮助都将不胜感激。谢谢。用矩阵代数解决了这个问题: var x = [500,1000

我试图用3-6阶多项式计算数据的最佳拟合曲线。我发现这个教程:

首先,我似乎无法使我的输出与曲线进行远程匹配。请点击这里:

但是,在excel中使用LINEST时,它们是:

-4.68257E-09
4.26789E-05
-0.01
45.39760539
我通过Excel中的Xs计算Y值来确认良好的相关性。最小化的结果不起作用

这是第一步,但理想情况下,我希望能够对4阶、5阶和6阶多项式做同样的事情


任何帮助都将不胜感激。谢谢。

用矩阵代数解决了这个问题:

var x = [500,1000,1500,2000,2500,3000,3500,4000,4500,5000,5500,6000,6500,7000];
var y = [50,80,100,160,210,265,340,390,440,470,500,500,495,460];

order = 3;

var xMatrix = [];
var xTemp = [];
var yMatrix = numeric.transpose([y]);

for (j=0;j<x.length;j++)
{
    xTemp = [];
    for(i=0;i<=order;i++)
    {
        xTemp.push(1*Math.pow(x[j],i));
    }
    xMatrix.push(xTemp);
}

var xMatrixT = numeric.transpose(xMatrix);
var dot1 = numeric.dot(xMatrixT,xMatrix);
var dotInv = numeric.inv(dot1);
var dot2 = numeric.dot(xMatrixT,yMatrix);
var solution = numeric.dot(dotInv,dot2);
console.log("Coefficients a + bx^1 + cx^2...")
console.log(solution);
var x=[5001000150020002500300004000450050005500600065007000];
变量y=[50,80100160210265340390440470500495460];
顺序=3;
var xMatrix=[];
var xTemp=[];
var yMatrix=数值转置([y]);

对于(j=0;jHey,但是在得到这些数字后该怎么办?我如何才能将它们插入公式中进行预测?@hyperfkcb我知道我晚了几个月,但如果您阅读,可能会更好地理解:他的代码只是计算“最佳位”的一种方法的实现对于N阶多项式。@hyperfkcb您使用了哪个库?“未定义数值”…@theshadow您知道它是哪个库吗?@Digerkam如果查看它们链接的jsbin,它们将在html中导入
-4.68257E-09
4.26789E-05
-0.01
45.39760539
var x = [500,1000,1500,2000,2500,3000,3500,4000,4500,5000,5500,6000,6500,7000];
var y = [50,80,100,160,210,265,340,390,440,470,500,500,495,460];

order = 3;

var xMatrix = [];
var xTemp = [];
var yMatrix = numeric.transpose([y]);

for (j=0;j<x.length;j++)
{
    xTemp = [];
    for(i=0;i<=order;i++)
    {
        xTemp.push(1*Math.pow(x[j],i));
    }
    xMatrix.push(xTemp);
}

var xMatrixT = numeric.transpose(xMatrix);
var dot1 = numeric.dot(xMatrixT,xMatrix);
var dotInv = numeric.inv(dot1);
var dot2 = numeric.dot(xMatrixT,yMatrix);
var solution = numeric.dot(dotInv,dot2);
console.log("Coefficients a + bx^1 + cx^2...")
console.log(solution);