請教一利率算法,分不夠另開帖


已知某一天(日期D)借款M元,現等期限還款,還款日期、金額依次分別為:
d1,m1
d2,m2
.  .
.  .
d(n),m(n)    其中(m1+m2+...+m(n))>M,D<d1
共n期,求借款月利率(按月復利)
有否現成的計算程序?

8 个解决方案

#1


難道這里沒有金融方面的大俠嗎?

#2


蠻繁的,要解一個高次方程,可以用迭代法逼近。

#3


誰有現成的程序,1k分送上

#4


除非有現成的,否則不是立時立刻就能出手的。

#5


好象向銀行貸款,銀行就要給你一張清單,叫你幾次還款,還款日期、金額依次寫成了一個你所希望要的那種結果。

#6


對,就是這意思,那位大蝦有現成的程序嗎,給高分。

#7


月利率M 是不是可以這樣表示:
假如每日利率D ,一個月有n天,
1+M=(1+D)^n,對嗎?

#8


方程你應該會列吧,設利率是x,根據那些還款規則,最后還清,得到一個方程:
f(x)=0;再把f'求出來,代入到程序中的Func函數中就行了。
迭代初值x就是你猜測的利率,一般設0就行了。也可以設成可能的利率值。
//////////////////////////////////////////////////////////////////////
// 求非線性方程一個實根的牛頓法
//
// 調用時,須覆蓋計算方程左端函數f(x)及其一階導數f'(x)值的虛函數
//                  void Func(double x, double y[])
//         y(0) 返回f(x)的值
//         y(1) 返回f'(x)的值
//
// 參數:
// 1. double *x - 傳入迭代初值(猜測解),返回在區間求得的一個實根
// 2. int nMaxIt - 遞歸次數,默認值為60
// 3. double eps - 精度控制參數,默認值為0.000001
//
// 返回值:BOOL 型,求解是否成功
//////////////////////////////////////////////////////////////////////
BOOL CNLequation::GetRootNewton(double* x, int nMaxIt /*= 60*/, double eps /*= 0.000001*/)

    int l;
    double y[2],d,p,x0,x1;

// 條件值
    l=nMaxIt; 
x0=*x;
    Func(x0,y);
    
// 求解,控制精度
d=eps+1.0;
    while ((d>=eps)&&(l!=0))
    { 
if (y[1] == 0.0)
return FALSE;

        x1=x0-y[0]/y[1];
        Func(x1,y);
        
d=fabs(x1-x0); 
p=fabs(y[0]);
        if (p>d) 
d=p;
        x0=x1; 
l=l-1;
    }
    
*x=x1;

return TRUE;
}

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com