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

第一题

  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个小时要注射抗生素了。
最后上一张没什么用的图………………

病毒数量曲线
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 这一期讲动力系统 在准备这一期教程的过程中我找到了一个挺有意思的课件,推荐给大家:动力系统建模-唐云(清华大学教授...
    dalalaa阅读 4,338评论 0 15
  • 今天是2017年1月2日我在承德,距离我毕业已经过去了6个多月了,回首这一年,我决定进行一个自我的总结,希...
    阿洋的grow阅读 611评论 0 0
  • 记得六、七岁时,学校是有秋假的。而每到秋天,庄稼收割的季节,田野便成了孩子们欢乐的海洋。 吃过午饭,避开大...
    从头儿活起阅读 408评论 0 0
  • 又一天,乌鸦叼着肉又被狐狸发现了,狐狸对乌鸦说:"亲爱的乌鸦,我们又见面了。"乌鸦眼睛里闪着凶光,狐狸看出...
    徐寅博阅读 425评论 2 1
  • 不知从何时起,有了看的书够多了可以开始自己写文了的错觉,但当静心思索题材时脑子里却又是一团乱麻。在我的文中,记录的...
    Graxia阅读 425评论 0 3

友情链接更多精彩内容