大师网-带你快速走向大师之路 解决你在学习过程中的疑惑,带你快速进入大师之门。节省时间,提升效率

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


病毒数量曲线