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

时间:2013-06-20 19:28:59

标签: javascript ruby r excel irr

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

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

Finance Gem:没有RATE()功能。 IRR()似乎挂起了许多测试向量。

Formula.js:没有有效的RATE()功能。 IRR()对许多测试向量不起作用。

PHPExcel:有一个有效的RATE()函数我转换为Ruby。这不能像PHP版本那样工作,并且对于重要的测试向量失败了。这可能确实有IRR()功能,但我还没有测试过。我并不希望我能找到一个有效但我会不顾一切地测试它。

我对用数学公式编写自己的实现不感兴趣。我更喜欢看起来经过严格测试的代码。

更新

我找到了一个使用R执行IRR()的程序,该程序对于我们的目的可能足够准确:https://stat.ethz.ch/pipermail/r-help/2008-August/169619.html我会在第二天左右评估此解决方案,如果我感到满意,请更新我的问题通过它。

2 个答案:

答案 0 :(得分:0)

我制作了一个名为Exonio的宝石:

github.com/Noverde/exonio

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

很想知道对此有任何改进。

答案 1 :(得分:-1)

经过一些测试后,我对R:

IRR()的实现感到满意

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

这是一个可通过Rscript命令运行的脚本形式:

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