JS指数曲线拟合

时间:2016-01-22 16:38:43

标签: javascript math curve-fitting

我试图制作一个简单的函数,在给定数据集的情况下进行指数曲线拟合。我写了以下内容:

private void runThread() { 

    new Thread() {
        public void run() { 
            while (i++ < 1000) { 
                try { 
                    runOnUiThread(new Runnable() {

                        @Override 
                        public void run() { 
                            btn.setText("#" + i); 
                        } 
                    }); 
                    Thread.sleep(300);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } 
            } 
        } 
    }.start();
} 

但是a和b似乎不正确。我使用Wolfram的基本公式。输入的数组的格式为 function expCurveFit(d){ var sum_x2 = 0, sum_lny = 0, sum_x = 0, sum_xlny = 0, n = d.length; for(var i=0;i<d.length;i++){ var x = d[i][0]; var y = d[i][1]; sum_x2 += x^2, sum_lny += Math.log(y), sum_x += x, sum_xlny += x*Math.log(y); } var a = ((sum_lny*sum_x2)-(sum_x*sum_xlny))/((n*sum_x2)-sum_x^2); var b = ((n*sum_xlny)-(sum_x*sum_lny))/((n*sum_x2)-sum_x^2); return [a,b]; } 。任何人都有工作建议,插件,库或修订功能?

2 个答案:

答案 0 :(得分:5)

JavaScript中的

^ is the XOR operator,而不是取幂。

x^2替换为Math.pow(x,2)x*x,并对您拥有sum_x^2的两个地方执行相同操作。

答案 1 :(得分:0)

除了XOR operator标记为此问题的答案之外, a b 系数存在错误。

使用此方法拟合的曲线为Y = B * exp(A * x),如Wolfram中所述,但B = bA = exp(a)

因此您必须将返回[a,b]更改为[ Math.exp(a), b](如果您想将此数组用作“等式”)