寻找准确的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
方法,我使用了Newton
ruby模块,这是一个根查找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