一阶差分方程的C++递归算法(由房贷想到的)
来源:互联网 发布:mac excel vb 编辑:程序博客网 时间:2024/04/30 08:33
最近办公室的好多同志都在买房了,我了解了等月还款的方式。其实是一个一阶差分方程。
设总贷款数为y0,分n月换清,月利率为Rate,每月换M,那么得到以下递推公式:
第一月还款后:y1 = y0*(1+Rate)-M 还有y1这么多未还
第二月还款后:y2 = y1*(1+Rate)-M 还有y2这么多未还
...................................................
第k月后(k<n):yk = y(k-1)*(1+Rate)-M 其实这就是一阶差分方程。
...................................................
第n月后: yn = y(n-1)*(1+Rate)-M 此时已经还完了,yn=0。
熟悉差分方程的,还是一阶的差分方程,可以很快写出公式。当然可以通过递推公式,从后面带入前面的公式,也可以找出规律,计算出公式:
M = y0*(1+Rate)^n/((1+Rate)^n-1)
不过这里,我想实现的,并不需要太多数学的知识,而是通过迭代公式,通过设定一个M的初始值,然后逐次逼近。以下是这个算法。
//total 贷款总数
//permonth 每月还款数
//rate 月利率
//count 总共还款次数(多少个月换)
float calculate(float total, float permonth, float rate, int count)
{
if(count == 1)
return total*(1.+rate) -permonth;
else
return calculate(total, permonth, rate, count-1)*(1.+rate) - permonth;
}
void main()
{
float total = 100000.; //假设贷款10W
int count = 120; //假设分10年还完
float permonth = total/count; //假设银行不收利息,得到初始值(不过银行是不会不收利息的,不过我们需要一个近似的值)
float rate = 0.0513/12.; //月利率
float temp = 0;
int num = 0;
while(true)
{
temp = calculate(total, permonth, rate,count); //得到没有换完的数,根据这个值进行修正!
num++;
if(temp<1. && temp>-1.)
{
printf("%f ---------------%d/n",permonth, num);
break;
}
else
permonth += temp/count; //逐次修正这个值
}
}
这样计算,是不是根本就不需要知道这个差发方程的公式呢!
- 一阶差分方程的C++递归算法(由房贷想到的)
- 基于MPI的三维各向同性一阶声波方程有限差分地震正演模拟
- 基于GPU加速的三维VTI介质一阶拟声波方程有限差分地震正演模拟
- 基于GPU加速的二维VTI介质一阶拟声波方程有限差分地震正演模拟
- 基于GPU加速的二维TTI介质一阶拟声波方程有限差分地震正演模拟
- 基于MPI的二维VTI介质一阶拟声波方程有限差分地震正演模拟
- 基于MPI的三维各向同性一阶声波方程有限差分地震正演模拟(Poynting波场分离)
- 由C语言想到的
- 等差数列和的差分方程
- 等比数列和的差分方程
- 特殊形式的差分方程
- 特殊形式的差分方程(改变)
- 椭圆形方程的差分解法
- 递归方程组解的渐进阶的求法——差分方程法
- 求一列数一阶差分的和
- pandas 中diff 一阶差分的理解
- 基于MPI的二维VTI介质一阶拟声波方程有限差分地震正演模拟(一维数组)
- 算法复杂度的差分方程推导(n*log n的扩展)
- WinHex.14.7.SR-1_KEYGEN-FFF
- Linux设置JDK环境变量
- Jabber 协议 概述
- 凭啥不让人家罗京唱流行歌曲
- ECLIPSE快捷键说明
- 一阶差分方程的C++递归算法(由房贷想到的)
- sql常用函数
- 终于开博了!
- 如何实现SQL Server 2005快速Web分页
- Java 实验7
- Linux: The Complete Reference
- Oracle Automatic Storage Management
- O'Reilly JavaScript and DHTML Cookbook
- SNMP的5种协议数据单元