2020炉温曲线第二题(python代码)

该代码使用Python实现了一个模拟物体在不同速度的传送带上温度变化的模型。通过T函数计算每个时间点的温度,k函数确定冷却速率,test函数检查是否满足特定的温度条件。主要涉及数值计算、数据处理和图表展示。
摘要由CSDN通过智能技术生成

题目条件:

从传送带最大速度开始向下查找第一个满足题目条件的值即可

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值