数学建模养老金计划.docx
《数学建模养老金计划.docx》由会员分享,可在线阅读,更多相关《数学建模养老金计划.docx(11页珍藏版)》请在冰点文库上搜索。
![数学建模养老金计划.docx](https://file1.bingdoc.com/fileroot1/2023-6/18/07a9ad45-10d8-40ce-bb3c-5bc17116724e/07a9ad45-10d8-40ce-bb3c-5bc17116724e1.gif)
数学建模养老金计划
数学建模
A题养老金计划
养老金是指人们在年老失去工作能力后可以按期领取的补偿金,这里假定养老金计划从20岁开始至80岁结束,年利率为10℅。
参加者的责任是,未退休时(60岁以前)每月初存入一定的金额,其中具体的存款方式为:
20岁~29岁每月存入
元,30岁~39岁每月存入
元,40岁~49岁每月存入
元,50岁~59岁每月存入
元。
参加者的权利是,从退休(60岁)开始,每月初领取退休金
,一直领取20年。
试建立养老金计划的数学模型,并计算下列不同年龄的计划参加者的月退休金。
1、从20岁开始参加养老金计划,假设
元;
2、从35岁开始参加养老金计划,假设
元,
元,
元;
3、从48岁开始参加养老金计划,假设
元,
元。
数学建模竞赛论文
论文题目:
养老金计划
姓名1:
**(写作)专业:
数学与应用数学
姓名1:
**(编程)专业:
信息与计算科学
姓名1:
**(建模)专业:
信息与计算科学
2010年8月14日
摘要:
随着人口老龄化的到来,世界各国都在不断努力寻求解决老龄化社会问题的途径,已形成了各具特色的养老保险制度。
但是我国养老金制度还存在层次单一,覆盖面狭窄和管理不协调的问题,因此本文就养老金计划问题进行讨论,旨在分析不同年龄阶段、投资不同金额的投保人在60岁后的20年里每月初所能领取养老金p。
首先依据题设,投保人每月都按照自己所处年龄段存入相应的金额,可以将其按照月份不同分为12个不同的虚拟账户,并且假定将相应月份的投保金额存入相应的虚拟账户中。
至每年末,各月份所对应虚拟账户的存款相同,且利息至次年对应月份才能获得。
但是在60岁开始,且在以后的20年里,每月月初将会领到一定数额(P)的养老金,可认为所领取的养老金是从该月所对应的虚拟账户扣除。
因此我们可以将每年中各月份的存款问题简化为只关注其中某一月份进行分析。
其次,采用迭代方法建立不同情况下的四种数学模型,利用MATLAB编写对应模型的程序,并用二分法求解出符合问题条件下的P值。
最终,运用所建立的数学模型最终求解出P1=10397.3511元,P2=5264.6136元,P3=4383.79385元。
从结果可以看出,越早参加养老金计划,在60岁后的20年里每月初也能领取相当多的养老金。
关键词:
养老金月初虚拟账户
一、问题的提出
二、问题的分析
三、建模的过程
1.模型的假设
2.模型的建立
3.模型转换为MATLAB程序
4.求解问题
5.模型分析
四、模型的评价与改进
一、问题的提出:
养老金是指人们在年老失去工作能力后可以按期领取的补偿金,这里假定养老金计划从20岁开始至80岁结束,年利率为10℅。
参加者的责任是,未退休时(60岁以前)每月初存入一定的金额,其中具体的存款方式为:
20岁—29岁每月存入X1元,30岁—39岁每月存入X2元,40岁—49岁每月存入X3元,50岁—59岁每月存入X4元。
参加者的权利是,从退休(60岁)开始,每月初领取退休金
,一直领取20年。
求按不同的年龄段不同的投资额,在60岁(退休后)每月月初所取的养老金p是否一样,并计算P值。
二、问题的分析:
由问题意可知,参加养老金计划的人在60岁前(为退休时)存入一定的金额,在退休后(60岁)开始,每月初领取退休金一直领取20年。
目的就是建立一种模型,解决计算不同年龄阶段参加者最终每月获取的退休金p值。
三、建模过程:
1.模型假设
首先,假设此问题的外部因素不会发生改变;其次,银行必须在投资者80岁时,把投资者所投金额以及所有的利息全部返还给投资者;再次,参加计划的投资者在一开始投资后,到59岁末都必须每月按时、按额投资该月的资金,中间无间断和拖欠。
2.模型建立
由问题知,投保人每月都按照自己所处年龄段存入相应的金额,我们可以将其按照月份不同分为12个不同的虚拟账户,并且假定将相应月份的投保金额存入相应的虚拟账户中。
至每年末,各月份所对应虚拟账户的存款相同,且利息至次年对应月份才能获得。
因此我们可以将每年中各月份的存款问题简化为只关注其中某一月份进行分析。
例:
按一月份进行分析。
如果在20岁的第一月存入X元的投保资金,则在第二年的第一个月对应虚拟账户上的累计户额为上一年一月利息加上本金,以及本年一月所存入的养老金额X。
依次类推,在60岁的一月对应虚拟账户累计金额为40年来所有一月的本金和利息的总和。
但是在60岁开始,且在以后的20年里,每月月初将会领到一定数额(P)的养老金,我们可以认为所领取的养老金是从该月所对应的虚拟账户扣除。
因此对于一月而言,从60岁开始领取P金额后,所剩的资金还会在次年有10%的利息,依次类推到第二十年时,一月的虚拟帐户将会为零,即虚拟账户中所有累计金额全部返回给投保人,此时可以得到一个一次方程,P是未知量,所以方程的解就是P的值。
用此方法可以计算出不同年龄阶段的投资者投资不同资金时,从60岁开始的后二十年内每月月初所领取的养老金P。
因此针对上述问题可建立如下四个不同年龄阶段的数学模型,即
(符号说明:
20-80岁之前第n岁,一月份办理业务之后账户所剩余额;X1为20—29岁阶段每月存入的金额数量,X2为30—39岁阶段每月存入的金额数量;X3为40—49岁阶段每月存入的金额数量;X4为50—59岁阶段每月存入的金额数量;p为60岁开始每月领取的退休金)
1.从20—29岁开始参加养老金计划的数学模型为:
2.从30—39岁开始参加养老金计划的数学模型为:
3.从30—39岁开始参加养老金计划的数学模型为:
4.从30—39岁开始参加养老金计划的数学模型为:
3.模型转化的MATLAB程序:
程序分为pension、pension_X、REM三个函数,其中pension为求解时输入参数的函数,REM为二分法求解线性方程的函数,REM求解时调用了pension_X函数,当p值满足pension_X(p)=0是,p为问题所求的解。
函数pension:
function[x,k,y]=pension(age,twenties,thirties,forties,fifties);
%age为开始参加养老金计划的年龄;
%twenties为20-29岁阶段每月所需缴纳的养老金;
%thirties为30-29岁阶段每月所需缴纳的养老金;
%forties为40-49岁阶段每月所需缴纳的养老金;
%fifties为50-59岁阶段每月所需缴纳的养老金;
%x为退休后每月所领取的退休金,即p值;
%k为应用二分法求解p值时所迭代的次数;
%y为退休金全部领取完后,账户所剩余额。
formatlong;
globalmx1x2x3x4;
m=age;x1=twenties;x2=thirties;x3=forties;x4=fifties;
if(m>=20)&(m<=59)
a=1000;
b=50000;
f=@pension_X;
delta=0.0001;
[x,k,y]=REM(f,a,b,delta);
else
'此程序不解决这个年龄的问题'
end
函数pension_X:
functions=pension_X(p);
%p为每月领取退休金的金额数量
%s为每次办理业务后的账户余额
globalmx1x2x3x4s;
if(m>=20)&(m<=29)
s=x1;
fork=m+1:
1:
29
s=1.1*s+x1;
end
fork=30:
1:
39
s=1.1*s+x2;
end
fork=40:
1:
49
s=1.1*s+x3;
end
fork=50:
1:
59
s=1.1*s+x4;
end
fork=60:
1:
79
s=1.1*s-p;
end
elseif(m>=30)&(m<=39)
s=x2;
fork=m+1:
1:
39
s=1.1*s+x2;
end
fork=40:
1:
49
s=1.1*s+x3;
end
fork=50:
1:
59
s=1.1*s+x4;
end
fork=60:
1:
79
s=1.1*s-p;
end
elseif(m>=40)&(m<=49)
s=x3;
fork=m+1:
1:
49
s=1.1*s+x3;
end
fork=50:
1:
59
s=1.1*s+x4;
end
fork=60:
1:
79
s=1.1*s-p;
end
elseif(m>=50)&(m<=59)
s=x4;
fork=m+1:
1:
59
s=1.1*s+x4;
end
fork=60:
1:
79
s=1.1*s-p;
end
end
函数REM:
function[x,k,y]=REM(f,a,b,delta);
%f为引用了pension_x的函数
%a、b为分布在解两侧的估计值
%delta为迭代求解时的精度
%x为方程的解,即所需要求的p值
%k为迭代次数
%y为已经领取结束时,所有账户所剩的总余额
ya=feval(f,a);
yb=feval(f,b);
ifya*yb>0
disp('Thisequationhasnosolution');
end
fork=1:
1:
100000
c=(a+b)/2;
yc=f(c);
ifyc==0
a=c;ya=yc;
b=c;yb=yc;
elseifya*yc<0
b=c;yb=yc;
else
a=c;ya=yc;
end
if((b-a)0)
break;
end
end
x=(a+b)/2;
y=12*feval(f,(a+b)/2);
4.求解问题:
①从20岁开始参加养老金计划,X1=X2=X3=X4=200元;
将所给参数带入函数,即
[x,k,y]=pension(20,200,200,200,200)
在命令窗口运行得到:
x=1.039735106285662e+004
k=29
.027*********
可知此人退休后没人可领取养老金10397.35元
②从35岁开始参加养老金计划,X2=200,X3=500,X4=1000元;
[x,k,y]=pension(35,0,200,500,1000)
在命令窗口运行得到:
x=5.264613660983741e+003
k=29
y=0.01393053673746
可知此人退休后没人可领取养老金5264.61元
③从48岁开始参加养老金计划,X3=1000,X4=2000元;
[x,k,y]=pension(48,0,0,1000,2000)
在命令窗口运行得到:
x=4.383793860763035e+003
k=38
y=2.563500311225653e-005
可知此人退休后没人可领取养老金4383.79元
5.模型分析
此模型的建立是依据利息按照年进行计算,每月的投资金到了次年的该月才会产生利息,且养老金又是按月来领取的,所以把每一个月单独地看成一个个体,用这个个体的情况来估计总体的趋势。
五、模型的评价与改进
该模型的假设在理论上是成立的,具有一定的合理性。
1.现实存在诸多不确定的因素,例如,政府对每月缴纳养老金的金额数量或者年龄利率有所改变时,可能会影响假设的不成立或计算结果不合理。
2.在运用数学软件MATLAB编程时,使用了二分法求解方程的根,由于计算程序的不完善性,可能会在在计算精度上有误差,因此与真实值之间会存在一定的偏差,但是可对程序中所涉及的精度进行改进,可使误差尽量减小。
3.在二分法程序的计算过程中,当p取某一值是,所对应的函数值(即每次办理业务之后账户所剩余额)可能为负值,由实际情况可知,函数值不应该为负值,即函数值小于0的函数部分不符合实际,但是在计算线性方程解时,最后所求解对应的函数值又大于0,所以不影响求解,即此求解程序具有合理性。