二分搜索求利率近似解
2017-02-19 15:03
211 查看
问题背景:零存整取的保险利率求解
问题假设:因为不清楚真实的保险金额计算过程,所以假定为每年存入一定金额everyyear,在连续购买nbought年之后,再保障nwork-nbought年。在nwork年之内对被保险人有保障,(nbought<=nwork)。nwork年之后返还总金额totalmoney。
现在已知,nwork年后保险的返还总金额totalmoney和上述变量值,求解年化利率(当年的本金为上一年度本金与利息之和)。
问题求解:当然是二分查找了,在某一个给定的区间去搜索一个符合精度要求的利率,复杂度为O(log2(n))。
代码中的数据都是真实值,起初看到总的回报率超过了200%,我以为这真的是搞金融的良心发现了。得到计算结果后,我的心凉了一半,因为模拟得到的年化利率只有20%多,并不是非常高。况且考虑到货币贬值的影响,这种投资连抵消通货膨胀的作用都没有达到。
心塞~想去做金融
问题假设:因为不清楚真实的保险金额计算过程,所以假定为每年存入一定金额everyyear,在连续购买nbought年之后,再保障nwork-nbought年。在nwork年之内对被保险人有保障,(nbought<=nwork)。nwork年之后返还总金额totalmoney。
现在已知,nwork年后保险的返还总金额totalmoney和上述变量值,求解年化利率(当年的本金为上一年度本金与利息之和)。
问题求解:当然是二分查找了,在某一个给定的区间去搜索一个符合精度要求的利率,复杂度为O(log2(n))。
代码中的数据都是真实值,起初看到总的回报率超过了200%,我以为这真的是搞金融的良心发现了。得到计算结果后,我的心凉了一半,因为模拟得到的年化利率只有20%多,并不是非常高。况且考虑到货币贬值的影响,这种投资连抵消通货膨胀的作用都没有达到。
心塞~想去做金融
public class Main{ public static void main(String args[]){ double everyyear=480; double totalmoney=20000; int nbought=16; int nwork=20; double lilv=computelilv(everyyear,totalmoney,nbought,nwork); System.out.println("年化:"+lilv); } static double computelilv(double everyyear,double totalmoney,int nbought,int nwork) { Double lixi=0.0; //初始的利息与本金和为零 Double lilv=0.5; //初始年化利率为0.5 double lowlimit=0,highlimit=1; //利率上下界 do{ lixi=0.0; for(int i=0;i<nbought;i++){ lixi+=(lixi+everyyear)*lilv; }//在购买年限内,每年都投入本金,以复利方式计算利息 for(int i=0;i<(nwork-nbought);i++){ lixi+=lixi*lilv; }//在保障年限内,不追加本金,复利计算利息 System.out.printf("%f %.8f\n", lixi,lilv); if(lixi>totalmoney){ //根据二分法调整利率 highlimit=lilv; lilv=(highlimit+lowlimit)/2; }else{ lowlimit=lilv; lilv=(highlimit+lowlimit)/2; } }while(Math.abs(lixi-totalmoney)>0.01); //当真实的总金额与以猜测的利率生成的总金额的绝对差小于阈值时,停止迭代 return lilv; } }
相关文章推荐
- 暑假集训--训练1 二分搜索
- NYOJ 586 疯牛 & POJ 2456(二分搜索 + 贪心)(最大化最小值)
- 乘积量化( Product Quantization )近似最近邻搜索 分享
- 算法与数据结构-二分搜索 讲解与java代码实现
- 二分搜索树--完整版
- 二分搜索树,堆,及优先队列
- 自己胡乱写了个二分搜索,求鉴定。急,
- 寻找最大的K个数(二):快排优化和二分搜索
- 北大ACM2456——Aggressive cows~~二分搜索
- nyoj Yougth的最大化 914 (二分搜索)
- 34. Search for a Range 史上最简洁的二分搜索的写法
- Dfs+二分搜索(台州4310 走迷宫)
- 【1】【二分搜索】CodeForces 650B Image Preview
- 二分搜索——34. Search for a Range
- 【LeetCode题目记录-13】二分搜索排序后的二维数组
- POJ 2456 Aggressive cows(二分搜索,最大化最小值)
- POJ 3104 Drying(二分搜索,最大化最小值)
- 2017浙工大之江学院校赛 E 折半搜索+二分
- 关于二分搜索的一点思考
- 二分搜索相关及循环有序序列相关