题目条件:
从传送带最大速度开始向下查找第一个满足题目条件的值即可
import math
from matplotlib import pyplot as plt
import numpy as np
def T(t,v,T15,T6,T7,T89):#每段温度
a=[0,25,30.5,5,30.5,5,30.5,5,30.5,5,30.5,5,30.5,5,30.5,5,30.5,5,30.5,5,30.5,5,30.5,25]
a=[i/v*60 for i in a]
m=0
a=[m:=m+i for i in a]
Tair=25
lmd0=-0.5
c0=(T15-Tair)/(math.e**(-lmd0*25/v*60))
lmd=0.015
c=(T89-Tair)/(math.e**(-lmd*339.5/v*60))
if t<a[1]:
return c0*math.e**(-lmd0*t)+Tair
elif t<a[10]:
return T15
elif t<a[11]:
return T15+(T6-T15)/(a[11]-a[10])*(t-a[10])
elif t<a[12]:
return T6
elif t<a[13]:
return T6+(T7-T6)/(a[13]-a[12])*(t-a[12])
elif t<a[14]:
return T7
elif t<a[15]:
return T7+(T89-T7)/(a[15]-a[14])*(t-a[14])
elif t<a[18]:
return T89
else:
return c*math.e**(-lmd*t)+Tair
def k(t,v):#牛顿冷却模型中每段的k值,k值计算可以看我第一问的求解
a=[0,25,30.5,5,30.5,5,30.5,5,30.5,5,30.5,5,30.5,5,30.5,5,30.5,5,30.5,5,30.5,5,30.5,25]
a=[i/v*60 for i in a]
m=0
a=[m:=m+i for i in a]
if t<a[1]:
return 0.0128
elif t<a[11]:
return 0.0177
elif t<a[13]:
return 0.0171
elif t<a[15]:
return 0.0242
elif t<a[18]:
return 0.0216
else:
return 0.0276
def test(v):#测试是否满足题目条件
t_list=np.linspace(0,400,801).tolist()
u_list=[25]
for i in t_list:
kk=k(i,v)*(T(i,v,182,203,237,254)-u_list[-1])
if abs(kk)>3:
return False
u_list.append(u_list[-1]+kk*0.5)
u_list.pop()
if len([i for i in u_list if i>=150 and i<=190])<60/0.5 or len([i for i in u_list if i>=150 and i<=190])>120/0.5:
return False
if len([i for i in u_list if i>=217])<40/0.5 or len([i for i in u_list if i>=270])>90/0.5:
return False
max=np.array(u_list).max()
if max>250 or max<240:
return False
return True
def main():
for i in map(lambda x:x*0.01,range(78*100,73*100,-1)):
if test(i):
return i
if __name__=='__main__':
print(main())
得出最大速度78.0
def draw():
v=78.0
t_list=np.linspace(0,400,801).tolist()
u_list=[25]
for i in t_list:
u_list.append(u_list[-1]+k(i,78.0)*(T(i,v,182,203,237,254)-u_list[-1])*0.5)
u_list.pop()
plt.plot(t_list,u_list)
plt.show()