数学建模章绍辉版作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数学建模章绍辉版作业集团标准化工作小组 #Q8QGGQT-GX8G08Q8-GNQGJ8-MHHGN#
第四章作业
第二题:
针对严重的交通情况,国家质量监督检验检疫局发布的国家标准,车辆驾驶人员血液中的酒精含量大于或等于20mg/100ml,小于80mg/100ml 为饮酒驾车,血液中的酒精含量大于或等于80mg/100ml 的为醉酒驾车。
下面分别考虑大李在很短时间内和较长时间内(如2个小时)喝了三瓶啤酒,多长时间内驾车就会违反新的国家标准。 1、
问题假设
大李在短时间内喝下三瓶啤酒后,酒精先从吸收室(肠胃)吸收进中心室(血液和体液),然后从中心室向体外排除,忽略喝酒的时间,根据生理学知识,假设
(1) 吸收室在初始时刻t=0时,酒精量立即为
32
D ;在任意时刻,酒精从吸收室吸收进中心室的速率(吸收室在单位时间内酒精含量的减少量)与吸收室的酒精含量成正比,比例系数为1k ;
(2) 中心室的容积V 保持不变;在初始时刻t=0时,中心室的酒精含量为0;
在任意时刻,酒精从中心室向体外排除的速率(中心室在单位时间内酒精含量的减少量)与中心室的酒精含量成正比,比例系数为2k ;
(3) 在大李适度饮酒没有酒精中毒的前提下,假设1k 和2k 都是常量,与饮酒量
无关。
2、
符号说明
酒精量是指纯酒精的质量,单位是毫克;
酒精含量是指纯酒精的浓度,单位是毫克/百毫升;
~t 时刻(小时);
()~x t 在时刻t 吸收室(肠胃)内的酒精量(毫克);
0~D 两瓶酒的酒精量(毫克);
(t)~c 在时刻t 吸收室(血液和体液)的酒精含量(毫克/百毫升); 2()~c t 在时刻t 中心室(血液和体液)的酒精含量(毫克/百毫升);
~V 中心室的容积(百毫升);
1~k 酒精从吸收室吸收进中心室的速率系数(假设其为常数); 2~k 酒精从中心室向体外排除的速率系数(假设其为常数);
3~k 在短时间喝下三瓶酒的假设下是指短时间喝下的三瓶酒的酒精总量除以中心室体
积,即03/2D V ;而在较长时间内(2小时内)喝下三瓶酒的假设下就特指03/4D V . 3、
模型建立和求解
(1) 酒是在很短时间内喝的:
记喝酒时刻为0t =(小时),设(0)0c =,可用()2113
212
()k t k t k k c t e e k k --=
--来计算血液中的酒精含量,此时12k k 、为假设中所示的常数,而033155.792D k V ⎛⎫
== ⎪⎝⎭
.
下面用MATLAB 程序画图展示血液中酒精含量随时间变化并且利用fzero 函数和fminbnd 函数来得到饮酒驾车醉酒驾车对应的时间段,以及血液中酒精含量最高的时刻。
MATLAB 程序如下:
k1=;k2=;k3=;
c=@(t)(k1.*k3)./(k1-k2).*(exp(-k2.*t)-exp(-k1.*t)); f=@(t)c(t)-20; g=@(t)c(t)-80; h=@(t)-c(t);
t1(1)=fzero(f,1);t1(2)=fzero(f,12), t2(1)=fzero(g,1);t2(2)=fzero(g,12) [t3,c3]=fminbnd(h,0,24) fplot(c,[0,20],'k') hold on
plot([0,20],[20,20],'k',[0,20],[80,80],'k') hold off
xlabel('时刻t(小时),从开始喝酒算起')
ylabel('血液中的酒精含量(mg/100ml)')
title('短时间喝下三瓶酒时,血液中酒精含量随时间的变化过程')
gtext(',20)')
gtext(',20)')
gtext(',80)')
gtext(',80)')
gtext(',')
运行结果如下:
t1 =
t2 =
t3 =
c3 =
所绘图形如下:
结果分析:
所以,当[0.06891,0.38052)(4.1125,11.589]
t∈⋃时,20()80
c t
≤<,属饮酒驾车。当
[0.38052,4.1125]
t∈时,属醉酒驾驶;当 1.307
t=时,血液中的酒精含量最高为毫克/百毫升。
(2)酒是在2小时内喝的:
可假设三瓶啤酒是在2小时内匀速喝的. 同样记喝酒时刻为0
t=(小时),设
(0)0
c=,则吸收室的酒精量
1()
x t满足分段的初值问题解得
于是中心室内的酒精含量
2()
c t满足分段的初值问题解得
其中
0334D k V
=,3412k k k k =-,14
52k k k k =,36
2= k k k ,1273(1)k k k e =- 1
2
228456k k k k e
k e
k --=-+,7912
k k k k =
-,2
2122()1089k k k k k e
k e -=+ 因为1 2.0079k =,20.1855k =以及0/103.86D V =,所以
377.896k =,442.743k =,5462.66k =,6419.92k = 74243.1k =,8101.43k =,92328.3k =,10207.82k =
下面用MATLAB 程序画图展示血液中酒精含量随时间变化并且利用fzero 函数和fminbnd 函数来得到饮酒驾车醉酒驾车对应的时间段,以及血液中酒精含量最高的时刻。
MATLAB 程序如下:
k1=;k2=;k3=;
k4=;k5=;k6=;k9=;k10=;
c1=@(t)(k4.* exp(-k1.*t)-k5.*exp(-k2.*t)+k6).*(t>=0&t<=2)+... ( k10.* exp(-k2.*t)-k9.*exp(-k1.*t)).*(t>2); f1=@(t)c1(t)-20; g1=@(t)c1(t)-80; h1=@(t)-c1(t);
t1(1)=fzero(f1,1);t1(2)=fzero(f1,12), t2(1)=fzero(g1,1);t2(2)=fzero(g1,12), [t3,c3]=fminbnd(h1,0,20) fplot(c1,[0,20],'k') hold on
plot([0,20],[20,20],'k',[0,20],[80,80],'k') hold off
xlabel('时刻t (小时),从开始喝酒算起') ylabel('血液中的酒精含量(mg/100ml )')
title('短时间喝下三瓶酒时,血液中酒精含量随时间的变化过程') gtext(',20)') gtext(',20)') gtext(',80)') gtext(',80)') gtext(',')