美文网首页个人专题Python建模与NLP工具癖
Python数学建模极简入门(五)--动力系统习题

Python数学建模极简入门(五)--动力系统习题

作者: dalalaa | 来源:发表于2016-11-27 23:28 被阅读448次

第一题

  1. 你计划拿出一部分薪水作为子女的教育经费,你希望在账户里有足够的存款,使得从现在开始20年后的开始8年里,每月能提出1000美元,账户每年付给你0.35%的利息。 问题:a. 为完成你的投资目标,从现在开始的20年里你总共需要累积多少钱?注:20年后停止投资。b. 在以后的20年里你每月必须存多少钱?

解:
a. 首先说明我们的利率是这样计算的,年利率0.35,月利率为0.35/12=0.02917这其实是银行贷款常用的算法。
'''思路:需要累积多少钱,即到二十年年末有多少钱将每个月提出的1000美元折算到第21年的一月份初;
20年1月底:initialValue1 = a1/(1+0.0002917)
20年2月底:initialValue2 = a2/(1+0.0002917)^2
……
将所有的a都这算成初始值,加起来就行了
8年总共有96个月'''

draw = 1000
InitialDeposit = []
TotalDeposit = 0
for i in range(0,96):
    draw = draw/(1+0.0002917)
    InitialDeposit.append(draw)
TotalDeposit = sum(InitialDeposit)
print(TotalDeposit)
\#积累了94654.69358881074美元

b.'''思路:这个问题稍微复杂一丢丢,需要将每个月的存款设成未知数20年里每个月必须存x元,折算成二十年后的本利和,再与之前的求解立方程来解'''

TotalDeposit = 94654.69358881074
MonthlyDeposit = 0
rate = (1+0.0002917)
rates = []
for i in range(0,240):
    rates.append(rate)
    rate = rate * (1+0.0002917)
TotalRates = sum(rates)
MonthlyDeposit = TotalDeposit/TotalRates
print(MonthlyDeposit)
\#需要存 380.69668460355354美元

第二题

我们正在考虑鲸鱼的生存问题,又假设如果鲸鱼的数量降低到低于最小生存水平m以下,该物种将会灭绝。还假设由于环境的容量M,鲸鱼的数量是受限制的,也就是说,如果鲸鱼的数量超过了M,那么由于环境不能支持,数量会衰减。在下列模型中,an表示n年后鲸鱼的数量,对M = 5000 ,m = 100, k = 0.0001 以及 a0 = 1000求数值解。an+1 - an = k(M-an)(an-m)再对不同的M,m,k做实验,试着对若干个a0的起始值做实验,你的模型有什么预测?

import matplotlib.pyplot as plt
def Whale(a,M,m,k):
    list1 = []
    sum1 = 0
    for i in range(1,20):
        list1.append(a)
        a = a + k*(M-a)*(a-m)
    plt.plot(list1)
Whale(90,1000,100,0.0001)#参数随便设置一下就行了

第三题

杀手病毒:

  1. 该病毒数目每小时翻番,当数量达到100万时人体免疫系统才开始反应
  2. 反应后身体发热,使增长速度变为每小时增长50%
  3. 最大的响应下,每小时能杀死200000个病毒复制体
  4. 当病毒数量达到一万亿个的时候,人会死亡
  5. 注射抗生素之后,病毒复制速度仍然为每小时50%(肯定是在免疫系统反应之后才能发现)但是免疫系统和抗生素每小时能杀死500000000个病毒复制体。

求: 为了保证病人生命,注射病毒的最晚时间

import matplotlib.pyplot as plt
VirusNumber = 1
hours = 1
\#首先计算要多少小时免疫系统才能反应
while(VirusNumber <= 1000000):
    VirusNumber = VirusNumber * 2
    hours += 1
print(hours,VirusNumber)
\#结果为21小时小时之后免疫系统开始反应
\#计算不注射抗生素多少小时会死掉
while(VirusNumber <= 1000000000000):
    VirusNumber = VirusNumber * 1.5 - 200000
    hours += 1
print(hours)
\#结果为57小时后,病人会死亡
\#注射抗生素的情况,从第21小时开始
def antibiotic(x):
    curve = []
    VirusNumber = 1048576
    for i in range(0,x):#尚未注射
        curve.append(VirusNumber)
        VirusNumber = VirusNumber * 1.5 - 200000
    while VirusNumber >= 0 and VirusNumber <= 1000000000000:
            VirusNumber = VirusNumber * 1.5 - 500000000
            curve.append(VirusNumber)
    plt.plot(curve)  
    if VirusNumber >1000000000000:
        return '死亡'
    if VirusNumber < 0:
        return '存活'
for i in range(1,25):
    print("第%d个小时注射会%s"%(i,antibiotic(i)))

结果计算出来最晚在第18个小时要注射抗生素了。
最后上一张没什么用的图………………

病毒数量曲线

相关文章

网友评论

  • b3ffb88947c6:请问第一题a解里面,21年1月初后跟的是20年1月底?是不是打错了?
  • Accelerator_086:求博主做一下python代码排版:no_mouth: 比如第三题如果不正确缩进的话,会导致错误结果:cry:
    dalalaa:@ACC839303568 好的
  • misshe3010:正想了解建模呢,没想到就找到了😁
    misshe3010: @dalalaa 谢谢😜!
    dalalaa:@misshe3010 强推华章数学译丛系列的《数学建模》,作为入门书非常好。

本文标题:Python数学建模极简入门(五)--动力系统习题

本文链接:https://www.haomeiwen.com/subject/dlgnpttx.html