美文网首页个人专题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个小时要注射抗生素了。
    最后上一张没什么用的图………………

    病毒数量曲线

    相关文章

      网友评论

      • 飞翔zmx:请问第一题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