公式和函数代码使用手册 - 寿险精算(11)

寿险精算这门课程涉及大量公式和生命表及其转换数据,本文汇总对各章节主要公式、数据和函数代码加以汇总,并提供不同水平学生在线分类练习和综合测试题库模板。
一、利息基础理论
序号 | 名称 | 公式 | 函数 |
---|---|---|---|
1 | 单利函数(利率相等) | webActuary.getDL(m,t,i) | |
2 | 单利累计(利率不相等) | webActuary.getDLs(c,prr) | |
3 | 复利函数(利率相等) | webActuary.getFL(c,t,i) | |
4 | 复利函数(利率不相等) | webActuary.FLs(c,prr) | |
5 | 复贴现函数(利率相等) | webActuary.getTX(c,t,d) | |
6 | 由利率计算贴现率 | webActuary.getDfromI(i) | |
7 | 由贴现率计算利率 | webActuary.getIfromD(d) | |
8 | 由名义利率计算利率 | webActuary.getIfromIm(im,m) | |
9 | 由利率计算名义利率 | webActuary.getImfromI(i,m) | |
10 | 由名义贴现率计算贴现率 | webActuary.getDfromDm(dm,m) | |
11 | 由贴现率计算名义贴现率 | webActuary.getDmfromD(d,m) | |
12 | 由利息率计算利息力 | webActuary.getIwfromI(i) | |
1、类函数样例代码
var m = 13600; //设置投资本金变量
var t = 3; //设置投资期限变量
var p = 0.05; //设置银行利率变量(5%)
var s = webActuary.getDL(m,t,p); //计算到期单利本利和
webTJ.display("到期本利和 = "+s+"(元)",0); //显示计算结果
注:用表中案例函数替换代码中的函数,将案例代码复制到网页后面代码窗口,点击“运行代码”获得计算结果
2、JavaScript样例代码
由利率计算贴现率公式:
var p = 0.05; //设置银行利率变量(5%)
var d = p/(1+p); //由利率计算贴现率
webTJ.display("贴现率 = "+d,0); //显示计算结果
注:当公式比较简单时,可直接编制JavaScript小程序代码,将JavaScript代码复制到网页后面代码窗口,点击“运行代码”获得计算结果计算
二、确定型年金
序号 | 名称 | 公式 | 函数 |
---|---|---|---|
1 | 期初年金现值 | webActuary.getIFA(n,i,0) | |
2 | 期末年金现值 | webActuary.getIFA(n,i,1) | |
3 | 期初年金终值 | webActuary.getIFS(n,i,0) | |
4 | 期末年金终值 | webActuary.getIFS(n,i,1) | |
5 | 延期期初年金现值 | webActuary.getMIFA(n,i,m,0) | |
6 | 延期期末年金现值 | webActuary.getMIFA(n,i,m,1) | |
7 | 延期期初年金终值 | webActuary.getMIFS(n,i,m,0) | |
8 | 延期期末年金终值 | webActuary.getMIFS(n,i,m,1) | |
9 | 期初递增型年金现值 | webActuary.getIIFA(n,i,0) | |
10 | 期末递增型年金现值 | webActuary.getIIFA(n,i,1) | |
11 | 期初递增型年金终值 | webActuary.getIIFS(n,i,0) | |
12 | 期末递增型年金终值 | webActuary.getIIFS(n,i,1) | |
13 | 期初递减型年金现值 | webActuary.getDIFA(n,i,0) | |
14 | 期末递减型年金现值 | webActuary.getDIFA(n,i,1) | |
15 | 期初递减型年金终值 | webActuary.getDIFS(n,i,0) | |
16 | 期末递增型年金终值 | webActuary.getDIFS(n,i,1) | |
17 | 期初等比年金现值 | webActuary.getRIFA(n,i,j,0) | |
18 | 期末等比年金现值 | webActuary.getRIFA(n,i,j,1) | |
19 | 期初等比年金终值 | webActuary.getRIFS(n,i,j,0) | |
20 | 期末等比年金终值 | webActuary.getRIFS(n,i,j,1) | |
21 | 期初年付r次一般年金现值 | webActuary.getGIFA(n,r,i,0) | |
22 | 期末年付r次一般年金现值 | webActuary.getGIFA(n,r,i,1) | |
23 | 期初年付r次一般年金终值 | webActuary.getGIFS(n,r,i,0) | |
24 | 期末年付r次一般年金终值 | webActuary.getGIFS(n,r,i,1) | |
25 | 期初年结k次一般年金现值 | webActuary.getKIFA(n,k,i,0) | |
26 | 期末年结k次一般年金现值 | webActuary.getKIFA(n,k,i,1) | |
27 | 期初年结k次一般年金终值 | webActuary.getKIFS(n,k,i,0) | |
28 | 期末年结k次一般年金终值 | webActuary.getKIFS(n,k,i,1) | |
29 | 连续年金现值 | ||
30 | 连续年金终值 | ||
31 | 期初永续年金现值 | ||
32 | 期末永续年金现值 | ||
33 | 期初年付r次永续年金现值 | ||
34 | 期末年付r次永续年金现值 | ||
1、类函数样例代码
【例1.10】某人从银行贷款20万元用于购买住房,贷款年利率为5%,还款期为30年。如果从第一年开始每年等额还款,求每年还款数额。
解:设每年还款数额为,由于贷款额和还款数额在零时刻的现值是相等的,即,
其中,
webTJ.clear();//清空输出
var m = 200000;//银行贷款额
var i = 0.05;//年利息率
var t = 30;//还款期
var a = webActuary.getIFA(t,i,0);//单位元期初年金现值
webTJ.display("期初年金现值:"+a+"元",0);
var v = webTJ.getDecimal(m/a,2);//每年还款数额
webTJ.display("每年还款数额:"+v+"元",0);
2、JavaScript样例代码
参见【例1.10】
var m = 200000;//银行贷款额
var i = 0.05;//年利息率
var t = 30;//还款期
var a =(1-1/Math.pow (1+i,t))/(1-1/(1+i)); //单位元期初年金现值
var v =m/a; //每年还款数额
webTJ.display("单位元期初年金现值 = "+a,0); //显示计算结果
webTJ.display("每年还款数额 = "+v,0); //显示计算结果
三、债务偿还
1、等额分期偿还
期初等额分期偿还,每年偿还金额R为:
期末等额分期偿还,每年偿还金额R为:
其它指标递推公式为,
注:债务偿还部分基本上都是递推计算,可以根据递推公式采用JavaScript代码结合精算类函数编程输出计算表
【例1.23】某企业向银行借款20000元,期限为5年,年利率为6%。该企业在每年年末以等额分期方式偿还贷款,计算等额分期偿还表。
案例代码
webTJ.clear();
var Bo = 20000;//银行借款额
var p= 0.06;//年利息率
var t = 5;//还款期
var R =Bo/webActuary.getIFA(t,p,1); //每年年末偿还金额
var oArrs = []; //设置数组变量
for (var i=0; i<=t+1; i++) {oArrs[i] = [];} //建立二维数组
oArrs[0][0] = 0; oArrs[0][1] = 0; oArrs[0][2] = Bo; oArrs[0][3] = 0; oArrs[0][4] = 0; //数组赋值
var s1=0;
var s2=0;
var s3=0;
for (var i=1; i<=t; i++) {
oArrs[i][0] = i; //序号
oArrs[i][1] = R; //每年偿还金额
oArrs[i][2] = R*webActuary.getIFA(t-i,p,1); //未偿还余额
oArrs[i][3] = p*oArrs[i-1][2]; //每年偿还利息
oArrs[i][4] = R-oArrs[i][3]; //每年偿还本金
s1+=R; //累计每年偿还金额
s2+=oArrs[i][3]; //累计每年偿还利息
s3+=oArrs[i][4]; //累计每年偿还本金
}
oArrs[t+1][0] = "合计";
oArrs[t+1][1] = s1;
oArrs[t+1][2] = "*";
oArrs[t+1][3] = s2;
oArrs[t+1][4] = s3;
var oStr="<table style='width:100%; font-size:8pt; color:#990000;'>"; //表格HTML字符
oStr+="<tr><th>时期k</th><th>偿还金额R</th><th>未偿还余额B<sub>k</sub></th><th>偿还利息I<sub>k</sub></th><th>偿还本金P<sub>k</sub></th></tr>"; //标题
for (var i=0; i<=t+1; i++) {
oStr+="<tr><td>"+oArrs[i][0]+"</td><td>"+webTJ.getDecimal(oArrs[i][1],2)+"</td><td>"+webTJ.getDecimal(oArrs[i][2],2)+"</td><td>"+webTJ.getDecimal(oArrs[i][3],2)+"</td><td>"+webTJ.getDecimal(oArrs[i][4],2)+" </td></tr>";
}
oStr+="</table>";
webTJ.display(oStr,0); //显示计算表
注:在代码中替换银行借款额、年利息率和还款期指标值可得不同条件计算表。以上过程也可以通过EXCEL计算
2、变额分期偿还
(1)每期偿还本金相等
设每期偿还本金为,年利率为,还款期限为,贷款总金额为。则,
每期未偿还的本金余额:
第期应支付利息:
第期偿还本利和:
支付利息总和:
付款金额总和:
【例1.25】某笔20000元的贷款,每年年末偿还4000元本金,年利率6%,制作贷款偿还表。
解:根据题意还款期限,n = 5。
案例代码
webTJ.clear();
var P = 4000;//银行借款额
var i= 0.06;//年利息率
var n = 5;//还款期
var k = 3; //k个时期
var Bk = (n-k)*P; //第k期未偿还本金余额
var Ik = i*(n-k+1)*P; //第k期应付利息
var Rk = P*(1+i*(n-k+1)); //第k期偿还本利和
var sIn = i*P*n*(n+1)/2; //支付利息总和
var sRn = n*P+i*P*n*(n+1)/2; //付款金额总和
var sPn = n*P; //支付本金总和
var oStr="<table style='width:100%; font-size:8pt; color:#990000;'>"; //表格HTML字符
oStr+="<tr><th>时期k</th><th>未偿还本金余额</th><th>应付利息</th><th>偿还本利和</th><th>偿还本金</th></tr>"; //标题
oStr+="<tr><td>"+k+"</td><td>"+webTJ.getDecimal(Bk,2)+"</td><td>"+webTJ.getDecimal(Ik,2)+"</td><td>"+webTJ.getDecimal(Rk,2)+"</td><td>"+webTJ.getDecimal(sPn,2)+"</td></tr>";
oStr+="</table>";
webTJ.display(oStr,0); //显示计算表
var oStr="<table style='width:100%; font-size:8pt; color:#990000;'>";
oStr+="<tr><th>支付利息总和</th><th>付款金额总和</th><th>支付本金总和</th></tr>";
oStr+="<tr><td>"+webTJ.getDecimal(sIn,2)+"</td><td>"+webTJ.getDecimal(sRn,2)+"</td><td>"+webTJ.getDecimal(sPn,2)+"</td></tr>";
oStr+="</table>";
webTJ.display(oStr,0); //显示计算表
(2)每期递增(减)变额还款
最初贷款额,每期偿还金额为 ,第一笔偿还额为,以后每年递增(减)比例为。则有,
当时,为分期等额还款,此时已知。
第期付款:
第期利息:
第期本金:
第期贷款余额:
【例1.27】某人从银行获得10000贷款,期限为8年,年利率10%。每年年末偿还一次,每次偿还金额以30%递增制作分期偿还表。
案例代码
webTJ.clear();
var Bo = 10000; //银行借款额
var p= 0.1; //年利息率
var q= 0.3; //年利息率
var t = 8; //还款期
var R; //第一笔偿还额
if (p!=q) {
R = (Bo*(1-(1+q)/(1+p)))/(1/(1+p)*(1-Math.pow((1+q)/(1+p),t)));
} else {
R = Bo/webActuary.getIFA(t,p,1);
}
var oArrs = []; //设置数组变量
for (var i=0; i<=t+1; i++) {oArrs[i] = [];} //建立二维数组
oArrs[0][0] = 0; oArrs[0][1] = 0; oArrs[0][2] = 0; oArrs[0][3] = 0; oArrs[0][4] = Bo; //数组赋值
var s1=0;
var s2=0;
var s3=0;
for (var i=1; i<=t; i++) {
oArrs[i][0] = i; //序号
oArrs[i][1] = R*Math.pow(1+q,i-1); //第k期付款
oArrs[i][2] = p*oArrs[i-1][4]; //第k期利息
oArrs[i][3] = oArrs[i][1]-oArrs[i][2]; //第k期本金
oArrs[i][4] = oArrs[i-1][4]-oArrs[i][3]; //第k期贷款余额
s1+=oArrs[i][1]; //累计每年偿还金额
s2+=oArrs[i][2]; //累计每年偿还利息
s3+=oArrs[i][3]; //累计每年偿还本金
}
oArrs[t+1][0] = "合计";
oArrs[t+1][1] = s1;
oArrs[t+1][2] = s2;
oArrs[t+1][3] = s3;
oArrs[t+1][4] = "*";
var oStr="<table style='width:100%; font-size:8pt; color:#990000;'>"; //表格HTML字符
oStr+="<tr><th>时期k</th><th>偿还金额R<sub>k</sub></th><th>偿还利息I<sub>k</sub></th><th>偿还本金P<sub>k</sub></th><th>未偿还余额B<sub>k</sub></th></tr>"; //标题
for (var i=0; i<=t+1; i++) {
oStr+="<tr><td>"+oArrs[i][0]+"</td><td>"+webTJ.getDecimal(oArrs[i][1],2)+"</td><td>"+webTJ.getDecimal(oArrs[i][2],2)+"</td><td>"+webTJ.getDecimal(oArrs[i][3],2)+"</td><td>"+webTJ.getDecimal(oArrs[i][4],2)+"</td></tr>";
}
oStr+="</table>";
webTJ.display(oStr,0); //显示计算表
3、偿债基金
记为借款人每期向偿债基金储蓄的金额。偿债基金各期利率为、银行贷款利率为,贷款期为,期初贷款额为,则有,
各期利息:
每期向偿债基金储蓄金额:
每期支付总额为:
第期末贷款余额为:
第期偿债基金的余额:
第期偿债基金所生成的利息:
第期实际支付的利息:
式中,偿债基金每期产生的利息为上期期末累积值与基金利率的乘积。时,等额偿债基金等价于等额分期还款。
【例1.28】某笔20000元的贷款,基金存款年利率5%,银行贷款年利率6%,贷款期限为5年。制作等额偿债基金表。
四、生命表数据资料及引用
生命表结构数据包中包括在一定人口基数水平下(通常为一百万),以不同生命表为基础计算出的各年龄存活人数、死亡人数等重要指标。
基数 生命表
注:设置人口基数、选择生命表可获得不同条件水平下的生命表结构数据表
在一定利率水平条件下,不同时期和种类的生命表可以计算出无数转换基数表,引入转换基数可以建立较简洁的趸缴纯保费计算公式。
银行利率 生命表
年龄(x) | Dx | Nx | Sx | Cx | Mx | Rx |
---|---|---|---|---|---|---|
0 | 1000000 | 20033986.54 | 375885120.8 | 0 | 45999.349 | 2180557.499 |
1 | 949488.5714 | 19033986.54 | 355851134.3 | 2892.381 | 45999.349 | 2134558.15 |
2 | 902324.3084 | 18084497.97 | 336817147.7 | 1950.5215 | 43106.9681 | 2088558.801 |
3 | 857972.0635 | 17182173.66 | 318732649.7 | 1384.4207 | 41156.4465 | 2045451.833 |
4 | 816094.8576 | 16324201.6 | 301550476.1 | 1021.3933 | 39772.0258 | 2004295.387 |
5 | 776455.9633 | 15508106.74 | 285226274.5 | 777.2345 | 38750.6325 | 1964523.361 |
6 | 738874.7564 | 14731650.78 | 269718167.7 | 607.1134 | 37973.398 | 1925772.728 |
7 | 703204.6925 | 13992776.02 | 254986517 | 485.5517 | 37366.2846 | 1887799.33 |
8 | 669321.6125 | 13289571.33 | 240993740.9 | 397.1423 | 36880.7329 | 1850433.046 |
9 | 637117.6839 | 12620249.72 | 227704169.6 | 331.4708 | 36483.5907 | 1813552.313 |
10 | 606494.7749 | 11983132.03 | 215083919.9 | 283.9717 | 36152.1199 | 1777068.722 |
注:设置银行利率、选择生命表或点击“运 行”按钮可获得不同条件水平期望值基数表
3、数据引用
(1)转换公式(表 - 2)
,
,
;
,
,
(2)获得指定生命表x岁的存活人数(基数100万人)[返回]
函数:webActuary.getSCRS(x,smb);
参数:x - 年龄;smb - 生命表索引代码
注:生命表索引代码:CL93M,CL93F,CL93U,CL93AM,CL93AF,CL93AU,CL03M,CL03F,CL03AM,CL03AF,CL13M1,CL13F1,CL13M2,CL13F2,CL13AM,CL13AF
样例代码
webTJ.clear();
var oS=webActuary.getSCRS(2,"CL93U");
webTJ.display(oS,0);
注:0岁时100万人(基数100万人),依据生命表CL93U获得2岁时的存活人数
(3)获得生命表结构数组[返回]
函数:webActuary.getJGArrs(smb);
参数:smb - 生命表索引代码
注:该函数根据指定生命表索引代码返回生命表结构数组(参见”表 - 1:生命表结构数据“),各列数据依次为:
样例代码
webTJ.clear();
var myArrs=webActuary.getJGArrs("CL93M");
webTJ.display(myArrs[20][6],0); //CL93M表(20)平均剩余寿命
webTJ.display(myArrs[50][2],0); //CL93M表(50)存活人数
参考文献:生命表 - 寿险精算(6)
二、公式和代码函数
三、分类练习
四、水平测试
代码窗口
注:可将例题实例代码复制、粘贴到“代码窗口”,点击“运行代码”获得计算结果(鼠标选择实例代码Ctrl+C:复制鼠标点击“代码窗口”使其获得焦点Ctrl+V:粘贴)
代码运行效果
上篇文章:责任准备金 - 寿险精算(10)
银河统计工作室成员由在校统计、计算机部分师生和企业数据数据分析师组成,维护和开发银河统计网和银河统计博客(技术文档)。专注于数据挖掘技术研究和运用,探索统计学、应用数学和IT技术有机结合,尝试大数据条件下新型统计学教学模式。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架