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

Looking for Accurate Ruby, Javascript, or R Excel RATE() or IRR() Function Implementation

本文关键字:IRR 函数 实现 RATE Excel Javascript 寻找 Ruby      更新时间:2023-09-26

我目前正在寻找Excel的RATE()IRR()的工作和准确的实现。我用Javascript编写代码,目标是现代浏览器和Rails 4中的Ruby 2.0.0。我的目标是能够在一个具有Rails后端的响应式Javascript应用程序中计算APR。

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

金融创业板:无RATE()功能。IRR()似乎挂起了许多测试向量。

Formula.js: No working RATE() function。IRR()不能用于许多测试向量。

PHPExcel:有一个工作的RATE()函数,我转换为Ruby。这不能完全像PHP版本一样工作,并且不能进行重要的测试向量。这可能确实有IRR()功能,但我还没有测试过。我不希望我能找到一个工作,但我将测试它,无论如何。

我对根据数学公式编写自己的实现不感兴趣。我更喜欢那些经过严格测试的代码。

更新:

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

我构建了一个名为Exonio的gem:

github.com/Noverde/exonio

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

我很想知道有什么改进

经过一些测试,我对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