Rate本质就是根据PMT公式反推利率而已,但是因为rate没有界限及收敛域所以没法通过简单的极限求解来获取解。

最终就是通过牛顿迭代式,利用切线与曲线的关系构建新的收敛函数,求最优解。

1、构建利率函数【来源PMT公式】

f(rate)=fv+pv∗(rate+1)nper+pmt∗(1+rate∗type)∗(rate+1)nper−1ratef(rate)=fv+pv*(rate+1)^{nper}+pmt*(1+rate*type)*\frac{(rate+1)^{nper}-1}{rate} f(rate)=fv+pv∗(rate+1)nper+pmt∗(1+rate∗type)∗rate(rate+1)nper−1​

2、求解利率函数的导数

f(rate)‘=pv∗nper∗(1+rate)nper−1+pmt∗(1+rate∗type)∗nper∗(1+rate)nper−1rate−pmt∗(1+rate∗type)∗(1+rate)nper−1rate2+pmt∗type∗(1+rate)nper−1ratef(rate)^`=pv*nper*(1+rate)^{nper-1}+pmt*(1+rate*type)*nper*\frac{(1+rate)^{nper-1}}{rate}-pmt*(1+rate*type)*\frac{(1+rate)^{nper}-1}{rate^2}+pmt*type*\frac{(1+rate)^{nper}-1}{rate} f(rate)‘=pv∗nper∗(1+rate)nper−1+pmt∗(1+rate∗type)∗nper∗rate(1+rate)nper−1​−pmt∗(1+rate∗type)∗rate2(1+rate)nper−1​+pmt∗type∗rate(1+rate)nper−1​

3、构建切线函数

raten+1=raten−f(raten)f(raten)‘rate_{n+1}=rate_n-\frac{f(rate_n)}{f(rate_n)^`} raten+1​=raten​−f(raten​)‘f(raten​)​

public class RateFunction {/*** f(rate)/f(rate)'** @param rate 利率* @param pv   本金* @param nper 期数* @param fv   尾款* @param pmt  月供* @param type 先付:0,后付:1* @return*/public static double getRate(double rate, double pv, int nper, double fv, double pmt, int type) {double t1 = Math.pow(rate + 1, nper);double t2 = Math.pow(rate + 1, nper - 1);return (fv + pv * t1 + pmt * (1 + rate * type) * (t1 - 1) / rate) /(pv * nper * t2 - pmt * (1 + rate * type) * (t1 - 1) / Math.pow(rate, 2)+ pmt * (1 + rate * type) * nper * t2 / rate+ pmt * type * (t1 - 1) / rate);}/*** 计算真实利率* <p>* 理论基础:牛顿迭代式 https://www.matongxue.com/madocs/205* <p>* rate算法的本质就是根据pv\nper\fv\pmt\type反推rate* <p>* 所以根据PMT公式构建f(rate)函数:* <p>* f(rate)=fv+pv(rate+1)^nper+pmt*(1+rate*type)*(-1+(rate+1)^nper)/rate* <p>* 数学模型:* <p>* 求解:f(rate)=0?* <p>* 因为rate没有确定收敛区间,所以没法简单通过求极限的方式获取最优解。* <p>* 所以采用牛顿迭代式来取最优解* <p>* 构建切线函数:rate<n+1>=rate<n>-f(rate<n>)/f(rate<n>)'* <p>* |rate<n+1>-rate<n>| ↔ vol => f(rate) ↔ 0* <p>* f(rate)函数已知,得到f(rate)',最后根据收敛精度及迭代次数求得极限值rate* <p>* 采用这种计算方式有一定的问题的。** @param pv      本金* @param nper    期数* @param fv      尾款* @param pmt     月供* @param type    先付:0,后付:1* @param guess   初始值* @param vol     收敛精度* @param maxiter 最大迭代次数* @return*/public static double rate(double pv, int nper, double fv, double pmt, int type, double guess, double vol, int maxiter) {double rn = guess;int idx = 0;boolean isClose = false;while (idx < maxiter && !isClose) {double rnp1 = rn - getRate(rn, pv, nper, fv, pmt, type);double diff = Math.abs(nper - rn);isClose = diff < vol;idx++;rn = rnp1;}return rn;}public static void main(String[] args) {System.out.println(rate(-64940, 48, 10000, 1677.13, 1, 0.1, 1e-6, 20));System.out.println(rate(-94940, 48, 10000, 1677.13, 1, 0.1, 1e-6, 20));System.out.println(rate(-164940, 48, 10000, 1677.13, 1, 0.1, 1e-6, 20));}
}

运行结果:

参考:

Typore使用数学公式

如何通俗易懂地讲解牛顿迭代法?

金融rate函数解析【附java实现】相关推荐

  1. 手把手搭建Java金融借贷系统【附源码】(毕设)

    一.项目简介 本课程演示的是一套基于基于JavaWeb实现的金融借贷系统 或 P2P金融管理系统 或 小额贷款系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的java人群. 详细介绍 ...

  2. 视频教程-手把手搭建Java金融借贷系统【附源码】(毕设)-Java

    手把手搭建Java金融借贷系统[附源码](毕设) 南京大学软件工程硕士,全栈开发工程师,全栈讲师. 曾就职于中软国际.擎天科技.华为等公司,擅长Java开发.Web前端.Python爬虫.PHP等领域 ...

  3. c语言注释语句执行吗,C语言学习笔记之C语言概念解析(附资料分享)每一个语句都必须以分号结尾但预处理命令函数头和花括号“}”之后不能加分号...

    [[怪兽爱C语言]C语言学习笔记之C语言概念解析(附资料分享)]https://toutiao.com/group/6582429294901854728/?iid=15906422033&a ...

  4. C++虚函数表实现详细解析 (附示例)

    目录 前言 运行环境 什么是虚函数 简单示例 虚函数的实现原理 虚函数表 通过虚表找到函数地址并调用 虚函数表的具体分析 无继承关系时的虚函数表 单继承但未重写虚函数时的虚函数表 单继承且重写虚函数时 ...

  5. 网络爬虫讲解(附java实现的实例)

    luojinping的专栏 目录视图 摘要视图 订阅 CSDN日报20170219--<程序员的沟通之痛>      [技术直播]揭开人工智能神秘的面纱        程序员1月书讯    ...

  6. oracle rpad mysql_Oracle生成不重复票号与LPAD,RPAD与NEXTVAL函数解析

    SELECT TO_CHAR(SYSDATE,'YYMMDD')||LPAD(REFUNDSEQ.NEXTVAL,6,'0') AS RES_ORDER_NO FROM DUAL 该语句拼接 时间 与 ...

  7. 你了解欧拉回路吗?(附Java实现代码)

    文章目录 一:什么是欧拉回路? 二: 无向图中欧拉回路存在的条件 三:如何得到欧拉回路 四:Java实现 一:什么是欧拉回路? 不知道你有没有玩过这样一种叫"一笔画",从某一点开始 ...

  8. c++ _int64转字符串_C语言 仿JS的eval函数 解析字符串

    C语言 利用后缀表达式解析字符串(符合c98标准,很容易移植到计算器上) 最近用98标准的C语言写了个解析字符串,类似于JavaScript中的eval函数,感觉挺实用(移植到了计算器上,可以画F(X ...

  9. AOSP6.0.1 launcher3入门篇-解析DeviceProject.java及相关文件

    上一篇文章(AOSP6.0.1 launcher3入门篇-解析launcher.java文件)描述了launcher3的加载过程,本篇文章记录hotseat停靠方向和位置.隐藏页指示器.Folder大 ...

  10. 一致性哈希算法 mysql_一致性哈希算法 CARP 原理解析, 附 Golang 实现

    一致性哈希算法 CARP 原理解析, 附 Golang 实现 在后端服务开发的过程中, 遇到了这样一个问题: 需要在 mysql 前面部署 redis 做一层缓存, 要求 redis 是集群部署, 并 ...

最新文章

  1. .net core 微服务_.NET 微服务实战之负载均衡(上)
  2. 如何测试一个网页登陆界面
  3. 历史上的今天:编程语言中null引用的十亿美元错误
  4. 期中HTML代码及技术博客
  5. OpenCV之滑动条的创建和使用
  6. mongodb的连接和开启安全验证
  7. Linux -- sudoers (简单:转)
  8. 十六进制高低位转换,返回十进制数
  9. python进阶书籍 流畅的python
  10. Elasticsearch系列——(1.2)倒排索引 的实现
  11. Win10巧用自带输入法轻松打出特殊字符
  12. 全景图下载,全景管家高清全景图(一键下载建E、720云全景原图)
  13. USACO 2007 Dec Silver Mud Puddles bfs or A-star
  14. 微信公众号wifi链接php,TP路由器实现关注微信并认证后连接WIFI上网
  15. 中国最美丽的地方排行榜国家地理
  16. 使用码云同步谷歌 Chrome 浏览器书签
  17. 是否需要这么一支“特别行动队”?
  18. PIPE接口基本描述
  19. RTOS与linux区别
  20. CSS之控制所有p段落,首行缩进两个字符!...

热门文章

  1. 对搜索引擎技术的认识和发展
  2. 用php表示掷骰子两次比大小,[宜配屋]听图阁
  3. java基于SSM的疫情物业系统源码
  4. 广汽埃安发布新LOGO,推出全新高端品牌Hyper昊铂
  5. android icon psd,60个PSD格式的ICON和按钮模板
  6. 谷歌浏览器2016旧版本_浏览器趋势2016年3月:操作系统令人惊讶
  7. vue2.0 唤起百度地图app_高德地图公测“你好小德”语音助手:解决十大驾车导航痛点...
  8. 三国管理智慧之刘备的管理之道
  9. Unity 混音器AudioMixer使用注意
  10. raft论文阅读理解翻译