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

(2017-11-30银河统计)


寿险精算这门课程涉及大量公式和生命表及其转换数据,本文汇总对各章节主要公式、数据和函数代码加以汇总,并提供不同水平学生在线分类练习和综合测试题库模板。

一、利息基础理论

序号名称公式函数
1单利函数(利率相等)A(t)=A(0)(1+t×i)webActuary.getDL(m,t,i)
2单利累计(利率不相等)A(t)=A(0)(1+i1+i2+i3++it)webActuary.getDLs(c,prr)
3复利函数(利率相等)A(t)=A(0)(1+i)twebActuary.getFL(c,t,i)
4复利函数(利率不相等)A(t)=A(0)(1+i1)(1+i2)××(1+it)webActuary.FLs(c,prr)
5复贴现函数(利率相等)A(t)=A(0)×(1d)twebActuary.getTX(c,t,d)
6由利率计算贴现率d=i1+iwebActuary.getDfromI(i)
7由贴现率计算利率i=d1dwebActuary.getIfromD(d)
8由名义利率计算利率i=(1+i(m)m)m1webActuary.getIfromIm(im,m)
9由利率计算名义利率i(m)=m×[(1+i)1m1]webActuary.getImfromI(i,m)
10由名义贴现率计算贴现率d=1(1d(m)m)mwebActuary.getDfromDm(dm,m)
11由贴现率计算名义贴现率dm=m×[1(1d)1m]webActuary.getDmfromD(d,m)
12由利息率计算利息力δ=limmi(m)webActuary.getIwfromI(i)
将案例代码复制到网页后面代码窗口,点击“运行代码”获得计算结果。表中,A(0)、c - 本金、t - 投资期、i - 利率、prr - 各期利率数组、d - 贴现率、im - 名义利率、dm -名义 贴现率、n - 结算次数。

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样例代码

由利率计算贴现率公式:d=i1+i

var p = 0.05; //设置银行利率变量(5%)
var d = p/(1+p); //由利率计算贴现率
webTJ.display("贴现率 = "+d,0); //显示计算结果

注:当公式比较简单时,可直接编制JavaScript小程序代码,将JavaScript代码复制到网页后面代码窗口,点击“运行代码”获得计算结果计算

二、确定型年金

序号名称公式函数
1期初年金现值a¨n=1+v+v2++vn1=1vn1v=1vndwebActuary.getIFA(n,i,0)
2期末年金现值an=v+v2++vn=1vniwebActuary.getIFA(n,i,1)
3期初年金终值s¨n=(1+i)+(1+i)2++(1+i)n=(1+i)n1dwebActuary.getIFS(n,i,0)
4期末年金终值sn=1+(1+i)+(1+i)2++(1+i)n1=(1+i)n1iwebActuary.getIFS(n,i,1)
5延期期初年金现值ma¨n=vm+vm+1++vm+n1=vm×a¨n=a¨n+ma¨mwebActuary.getMIFA(n,i,m,0)
6延期期末年金现值man=vm×an=am+namwebActuary.getMIFA(n,i,m,1)
7延期期初年金终值ms¨n=(1+i)n1dwebActuary.getMIFS(n,i,m,0)
8延期期末年金终值msn=(1+i)n1iwebActuary.getMIFS(n,i,m,1)
9期初递增型年金现值(Ia¨)n=1+2v+3v2++nvn1=a¨nnvndwebActuary.getIIFA(n,i,0)
10期末递增型年金现值(Ia)n=v+2v2+3v3++nvn=a¨nnvniwebActuary.getIIFA(n,i,1)
11期初递增型年金终值(Is¨)n=(Ia¨)n×(1+i)n=s¨nndwebActuary.getIIFS(n,i,0)
12期末递增型年金终值(Is)n=(Ia)n×(1+i)n=s¨nniwebActuary.getIIFS(n,i,1)
13期初递减型年金现值(Da¨)n=n+(n1)v+(n2)v2++vn1=nandwebActuary.getDIFA(n,i,0)
14期末递减型年金现值(Da)n=nv+(n1)v2+(n2)v3++vn=naniwebActuary.getDIFA(n,i,1)
15期初递减型年金终值(Ds¨)n=(Da¨)n×(1+i)n=n(1+i)nsndwebActuary.getDIFS(n,i,0)
16期末递增型年金终值(Ds)n=(Da)n×(1+i)n=n(1+i)nsniwebActuary.getDIFS(n,i,1)
17期初等比年金现值(Pa¨)n=k=1n(1+j)k1×vk1=1(1+j)nvn1(1+j)vwebActuary.getRIFA(n,i,j,0)
18期末等比年金现值(Pa)n=k=1n(1+j)k×vk=1(1+j)nvn(ij)÷(1+j)webActuary.getRIFA(n,i,j,1)
19期初等比年金终值(Ps¨)n=(1+i)n×(Pa¨)nwebActuary.getRIFS(n,i,j,0)
20期末等比年金终值(Ps)n=(1+i)n×(Pa)nwebActuary.getRIFS(n,i,j,1)
21期初年付r次一般年金现值a¨n(r)=1vnr(1v1r)=1vnd(r)webActuary.getGIFA(n,r,i,0)
22期末年付r次一般年金现值an(r)=(1vn)r[(1+i)1r1]=1vni(r)webActuary.getGIFA(n,r,i,1)
23期初年付r次一般年金终值s¨n(r)=(1+i)n×a¨n(r)=(1+i)n1d(r)webActuary.getGIFS(n,r,i,0)
24期末年付r次一般年金终值sn(r)=(1+i)n×an(r)=(1+i)n1i(r)webActuary.getGIFS(n,r,i,1)
25期初年结k次一般年金现值a¨n(k)=1+vk+v2k++v(n1)k=1vkn1vk=aknakwebActuary.getKIFA(n,k,i,0)
26期末年结k次一般年金现值an(k)=vk+v2k++vnk=vk(1vkn)1vk=aknskwebActuary.getKIFA(n,k,i,1)
27期初年结k次一般年金终值s¨n(k)=(1+i)kn×a¨n(k)=(1+i)kn11vk=sknakwebActuary.getKIFS(n,k,i,0)
28期末年结k次一般年金终值sn(k)=(1+i)kn×an(k)=vk[(1+i)kn1]1vk=sknskwebActuary.getKIFS(n,k,i,1)
29连续年金现值a¯n=limma¨n(m)=1vnd(m)=1vnδ
30连续年金终值s¯n=limms¨n(m)=(1+i)n1d(m)=(1+i)n1δ
31期初永续年金现值a¨=limma¨n=limm1vnd=1d
32期末永续年金现值a=limman=limm1vni=1i
33期初年付r次永续年金现值a¨(r)=limra¨n(r)=limr1vnd(r)=1d(r)
34期末年付r次永续年金现值a(r)=limran(r)=limr1vni(r)=1i(r)
注:表中,n - 投资期、i - 利率、d - 贴现率、v - 折现因子(d=11+i)、m - 延期、j - 收付额递增(减)比例、r - 一年支付次数、k - 一年结算次数。将案例代码复制到网页后面代码窗口,点击“运行代码”获得计算结果

1、类函数样例代码

【例1.10】某人从银行贷款20万元用于购买住房,贷款年利率为5%,还款期为30年。如果从第一年开始每年等额还款,求每年还款数额。

解:设每年还款数额为X,由于贷款额和还款数额在零时刻的现值是相等的,即,

200000=X×a¨30X=200000a¨30=20000016.14107358=12390.75()

其中,

a¨30=1+v+v2++v29=1v301v=[11(1+i)30]÷(111+i)=16.14107358

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=B0a¨n|i

期末等额分期偿还,每年偿还金额R为:R=B0an|i

其它指标递推公式为,

Bk=R×ank|i
Ik=i×Bk1=i×R×ank+|i=R(1vnk+1)
Pk=RIk=R×vnk+1
sIn=k=1nIk=R[(1vn)+(1vn1)++(1v)]=nRRan|i

注:债务偿还部分基本上都是递推计算,可以根据递推公式采用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)每期偿还本金相等

设每期偿还本金为P,年利率为i,还款期限为n,贷款总金额为nP。则,

每期未偿还的本金余额:Bk=(nk)×P
k期应支付利息:Ik=i×Bk1=i×(nk+1)×P
k期偿还本利和:Rk=P+Ik=P×[1+i×(nk+1)]
支付利息总和:sIn=k=1nIk=k=1ni×(nk+1)×P=i×P×n(n+1)2
付款金额总和:sRn=n×P+i×P×n(n+1)2

【例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)每期递增(减)变额还款

最初贷款额B0,每期偿还金额为 Bk(1=1,2,,n),第一笔偿还额为R,以后每年递增(减)比例为1+j。则有,

R=B0(11+j1+i)11+i[1(1+j1+i)n]    (ij)

(i=j)时,为分期等额还款,此时已知R=B0an|i

k期付款:Rk=R(1+j)k1
k期利息:Ik=i×Bk1
k期本金:Pk=RkIk
k期贷款余额:Bk=Bk1Pk

【例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、偿债基金

D为借款人每期向偿债基金储蓄的金额。偿债基金各期利率为j、银行贷款利率为i,贷款期为n,期初贷款额为B0,则有,

各期利息:I=i×B0
每期向偿债基金储蓄金额:D=B0sn|j
每期支付总额为:R=I+D=i×B0+B0sn|j=B0(i+1sn|j)
k期末贷款余额为:Bk=B0D×sk|j=B0B0sn|jsk|j=B0(1sk|jsn|j)
k期偿债基金的余额:Fk=D×sk|j=B0sk|jsn|j
k期偿债基金所生成的利息:Mk=j×D×sk1|j=j×B0×sk1|jsn|j
k期实际支付的利息: Ik=i×B0j×D×sk1|j=B0×(ij×sk1|jsn|j))

式中,偿债基金每期产生的利息为上期期末累积值与基金利率的乘积。i=j时,等额偿债基金等价于等额分期还款。

【例1.28】某笔20000元的贷款,基金存款年利率5%,银行贷款年利率6%,贷款期限为5年。制作等额偿债基金表。

四、生命表数据资料及引用

1、生命表结构数据(表 - 1)[返回]

生命表结构数据包中包括在一定人口基数水平下(通常为一百万),以不同生命表为基础计算出的各年龄存活人数、死亡人数等重要指标。

基数   生命表 

注:设置人口基数、选择生命表可获得不同条件水平下的生命表结构数据表

2、转换基数表(表 - 1)[返回]

在一定利率水平条件下,不同时期和种类的生命表可以计算出无数转换基数表,引入转换基数可以建立较简洁的趸缴纯保费计算公式。

银行利率   生命表   

年龄(x)DxNxSxCxMxRx
0100000020033986.54375885120.8045999.3492180557.499
1949488.571419033986.54355851134.32892.38145999.3492134558.15
2902324.308418084497.97336817147.71950.521543106.96812088558.801
3857972.063517182173.66318732649.71384.420741156.44652045451.833
4816094.857616324201.6301550476.11021.393339772.02582004295.387
5776455.963315508106.74285226274.5777.234538750.63251964523.361
6738874.756414731650.78269718167.7607.113437973.3981925772.728
7703204.692513992776.02254986517485.551737366.28461887799.33
8669321.612513289571.33240993740.9397.142336880.73291850433.046
9637117.683912620249.72227704169.6331.470836483.59071813552.313
10606494.774911983132.03215083919.9283.971736152.11991777068.722

注:设置银行利率、选择生命表或点击“运 行”按钮可获得不同条件水平期望值基数表

3、数据引用

(1)转换公式(表 - 2)

    Dx=vx×lx
    Nx=Dx+Dx+1+Dx+2+...+Dω1
    Sx=Nx+Nx+1+Nx+2+...+Nω1

    Cx=vx+1×dx
    Mx=Cx+Cx+1+Cx+2+...+Cω1
    Rx=Mx+Mx+1+Mx+2+...+Nω1

(2)获得指定生命表x岁的存活人数lx(基数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:生命表结构数据“),各列数据依次为:(x),qx,lx,dx,Lx,Tx,ex

样例代码

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)

posted @   银河统计  阅读(2633)  评论(0编辑  收藏  举报
编辑推荐:
· 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 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示