首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >coldfusion IRR计算

coldfusion IRR计算
EN

Stack Overflow用户
提问于 2011-08-19 03:21:24
回答 4查看 3.1K关注 0票数 1

我正在尝试在excel中复制IRR (内部收益率)函数。我在riaforge.com中找到了一个cfc,但它返回的值与excel的irr不同。

牛顿-拉普森方法使用导数,我不确定如何在coldfusion中计算导数。

代码语言:javascript
复制
year    cash flow
----    --------
0       -4000
1       1200
2       1410
3       1875
4       1050 

应该返回14.3% (来自维基百科的例子)

以前有人这么做过吗?谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-08-19 21:23:45

代码语言:javascript
复制
<cffunction name="calcIRR">
    <cfargument name="arrCashFlow" type="Array" required="true" hint="array of cashflow">
    <cfscript>
        var guess = 0.1;
        var inc   = 0.00001;
        do {
            guess += inc;
            npv = 0; //net present value
            for (var i=1; i<=arrayLen(arguments.arrCashFlow); i++)  {
                npv += arguments.arrCashFlow[i] / ((1 + guess) ^ i);    
            }

        } while ( npv > 0 );

        guess =  guess * 100;
    </cfscript>
    <cfreturn guess>
</cffunction>



<cfscript>
    cFlow = arrayNew(1);
    cFlow[1] = -4000;
    cFlow[2] = 1200;
    cFlow[3] = 1410;
    cFlow[4] = 1875;
    cFlow[5] = 1050;

    c = calcIRR(cFlow);
</cfscript>
<cfdump var="#cFlow#">
<cfdump var="#c#">
票数 1
EN

Stack Overflow用户

发布于 2011-08-20 00:48:15

延伸到Jason所说的,你需要实现一个高效工作的代码,而不是依赖Falconeyes建议的蛮力算法。我第一次编写IRR作为服务器端脚本时,它使用暴力,一天后,我的web主机打电话给我,说他们要让我的网站离线,因为代码消耗了100%的系统资源

下面是使用Newton Raphson方法的一步一步的IRR calculation,您可以遵循它并在冷融合中实现这些思想

代码语言:javascript
复制
f(x) = -4000(1+i)^0 +1200(1+i)^-1 +1410(1+i)^-2 +1875(1+i)^-3 +1050(1+i)^-4
f'(x) = -1200(1+i)^-2 -2820(1+i)^-3 -5625(1+i)^-4 -4200(1+i)^-5

x0 = 0.1
f(x0) = 382.0777
f'(x0) = -9560.2616
x1 = 0.1 - 382.0777/-9560.2616 = 0.139965195884
Error Bound = 0.139965195884 - 0.1 = 0.039965 > 0.000001

x1 = 0.139965195884
f(x1) = 25.1269
f'(x1) = -8339.5497
x2 = 0.139965195884 - 25.1269/-8339.5497 = 0.142978177747
Error Bound = 0.142978177747 - 0.139965195884 = 0.003013 > 0.000001

x2 = 0.142978177747
f(x2) = 0.126
f'(x2) = -8256.0861
x3 = 0.142978177747 - 0.126/-8256.0861 = 0.142993440675
Error Bound = 0.142993440675 - 0.142978177747 = 1.5E-5 > 0.000001

x3 = 0.142993440675
f(x3) = 0
f'(x3) = -8255.6661
x4 = 0.142993440675 - 0/-8255.6661 = 0.142993441061
Error Bound = 0.142993441061 - 0.142993440675 = 0 < 0.000001
IRR = x4 = 0.142993441061 or 14.3%
票数 4
EN

Stack Overflow用户

发布于 2011-08-19 03:34:36

我不知道ColdFusion是什么,但是找到IRR的想法很简单。

IRR是一个数字r,使得

代码语言:javascript
复制
sum i = 0 to N C_i * (1 + r)^(-t_i) = 0

N + 1现金流的地方,有时是C_0, C_1, ..., C_N。定义

代码语言:javascript
复制
f(r) = sum i = 0 to N C_i * (1 + r)^(-t_i).

然后

代码语言:javascript
复制
f'(r) = sum i = 0 to N -C_i * (1 + r)^(-t_i - 1).

选择初始猜测r_0并迭代通过

代码语言:javascript
复制
r_{n + 1} = r_n - f(r_n) / f'(r_n)

在您的特定示例中,您有

代码语言:javascript
复制
t_0 = 0     C_0 = -4000
t_1 = 1     C_1 = 1200
t_2 = 2     C_2 = 1410
t_3 = 3     C_3 = 1875
t_4 = 4     C_4 = 1050

试着猜测一下r_0 = 0.1

再说一次,我不知道ColdFusion是什么,但它必须是一种编程语言,所以它应该允许计算基本的数学。

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

https://stackoverflow.com/questions/7112919

复制
相关文章

相似问题

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