从业N年初次用到高等数学:用PL/SQL算IRR

本文讲述了在从业经历中初次使用高等数学解决实际问题,通过Oracle的PL/SQL实现IRR(内部收益率)的计算,详细介绍了Newton-Raphson方法,并提供了相关函数的代码示例,对比了与Excel的计算结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从业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

 

\mathrm{NPV} = \sum_{n=0}^{N} \frac{C_n}{(1+r)^{n}}

当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,
               
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值