Требуется точная реализация функций 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, который является алгоритмом поиска корня.
Хотелось бы узнать какие-либо улучшения в этом.