如何在JavaScript中实现GROWTH函数

我正在尝试在JavaScript中实现Microsoft Excel的GROWTH函数。 此函数使用现有数据计算预测的指数增长。 棘手的是它必须与多组known_x's值一起工作。 我找不到任何参考方程式。 有什么build议么?

在此先感谢您的帮助。

这里是基于我的答案在math.SE和维基百科页面的简单线性回归公式的重新实现:

 function growth ( known_y, known_x, new_x, use_const ) { // default values for optional parameters: if ( typeof( known_x ) == 'undefined' ) { known_x = []; for ( var i = 1; i <= known_y.length; i++ ) known_x.push(i); } if ( typeof( new_x ) == 'undefined' ) { new_x = []; for ( var i = 1; i <= known_y.length; i++ ) new_x.push(i); } if ( typeof( use_const ) == 'undefined' ) use_const = true; // calculate sums over the data: var n = known_y.length; var avg_x = 0; var avg_y = 0; var avg_xy = 0; var avg_xx = 0; for ( var i = 0; i < n; i++ ) { var x = known_x[i]; var y = Math.log( known_y[i] ); avg_x += x; avg_y += y; avg_xy += x*y; avg_xx += x*x; } avg_x /= n; avg_y /= n; avg_xy /= n; avg_xx /= n; // compute linear regression coefficients: if ( use_const ) { var beta = (avg_xy - avg_x*avg_y) / (avg_xx - avg_x*avg_x); var alpha = avg_y - beta*avg_x; } else { var beta = avg_xy / avg_xx; var alpha = 0; } // console.log("alpha = " + alpha + ", beta = " + beta); // compute and return result array: var new_y = []; for ( var i = 0; i < new_x.length; i++ ) { new_y.push( Math.exp( alpha + beta * new_x[i] ) ); } return new_y; } 

这是ideone.com上的一个演示。 您可以将输出与Excel GROWTH文档页面上的演示工作表进行比较。

请注意,algorithm中求和循环的数值稳定性可以使用维基百科页面上描述的用于计算方差的技术 (如Kahan求和)来改进 。 但是,对于这样的简单例子来说,天真的求和循环是相当不错的。