《饮酒驾车模型及matlab实现.ppt》由会员分享,可在线阅读,更多相关《饮酒驾车模型及matlab实现.ppt(22页珍藏版)》请在三一办公上搜索。
1、7.5 饮酒驾车,微分方程模型及非线性拟合实验,问题,大李喝下啤酒后,酒精先从肠胃吸收进入血液和体液中,然后从血液和体液向体外排出。可以建立二室模型,将肠胃看成吸收室,将血液与体液看成中心室(见下图)。,吸收和排出的过程都可以简化成一级反应来处理,加起来得到体液内酒精吸收和排出过程的数学模型。因为考虑到时短时间内喝酒,所以忽略喝酒的时间,可使初始条件得以简化。,根据上面问题要求,可归结为如下问题:1、建立数学模型,并解释大李在中午12点喝1瓶啤酒后,在下午6点检查时体内血液中的酒精含量小于20mg/10ml,符合“驾车标准”。2、建立数学模型,并解释大李在晚饭时再喝1瓶啤酒后,在凌晨2点检查时
2、体内血液中的酒精含量不小于20mg/100ml,不符合“饮酒驾车”的标准。,酒精量是指纯酒精的质量,单位为毫克(mg);酒精含量是指纯酒精的浓度,单位是毫克/百毫升(mg/100ml);t:时刻(h);x1(t):在时刻t吸收室(肠胃)内的酒精量(mg);k1:酒精从吸收室进入中心室的速率系数;g0:在短时间内喝下1瓶啤酒后吸收室内的酒精量(mg);y1(t):在时刻t中心室(血液和体液)的酒量(mg);K2:酒精从中心室向体外排出的速率系数;V:中心室的容积(100ml).,(4)考虑到大李在下午6点接受检查,之后由于离开检查地点以及停车等待等原因耽误了一定时间,因此假定大李在晚8点吃晚饭(
3、即大李从第一次接受检查到第二次喝酒之间相隔了2个小时),大李在短时间内喝下2瓶啤酒后,酒精先从吸收室(肠胃)进入中心室(血液与体液),然后从中心室向体外排出。忽略喝酒时间,并假设:,(1)吸收室在初始时刻t=0时,酒精量立即为2g0,酒精从吸收室进入中心室的速率(吸收室在单位时间内酒精量的减少量)与吸收室的酒精量成正比,比例系数为k1.,(2)中心室的容积V保持不变;在初始时刻t=0时,中心室酒精量为0;在任意时刻,酒精从中心室向体外排出的速率(中心室的单位时间内酒精量的减少量)与中心室的酒精量成正比,比例系数为k2.,(3)在大李(体重为70kg)适度饮酒没有酒精中毒的前提下,假设k1和k2
4、都是常数,与酒精量无关。,根据假设(1),吸收室的酒精量x1(t)满足微分方程初值问题,根据假设(2),中心室的酒精量y1(t)满足微分方程初值问题:,根据()和()得到微分方程组初值问题:,解上述微分方程组初值问题,其matlab程序如下:,x1,y1=dsolve(Dx1=-k1*x1,Dy1=k1*x1-k2*y1,x1(0)=N*g(0),y1(0)=0)y,how=simple(x1,y1),y=N*g(0)*exp(-k1*t),k1*N*g(0)*(exp(-k2*t)-exp(-k1*t)/(k1-k2),程序运行结果:,程序求解结果整理为:,返回,式()可以写成,当前任务就是
5、,确定k,k1,k2,用MATLAB的函数nlinfit(非线性最小二乘拟合),根据赛题所给数据拟合式()的参数k1,k2和k.此问题的MATLAB程序如下:,f=(k,x)k(3).*(exp(-k(2).*x)-exp(-k(1).*x);x=0.25 0.5 0.75 1 1.5 2 2.5 3 3.5 4 4.5 5 6 7 8 9 10 11 12 13 14 15 16;y=30 68 75 82 82 77 68 68 58 51 50 41 38 35 28 25 18 15 12 10 7 7 4;k0=2,1,80;%参数的初值k=nlinfit(x,y,f,k0)plot
6、(x,y,r*,0:0.01:18,f(k,0:0.01:18),k)xlabel(时间(h)ylabel(酒精含量)title(血液中酒精含量的拟合图)axis(0 18 0 90)legend(原始数据,拟合曲线),参数k1,k2和k的拟合结果为:,k=2.0079 0.1855 114.432524,参数的初值设定思路:,fc=(x)k(3).*(exp(-k(2).*x)-exp(-k(1).*x);figure(2)plot(x,y-fc(x),ro,0 18,0 0,k)axis(0,18,-10,10),结果如图:,从原始数据拟合图、拟合误差图观察发现拟合效果比较好。在拟合误差图
7、中只有一个误差在-10附近,其他误差值都在(-6,6)之内,且分布比较均匀,这说明引入的假设和建立的模型比较合理。,问题(1)的应用,在问题(1)中,大李在中午12点喝了1瓶啤酒(与“参考数据”中短时间内喝下2瓶啤酒相比,喝酒量减少一半),此时:,根据假设(3),k1和k2保持不变,根据式(),大李的血液中酒精含量的经验数学模型为:,把t=6代入式(),可以得到大李在下午6点被检查时血液中酒精含量为:,因此,此时大李符合“驾车标准”(不属于“饮酒驾车”)。,7.5.7.2 问题(2)的应用,在问题(2)中,大李在晚饭时又喝了1瓶啤酒,根据模型假设中的“忽略喝酒时间”,假设这瓶啤酒是在短时间内喝
8、的。,由于问题中没有给出具体的晚饭喝酒时间,假设在晚上s点吃饭时大李又喝了1瓶啤酒,注意s6,因为大李不可能在下午6点被检查的同时喝酒,根据假设(3),k1和k2保持不变,则有:,根据前面的结果有:,模型求解,用MATLAB编程求解如下:,x2,y2=dsolve(Dx2=-k1*x2,Dy2=k1*x2-k2*y2,x2(0)=N*g(0)*(1+exp(-k1*s),y2(0)=(k1*N*g(0)/(k1-k2)*(exp(-k2*s)-exp(-k1*s)y,how=simple(x2,y2),运行结果:,y=N*g(0)*(1+exp(-k1*s)*exp(-k1*t),k1*N*g
9、(0)*(exp(-k2*t)+exp(-k2*t-k2*s)-exp(-k1*t)-exp(-k1*t-k1*s)/(k1-k2),即:,可变为:,其中,大李又喝了1瓶啤酒时,酒精含量与时间(时间t从第二次喝酒开始算,即t=14-s)的关系为:,根据假设(4),大李在晚8点吃晚饭,把s=8,t=6代入式(),得大李在凌晨2点被检查时血液中酒精含量为:,此时属于“饮酒驾车”。,当然,人们也许更关心大李晚上“何时”再喝1瓶啤酒后,在凌晨2点检查时体内血液中的酒精含量等于20mg/100ml(即饮酒驾车的临界时间)。此问题的MATLAB程序如下:,x=fzero(57.2163*(1+exp(-0
10、.1855*(14-x).*exp(-0.1855*x)-(1+exp(-2.0079*(14-x).*exp(-2.0079*x)-20,7)T=14-x,x=6.9584T=7.0416,运行结果为:,因此,大李在晚上7.0416时之后再喝1瓶啤酒,在凌晨2点检查时体内血液中的酒精含量就会大于20mg/100ml(这样大李在晚上8点再喝1瓶啤酒,在凌晨2点被检查时就会被定为“饮酒驾车”)。,综合以上解释了:(1)大李在中午12点喝了1瓶啤酒,下午6点检查时血液中的酒精含量为18.799320(mg/100ml),被定为饮酒驾车。,结论:,本节在短时间内喝酒情况下,建立了体液(含血液)中的酒
11、精含量的数学模型.该模型基于微分方程,并对给出的数据利用非线性最小二乘数据拟合法,确定了酒精从肠胃进入血液的速率系数和酒精从血液渗透出体外的速率系数,根据模型得到的结果基本符合实际。模型很好的描述了酒精在体内的变化规律,在酒精摄入时能够较为准确地预测出不同时间的血液酒精浓度。对驾驶人员安排喝酒与开车的关系具有指导性作用,并能够有效地防止酒后驾车的发生。,1、模型把复杂的生理循环问题转化为酒精从肠胃(吸收室)到血液与体液(中心室)的简单变化;2、模型简明易懂,具有较好的通用性。,模型的优点:,本模型存在近似误差,是通过拟合产生的;另外模型未考虑不同的人对酒精的消耗速率可能存在的差异。,模型的缺点:,模型作一些修改后可以用于药物动力学问题,对药物在体内的浓度变化进行研究具有一定的参考价值。,模型的推广:,下节预告,谢谢大家!,