数学建模实验
实验目的运用药物注射模型,熟练使用MATLAB曲线拟合方法,解释饮酒驾车的一些实际问题。
实验原理
由于酒精不需要进入肠道即可被吸收,且胃对其吸收速率也非常快,本题应采用“快速静脉注射模型”。酒精主要存在于血液中,故本例应计算吸收室的血药浓度c1(t)=A1e-αt+B1e-βt,因A1,α,B1,β之间有关联,为提高精确度,重新解微分方程得和题目对应的模型拟合计算。
实验内容
国家质量监督检查检疫局2004年5月31日发布了新的《车辆驾驶人员血液、呼气酒精含量阀值与检查》国家新标准,新标准规定,车辆驾驶人员血液中的酒精含量大于或等于20毫克/百毫升,小于80毫克/百毫升为饮酒驾车(原标准是小于100毫克/百毫升),血液中酒精含量大于或等于80毫克/百毫升为醉就驾车(原标准是大于100毫克/百毫升)。
某人在中午12点喝了一瓶啤酒,下午6点检查时符合新的驾车标准,紧接着他在吃晚饭的时候又喝了一瓶啤酒,为了保险起见他呆到凌晨2点才驾车回家,又一次遭遇检查时却被定为饮酒驾车,这让他既懊恼又困惑,为什么喝同样多的酒,两次检查的结果会不一样呢?
(1)某人中午12点喝了一瓶啤酒,下午6点检查合格,晚饭又喝一瓶,次日凌晨2点检查未通过,请对此情况做出解释。
(2)短时间内喝啤酒3瓶多长时间之后才能驾车?
(3)怎样估计血液中的酒精含量在什么时候最高?
(4)如果天天喝酒,是否还能开车?
解答:
建立常微分方程模型,假设喝进去的酒精从胃吸收的转移速率与胃里酒精含量成正比;血液代谢酒精的速度与浓度成正比;
如图所示:
X
胃
C
血液
代谢物
K1
K2
设胃里初始含量为X0,血液中初始含量为C0=0
则
即
即
解得
题目所给数据的C0=0,即此时
MATLAB命令:
T=[0.25
0.5
0.75
1.5
2.5
3.5
4.5
16];
C=[30
4];
cftool打开曲线拟合工具箱,X
data选择T,Y
data选择C,拟合方式选择Custom
Equation,拟合,参数如图
拟合得:a=2.273,b=0.1822,c=103.4
即K1=2.273,K2=0.1822,X0=103.4,可以发现拟合的比较好。
第一题
喝一瓶啤酒时X0=51.7,此时
而,故符合驾车标准
紧接着又喝一瓶,此时X0约为51.7,C0=18.8367。到凌晨二点过了8小时,此时
可以发现并没有大于20,但是当过后7.2小时时,略大于20,属于酒驾。题目所给情况可能是晚上喝酒不是快速喝下导致的误差。
第二题
短时间喝三瓶啤酒时X0=155.1,此时
MATLAB命令:
T=0:0.1:24;
C=168.616*exp(-0.1878*T)-168.616*exp(-1.971*T);
plot(T,C,’r’)
hold
on
plot([0
24],[20
20],’g’)
得
可发现与C=20相交于11、12之间
T=11:0.1:12;
C=168.616*exp(-0.1878*T)-168.616*exp(-1.971*T)
输出:
C
=
至
列
21.3665
20.9690
20.5789
20.1960
19.8202
19.4515
19.0896
至
列
18.7344
18.3859
18.0438
17.7081
故11.4小时后驾车不会违反规定
题目三
观察上图可知最高点在1-2之间
T=1:0.1:2;
C=168.616*exp(-0.1878*T)-168.616*exp(-1.971*T)
输出:
C
=
至
列
116.2545
117.8569
118.7560
119.0852
118.9541
118.4526
至
列
117.6543
116.6193
115.3972
114.0283
112.5457
故在喝酒后约1.3小时后血液中酒精含量最高
第四题
为简化问题,假设一天只喝一次,每次快速喝下n瓶,则
要求:,依此类推
考虑到48小时后的影响很小,故只需在数日内符合即可认为符合,这里取十天。
考虑到平常人的酒量,为排除呕吐等不正常代谢酒精方式和脏器超负荷工作带来的误差,只考虑小于等于10瓶啤酒
MATLAB:
建立函数
function
C24=CalcC24(n,C0,i)
T=0:0.5:24;
C=(C0+56.2053*n)*exp(-0.1878*T)-56.2053*n*exp(-1.971*T);
C24=(C0+56.2053*n)*exp(-0.1878*24)-56.2053*n*exp(-1.971*24);
plot((T+i*24),C,'Color',[((-1)^n+1)/(2*n)
((-1)^(n+1)+1)/(2*n)
((-1)^n+1)/(2*n)])
hold
on
end
输入命令:
hold
off
clear
clc
C0=0;
for
n
=1:10
for
i=0:10
temp=CalcC24(n,C0,i);
C0=temp;
end
end
plot([0
264],[20
20],’r’);
得:
可发现若每日喝十瓶啤酒的情况下经过18小时,血液中的酒精浓度就能降低到20mg/100ml以下,即若早上八点喝十瓶啤酒,凌晨两点驾车即不违反新交法
若每隔12小时快速饮酒n瓶,同样考虑十天
MATLAB
建立函数:
function
C12=CalcC12(n,C0,i)
T=0:0.5:12;
C=(C0+56.2053*n)*exp(-0.1878*T)-56.2053*n*exp(-1.971*T);
C12=(C0+56.2053*n)*exp(-0.1878*12)-56.2053*n*exp(-1.971*12);
plot((T+i*12),C,'Color',[((-1)^n+1)/(2*n)
((-1)^(n+1)+1)/(2*n)
((-1)^n+1)/(2*n)])
hold
on
end
输入命令:
hold
off
clear
clc
C0=0;
for
n
=1:5
for
i=0:20
temp=CalcC12(n,C0,i);
C0=temp;
end
end
plot([0
264],[20
20],'r')
得:
可以发现喝完2瓶啤酒可以在9.8小时后降低到20mg/100ml以下,而喝完三瓶仅在喝完11.94小时后降低到20mg/100ml以下,也就是仅有每十二小时3.6分钟符合要求,忽略不计。
故每12小时可饮酒2瓶可以驾车不违反新交法
综上所述,每12小时可以和2瓶啤酒,每24小时可以喝10瓶及以下的啤酒不违反新交法。
模型评价与改进
1.解得对应模型,综合运用MATLAB软件,准确求解,在运用MATLAB进行数据拟合时,得到了较理想化的曲线。
2.本模型引用了医药动力学的二室模型进行计算,可靠性较高
3.从问题出发,分析了应该考虑的各种情况,建立了一般的数学模型,并进行实例验证,从而证明我们建立的数学模型可以较好的解决实际问题。
模型的缺点
1.本文的模型参数仅是依靠一组数据拟合求解得出,有一定的偏差。
2.模型为使计算简便,使所得的结果更理想化,忽略了一些次要的因素。
3计算所得.和题目所述不尽相同,不过因拟合得较好,只能考虑本身操作的误差。
—
END
—