Требуется точная реализация функций Ruby, Javascript или R Excel (RATE() или IRR())

В настоящее время я ищу рабочие и точные реализации Excel RATE() а также IRR(), Я пишу в Javascript, ориентируясь на современные браузеры и Ruby 2.0.0 в Rails 4. Моя цель - иметь возможность вычислять APR в отзывчивом приложении Javascript с Rails-сервером.

Я посмотрел и отклонил следующие варианты:

Финансы Gem: нет RATE() функция. IRR() кажется зависает для многих тестовых векторов.

Formula.js: не работает RATE() функция. IRR() не работает для многих тестовых векторов.

PHPExcel: имеет рабочий RATE() функция, которую я преобразовал в Ruby. Это не сработало точно так же, как версия PHP, и не сработало для важных векторов тестирования. Это, вероятно, имеет IRR() функции, но я еще не проверял это. Я не надеюсь, что найду тот, который работает, но я проверю это независимо.

Я не заинтересован в написании собственной реализации из математических формул. Я предпочитаю код, который, кажется, был тщательно протестирован.

Обновить:

Я нашел процедуру для выполнения IRR() используя R, который может быть достаточно точным для наших целей: https://stat.ethz.ch/pipermail/r-help/2008-August/169619.html Я оценю это решение в течение следующего дня или около того и обновлю свой вопрос, если Я чувствую себя удовлетворенным этим.

2 ответа

Решение

После некоторого тестирования я доволен этой реализацией IRR() в R:

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

Я построил драгоценный камень под названием Exonio:

http://github.com/Noverde/exonio

Этот гем реализует некоторые формулы Excel в Ruby, может быть, он может помочь вам. Для реализации IRR метод, я использую Newton модуль ruby, который является алгоритмом поиска корня.

Хотелось бы узнать какие-либо улучшения в этом.

Другие вопросы по тегам