上篇文章:微分方程
文章摘要:差分方程的Python实现。
参考书籍:数学建模算法与应用(第3版)司守奎 孙玺菁。
PS1:只涉及了具体实现并不涉及底层理论。没有给出底层理论参考书籍的原因是不想做这个方向吧。所以对我只要掌握基本模型有个概念那就好了。
PS2:这里跳过数理统计直接来到差分方程那是因为:数理统计是机器学习的重要基础,数理统计想要好好学习一下以后重新开个专栏。之后的支持向量机放在机器学习部分,也就是再开个机器学习专栏。再之后的章节遇到大型数学建模竞赛再来补充。结束差分方程暂时结束这个专栏学习。
文章声明:如有发现错误,还望批评指正。
同样由于这个博主不感兴趣,我们只选几个典型案例来做。
贷款问题
参考书籍例8.1
某消费者需贷款30万元,期限30年,年利率5.1%,采用固定额度还款,每月应还多少贷款。
模型建立:
记
y
n
y_n
yn为第n个月的欠款总额;
r
=
0.051
12
×
100
%
=
0.425
%
r=\frac{0.051}{12}\times100\%=0.425\%
r=120.051×100%=0.425%为月利率,
N
N
N为360月,
Q
Q
Q为贷款总额。
{
y
n
=
(
1
+
r
)
y
n
−
1
−
x
,
n
=
1
,
2
,
…
,
N
y
0
=
Q
\left\{\begin{matrix}y_n=(1+r)y_{n-1}-x,n=1,2,\dots,N\\y_0=Q\end{matrix}\right.
{yn=(1+r)yn−1−x,n=1,2,…,Ny0=Q
模型求解:
y
n
=
(
1
+
r
)
n
y
0
−
x
(
1
+
r
)
n
−
1
r
y_n=(1+r)^ny_0-x\frac{(1+r)^n-1}{r}
yn=(1+r)ny0−xr(1+r)n−1
因为
y
360
=
0
y_{360}=0
y360=0,所以有:
x
=
(
1
+
r
)
360
Q
r
(
1
+
r
)
360
−
1
x=\frac{(1+r)^{360}Qr}{(1+r)^{360}-1}
x=(1+r)360−1(1+r)360Qr
Q=300000;r=0.051/12;N=360
print((pow(1+r,N)*Q*r)/(pow(1+r,N)-1))
#1628.849320201216
像这种有解析解,就挺好的。
养老保险
参考书籍例8.5
某保险公司的一份材料指出,在每月交200元到59岁末60岁开始领取养老金约定下,男子25岁开始投保届时月养老金2282元。假定人的寿命75岁,试求保险公司为了兑现责任,每月至少应该有多少投资收益率。
模型建立:
记
F
k
F_k
Fk表示投保人在投保后第k个月所交保险费及收益累计总额,
p
p
p为缴费期间费用,
q
q
q为养老期间支出。
F
k
+
1
=
F
k
(
1
+
r
)
+
p
,
k
=
0
,
1
,
…
,
N
−
1
F
k
+
1
=
F
k
(
1
+
r
)
−
q
,
k
=
N
,
N
+
1
,
…
,
M
−
1
F_{k+1}=F_{k}(1+r)+p,k=0,1,\dots,N-1\\F_{k+1}=F_k(1+r)-q,k=N,N+1,\dots,M-1
Fk+1=Fk(1+r)+p,k=0,1,…,N−1Fk+1=Fk(1+r)−q,k=N,N+1,…,M−1
模型解得:
F
k
=
[
(
1
+
r
)
k
−
1
]
p
r
,
k
=
0
,
1
,
…
,
N
,
F
k
=
q
r
[
1
−
(
1
+
r
)
k
−
m
]
,
k
=
N
+
1
,
N
+
2
,
…
,
M
,
F_k=[(1+r)^k-1]\frac{p}{r},k=0,1,\dots,N,\\F_k=\frac{q}{r}[1-(1+r)^{k-m}],k=N+1,N+2,\dots,M,
Fk=[(1+r)k−1]rp,k=0,1,…,N,Fk=rq[1−(1+r)k−m],k=N+1,N+2,…,M,
带入则有:
F
N
=
[
(
1
+
r
)
N
−
1
]
p
r
F
N
+
1
=
q
r
[
1
−
(
1
+
r
)
N
+
1
−
M
]
,
F_N=[(1+r)^N-1]\frac{p}{r}\\F_{N+1}=\frac{q}{r}[1-(1+r)^{N+1-M}],
FN=[(1+r)N−1]rpFN+1=rq[1−(1+r)N+1−M],
由于
F
N
+
1
=
F
N
(
1
+
r
)
−
q
F_{N+1}=F_N(1+r)-q
FN+1=FN(1+r)−q因此得:
q
r
[
1
+
(
1
+
r
)
N
+
1
−
M
]
=
[
(
1
+
r
)
M
−
1
]
p
r
(
1
+
r
)
−
q
\frac{q}{r}[1+(1+r)^{N+1-M}]=[(1+r)^M-1]\frac{p}{r}(1+r)-q
rq[1+(1+r)N+1−M]=[(1+r)M−1]rp(1+r)−q
化简:
(
1
+
r
)
M
−
(
1
+
q
p
)
(
1
+
r
)
M
−
N
+
q
p
=
0
(1+r)^M-(1+\frac{q}{p})(1+r)^{M-N}+\frac{q}{p}=0
(1+r)M−(1+pq)(1+r)M−N+pq=0
像这种没解析解得,就不好了。很多方法可以求解,例如二分。但是这里我们还是调用API吧。文章来源:https://www.toymoban.com/news/detail-577615.html
M=600;N=420;P=200;Q=2282
from scipy.optimize import fsolve
def func(r):
return pow((1+r),M)-(1+Q/P)*pow(1+r,M-N)+Q/P
print(fsolve(func,0))
1:.得r为0。2: 违反常识。开始质疑。3(1: 质疑api正确性,手动带入的确为0。3(2: 质疑存在多个零点,但是API只给出一个,带入标答0.0049求得0.27586315562580666,标答错误。3(3: 质疑公式的正确性,手推一遍的确如此。4: 得出结论——原书错误并且保险一本万利。
好了玩笑到此为止,虽然没有找到问题,但是得出几个既定事实。1)
r
≠
0
r\neq0
r=0,因为
r
r
r作了分母。2)书上公式是正确的,但是答案错误。文章来源地址https://www.toymoban.com/news/detail-577615.html
到了这里,关于数学模型:Python实现差分方程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!