問題背景:零存整取的保險利率求解
問題假設:因為不清楚真實的保險金額計算過程,所以假定為每年存入一定金額everyyear,在連續(xù)購買nbought年之后,再保障nwork-nbought年。在nwork年之內(nèi)對被保險人有保障,(nbought<=nwork)。nwork年之后返還總金額totalmoney。
現(xiàn)在已知,nwork年后保險的返還總金額totalmoney和上述變量值,求解年化利率(當年的本金為上一年度本金與利息之和)。
問題求解:當然是二分查找了,在某一個給定的區(qū)間去搜索一個符合精度要求的利率,復雜度為O(log2(n))。
代碼中的數(shù)據(jù)都是真實值,起初看到總的回報率超過了200%,我以為這真的是搞金融的良心發(fā)現(xiàn)了。得到計算結果后,我的心涼了一半,因為模擬得到的年化利率只有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; }//在購買年限內(nèi),每年都投入本金,以復利方式計算利息 for(int i=0;i<(nwork-nbought);i++){ lixi+=lixi*lilv; }//在保障年限內(nèi),不追加本金,復利計算利息 System.out.printf("%f %.8f/n", lixi,lilv); if(lixi>totalmoney){ //根據(jù)二分法調(diào)整利率 highlimit=lilv; lilv=(highlimit+lowlimit)/2; }else{ lowlimit=lilv; lilv=(highlimit+lowlimit)/2; } }while(Math.abs(lixi-totalmoney)>0.01); //當真實的總金額與以猜測的利率生成的總金額的絕對差小于閾值時,停止迭代 return lilv; }}
新聞熱點
疑難解答