从业N年,一直做企业内部系统。
数年前,ITS部门来了一个A国(not USA)人,年龄比咱还小一轮。当然,自小喝洋墨水长大的,英语很溜。有次喝高了,对咱很不客气地说,你念那多书有啥用?我连大学的门都没进过,照样级别比你高一级。我听后很郁闷。但仔细想来,做公司内部系统吧,小学程度,会四则运算,逻辑上不糊涂,就可在世界500强企业的ITS部门混饭吃。
又过了几年,那A国人又高就别处,咱还照样做着小学生就能做的事情。这事情就一个结,从未了结。
最近,终于有个机会让咱用了一回高等数学。给读书无用论一记响亮的耳瓜。
做生意,图回报,这是真理。投入多少,多长时间能收回,这就要计算IRR。用EXCEL的话,简单,用Oracle的话,麻烦。(这不是开玩笑,因为Excel装备有计算IRR的函数,而Oracle则是在价格不菲的OLAP软件中才提供了计算IRR的功能。)
IRR如何计算,有兴趣的朋友可参考
WikiPedia:http://en.wikipedia.org/wiki/Internal_rate_of_return
或 http://zainco.blogspot.jp/2008/08/internal-rate-of-return-using-newton.html
或 http://www.corality.com/tutorials/iterative-approach-calculating-internal-rate-return-irr
当npv=0时的r就是IRR。
展开后就是个多项式,
当多项式等于0时,r等于多少?
这个问题没有精确解(解析解),只有近似解(数值解)。
通常使用的方法是Newton-Raphson方法。
咱还是实用主义,先看编码。
原理可参考以上几个URL。
PL/SQL编码
1. 计算XIRR的函数
这段代码是从Oracle Forum上抄来的, http://forums.oracle.com/forums/thread.jspa?threadID=549939
必须预先定义2个Type:
create or replace type p_date_array is varray(250) of date;
create or replace type t_amount_array is varray(250) of number;
create or replace FUNCTION "XIRR" (p_date_array in p_date_array,
p_amount_array in t_amount_array,