寻找准确的Ruby,Javascript或R Excel RATE()或IRR()函数实现

我正在寻找Excel的RATE()IRR()工作和准确的实现。 我在JavaScript中编写了针对现代浏览器和Rails 4中的Ruby 2.0.0的Javascript。我的目标是能够使用Rails后端在响应JavaScript应用程序中计算APR。

我看过并拒绝了以下选项:

财务gem :没有RATE()函数。 IRR()似乎挂起了许多testing向量。

Formula.js :没有工作的RATE()函数。 IRR()不适用于许多testing向量。

PHPExcel :有一个工作的RATE()函数,我转换成Ruby 。 这不能完全像PHP版本一样工作,并且失败了重要的testing向量。 这可能有一个IRR()函数,但我还没有testing过。 我不希望我能find一个有效的工作,但是我会不顾一切地进行testing。

我不感兴趣从math公式写我自己的实现。 我更喜欢看起来经过了严格testing的代码。

更新:

我find了一个使用R来执行IRR()的过程,这个过程对于我们的目的可能是足够准确的: https : //stat.ethz.ch/pipermail/r-help/2008-August/169619.html我将评估这个解决scheme第二天左右,更新我的问题,如果我感到满意。

我build了一个名叫Exonio的gem:

github.com/Noverde/exonio

这个gem在Ruby中实现一些Excel公式,也许它可以帮助你。 为了实现IRR方法,我使用了Newtonruby模块,这是一个根查找algorithm。

很想知道任何改进。

经过一些testing,我对R的IRR()实现感到满意:

https://stat.ethz.ch/pipermail/r-help/2008-August/169619.html

这里是通过Rscript命令可以运行的脚本的forms:

 args <- commandArgs(TRUE) periods = as.numeric(args[1]) payment = as.numeric(args[2]) value = as.numeric(args[3]) monthsInYear = 12 timeline <- (0:periods) payments <- payment + (0 * timeline) payments[1] <- value f <- function(r) sum(payments * exp(-r * timeline)) irr <- function(f) uniroot(f, c(0, 1))$root irr(f) * monthsInYear