首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于Rate函数的问题

关于Rate函数的问题
EN

Stack Overflow用户
提问于 2011-08-15 20:13:32
回答 1查看 991关注 0票数 3

简要说明:

rate函数计算达到未来值所需的rate。

nper -期间数(期间数) pmt -付款(每月或每年) pv -现值(初始金额) fv -未来值(要达到的金额)

问题:

我已经使用了函数率(php代码如下),我有一些问题。我将它与以下值一起使用:

不对

代码语言:javascript
复制
 Excel - RATE(228;-196,02;-49005;961546,464646;1;0,05) gives: 0,0119
 Php   - RATE(228,-196.02,-49005,961546.464646,1,0.05) gives: 0.0022

好的

代码语言:javascript
复制
 Excel - RATE(228;-196,02;-49005;161546,464646;1;0,05) gives:0,003
 Php   - RATE(228,-196.02,-49005,161546.464646,1,0.05) gives:0.003

看起来,当$nper$pv$pmt$fv之间的差异变得更大时,代码就会出错。

有人知道问题出在哪里吗?提前谢谢。

代码语言:javascript
复制
define('FINANCIAL_MAX_ITERATIONS', 128);
define('FINANCIAL_PRECISION', 1.0e-08);


function rate($nper, $pmt, $pv, $fv, $type, $guess) 
{

    $rate = $guess;
    if (abs($rate) < FINANCIAL_PRECISION) {
        $y = $pv * (1 + $nper * $rate) + $pmt * (1 + $rate * $type) * $nper + $fv;
    } else {
        $f = exp($nper * log(1 + $rate));
        $y = $pv * $f + $pmt * (1 / $rate + $type) * ($f - 1) + $fv;
    }
    $y0 = $pv + $pmt * $nper + $fv;
    $y1 = $pv * $f + $pmt * (1 / $rate + $type) * ($f - 1) + $fv;

    // find root by secant method
    $i  = $x0 = 0.0;
    $x1 = $rate;
    while ((abs($y0 - $y1) > FINANCIAL_PRECISION) && ($i < FINANCIAL_MAX_ITERATIONS)) {
        $rate = ($y1 * $x0 - $y0 * $x1) / ($y1 - $y0);
        $x0 = $x1;
        $x1 = $rate;

        if (abs($rate) < FINANCIAL_PRECISION) {
            $y = $pv * (1 + $nper * $rate) + $pmt * (1 + $rate * $type) * $nper + $fv;
        } else {
            $f = exp($nper * log(1 + $rate));
            $y = $pv * $f + $pmt * (1 / $rate + $type) * ($f - 1) + $fv;
        }

        $y0 = $y1;
        $y1 = $y;
        ++$i;
    }
    return $rate;
} 
EN

回答 1

Stack Overflow用户

发布于 2011-08-20 01:39:22

代码使用割线方法来计算收益率,我不确定为什么代码不能正常工作,但实现Excel利率函数的更好方法是使用牛顿·拉夫森方法

我将给出Excel用于TVM函数的方程式,您可以从这个方程式中生成函数f(x)来实现牛顿-拉夫森方法

从那里你需要得到f(x)的导数,即f'(x),然后按照本页上关于IRR的说明进行操作。该页介绍了使用牛顿Raphson方法查找IRR,但您可以将本文中的函数f(x)和f'(x)替换为以下函数

代码语言:javascript
复制
f(x) = PV (1+RATE)^NPER + PMT(1+RATE*TYPE)[{(1+RATE)^NPER-1}/RATE] + FV

现在,您需要找到f'(x)并使用牛顿Raphson方法的步骤轮廓

这个Excel RATE calculator是用PHP语言实现的,使用了牛顿·拉夫森方法,因此您可以使用您的测试数据来查看是否获得了所需的结果。请注意,此计算器遵循美国和英国的数字表示法,句点用于表示小数点,而不同于欧洲使用的逗号

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7064753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档