CF1 CF2 CFn
C0 = -------------- + -------------- + ...... + -------------- 1 2 n
(1+IRR) (1+IRR) (1+IRR)
也就是:
n CFt
C0 = Σ ----------------
t=1 (1+IRR)t 现在要求IRR的解?如何解法?
请数学高手帮忙看看,提供个思路后者C/JAVA算法都可以.
C0 = -------------- + -------------- + ...... + -------------- 1 2 n
(1+IRR) (1+IRR) (1+IRR)
也就是:
n CFt
C0 = Σ ----------------
t=1 (1+IRR)t 现在要求IRR的解?如何解法?
请数学高手帮忙看看,提供个思路后者C/JAVA算法都可以.
解决方案 »
- java.util.logging.Logger类的使用:如果生成的aaa.log.n文件被打开时,log数据丢失。
- Serializable 问题
- 新手遇到的几个不理解的问题?
- [200分]关于和OutputStream类中的"input"和"output"的含义该如何解释,什么时候该用InputStream,什么时候用outputStream;
- 如何用java语言访问远程服务器上的文件
- Linux平台上图形程序运行出错的问题
- 请教关于java库的调试
- 一个看似很简单,却始终让我想不明白的问题。
- 一个很菜的问题
- [正则表达式]正则表达式无法匹配,why?
- 问下 db2数据库的jdbc哪里有?
- 很小一个问题,望赐教.
XML 在一个节点下的数据区分和parse 链接很难的!
嘿嘿,也许CSDN该增加两个节点,一个是图片地址,一个是引用链接地址了.
Σ ---------------- (1)
t=1 (1+IRR)^t
是IRR的单调函数,因此可以用二分,具体算法如下:初始化IRR_l,IRR_r,只要让IRR_l,IRR_r代入(1)式求出C_l,C_r,确保IRR_l>C0>IRR_r ,这个容易做到,
比如可以:
IRR_l=0
IRR_r=1e10 一个比较大的数字
while(IRR_r-IRR_l>1e-6)
{
IRR_m=(IRR_l+IRR_r)/2;
把IRR_m代入(1)求出C_m,
if(C_m>C0)IRR_l=IRR_m;
else IRR_r=IRR_m;
}
IRR_m=(IRR_l+IRR_r)/2
就是你要的解
* @param args
*/
public static double countIRR(double IRR,int n,double CF[])
{
//IRR內涵報酬率
//n運算期數
//CF[]現金流量
double C0=0;
int i;
for(i=1;i<n+1;i++)
{
C0=C0+CF[i]/(Math.pow(1+IRR,i));//運算公式
}
return C0;
}
public static void main(String[] args) {
// 程式方法:採用二分法獲取IRR
double IRR=0;//內涵報酬率
double C0=95000;//貸款金額-帳管費
double IRR_S=0;//IRR可能開始值
double IRR_E=1;//IRR可能結束值
double Cn=0;
int i=0;
int n=36;//運算期數
double CF[]=new double[n+1];//現金流量值
for(i=1;i<n+1;i++)
{
CF[i]=3227.0;//1-36期的現金流量值
}
while(IRR_E-IRR_S>0.00000001)
{
IRR=(IRR_S+IRR_E)/2;
Cn=countIRR(IRR,n,CF);
if(Cn>C0)
IRR_S=IRR;
else
IRR_E=IRR;
}
System.out.println("IRR="+IRR);
System.out.println("用IRR運算到的C0值="+countIRR(IRR,n,CF));
}}