1、3未点燃的烟草和过滤嘴对随烟雾穿行的毒物的吸附率(单位时间内毒物被吸收的比例)分别是常数b和4烟雾沿香烟穿行的速度是常数v,香烟燃烧速度是常数u,且vu.5将一支烟吸完后毒物进入人体的总量(不考虑从空气的烟雾中吸入的)记作Q。仿真要求: 系统输入为烟草和过滤嘴的长度l1和l2,毒物总质量M,点燃处毒物随烟雾进入空气和沿香烟穿行的数量比例a:a,点燃的烟草和过滤嘴对随烟雾穿行的毒物的吸附率b和,烟雾沿香烟穿行的速度v,香烟燃烧速度u系统输出为毒物进入人体的量Q。要求有输入、输出界面及仿真过程。1.2.1模型构建 设在t=0的时刻点燃香烟,在过滤嘴末端截面单位时间的流量为q(t),则由题意易得:Q
2、=q(t)dt(0tl1/u),故而以下对q(t)进行推算。 设距离烟草前端距离为x的界面为q(x,t),设各点烟雾毒物的密度为p(x,t),在点燃的瞬间有如下: bp(x,0)dx 0xl1 积分均为由x至x+x q(x,0)-q(x+x,0)= 此式由物质守恒定律得 p(x,0)dx l1l取x趋近于0并将q(x,0)=v*p(x,0)带入可得: bp(x)/v 0l1 dp/dx= p(x)/v l1设各点毒物密度为w(x,t)由题意知点燃瞬间存在q(0,0)=auw(0,0),故而有p(0,0)=auw(0,0)/v。由上式微分以及p(0,0)可解得在0l1时p(x,0)的表达式: p
3、(x,0)=(auw(x,0)/v)*exp(-bx/v) 0由函数连续性可求得p(l1,0)=(auw(x,0)/v)*exp(-bx/v),继而由p(l1,0)与上式微分求l1l时的表达式: p(x,0)= (auw(x,0)/v)*exp(-b)*l1-*x)/v) l1故而有过滤嘴端口处:q(l,0)=v* p(l,0)= auw(l,0)*exp(-b)*l1-*l)/v)继而求q(l,t):先设h(t)为t时刻点燃时单位时间内烟草释放的有毒物质的量,h(t)=uw(x,t)=uw(ut,t),2.由p(x,0)的表达式变换可得: (ah(t)/v)*exp(-bx+but)/v)
4、0 p(x,t)= (ah(t)/v)*exp(-b)*l1+but-x)/v) l1故而q(l,t)= ah(t) *exp(-b)*l1+but-l)/v),因此,求出h(t)即可得到最终的q(l,t)。h(t)=uw(ut,t),w(x,0)=M/l1,又:w(x,t+t)-w(x,t)=bp(x,t)t即: dw/dt=bp(x,t) w(x,0)=M/l1p(x,t)= (ah(t)/v)*exp(-bx+but)/v)故而可得w(ut,t)=(M/al1)*(1-a*exp(-abut/v) 故而q(l,t)= au (M/al1)*(1-a*exp(-abut/v) *exp(-
5、b)*l1+but-l)/v)由于Q(t)=q(l,t)dt=(aMv/bal1)*exp(-bl1/v)*exp(-l2/v)*(exp(but/v)-exp(abut/v) 此式为积分0-t,对于一根烟抽尽的时间t=l1/u带入可得: Q=Q(l1/u)=(aMv/abl1)*exp(-l2/v)*(1-exp(-abl1/v)2.2模型实现要实现界面友好,有输入输出,需利用matlab GUI进行规划,首先建立空白GUI模板,由于本题需要九个输入,一个输出,以及需要展现仿真过程,故而在初始空白模板上建立如下两个界面框架:3.其中第一个仅作为欢迎界面,点击进入第二个,图片插入利用imrea
6、d以及image函数。第二个界面中包含九个编辑文本框作为输入来源,十一个静态文本框作为显示相关提示文字,一个静态文本框作为显示输出,另两个静态文本框作为拼图,三个按钮作为调动函数的按键,一个坐标轴以及显示输出来体现仿真过程,图片插入利用imread以及image函数。框架构建完成够开始调用函数的编写。在开始运算的按钮的callback函数中读入各输入量,用str2double(get(handles.*,String)语句实现读入且用msgbox进行容错处理,若有错则弹框提示,数据读入后进行运算:Q(t)=(aMv/bal1)*exp(-bl1/v)*exp(-l2/v)*(exp(but/v
7、)-exp(abut/v)由于需体现仿真过程,程序中画Q(t)的图像,根据时间的改变逐渐变化,在画图中使用描点,并通过for循环,hold on与pause语句进行动态展现,同时变化的Q将不断展现在输出文本框上,最终在t=l1/u时仿真停止,Q=Q(l1/u)。在清空图形的callback调动函数中写入:axes(handles.axes1) cla;可将坐标轴上图形清空,根据单个展示或多个比较图形进行使用。在退出程序的callback调用函数中写入:if isequal 确认窗口根据判断关闭当前窗口程序。3.1运行指南进入程序界面如下图: 4.点击后进入下一界面:按照提示输入各个数据量,点击
8、开始运算即可观察到仿真过程,仿真过程结束后可看到最终结果。再进行第二次输入数据时,可根据需要保留上一次的图形或者清除,若不需保留则可先点击清空图形按钮将图形清空再进行下一次的仿真计算。不需要程序的运行时,点击退出程序即可退出。3.2实例分析假设l1=9cm,l2=1cm,a=0.3,a=0.7,M=30mg,b=0.2,=0.6,v=10cm/s,u=0.1cm/s。依次输入程序并显示结果过程如下: 起始输入 过程截图5.最终结果若输入数据存在问题,则根据问题弹出相应对盈眶如下:含有空输入 含有非数字输入所输比例不满足6.可根据需要选择是否清空图形,若清空则不保留前一次作图痕迹,不清空则保留,
9、具体效果如下图示:未清空 输入前清空若退出程序,则有判断:4、程序代码wlc.mfunction varargout = wlc(varargin)gui_Singleton = 1;gui_State = struct(gui_Name, mfilename, . gui_Singleton, gui_Singleton, .gui_OpeningFcn, wlc_OpeningFcn, .gui_OutputFcn, wlc_OutputFcn, .gui_LayoutFcn, , .gui_Callback, );if nargin & ischar(varargin1) gui_Sta
10、te.gui_Callback = str2func(varargin1);endif nargout7. varargout1:nargout = gui_mainfcn(gui_State, varargin:);else gui_mainfcn(gui_State, varargin:function wlc_OpeningFcn(hObject, eventdata, handles, varargin)handles.output = hObject;pic=imread(w.jpg); %读取图片image(pic);%图片显示set(handles.axes1,visible,o
11、ff%隐去坐标轴guidata(hObject, handles);function varargout = wlc_OutputFcn(hObject, eventdata, handles) varargout1 = handles.output;function pushbutton2_Callback(hObject, eventdata, handles)work11; %打开主界面close(gcbf); %关闭当前界面.Work11.mfunction varargout = work11(varargin), work11_OpeningFcn, ., work11_Outpu
12、tFcn, .function work11_OpeningFcn(hObject, eventdata, handles, varargin)e.jpg%读取图片axes(handles.axes4);%选择坐标轴%显示图片set(handles.axes4,axes(handles.axes1);xlabel(t/sylabel(Q/g%定义XY轴名称8.function varargout = work11_OutputFcn(hObject, eventdata, handles) function edit1_Callback(hObject, eventdata, handles)
13、function edit1_CreateFcn(hObject, eventdata, handles)if ispc set(hObject,BackgroundColorwhite,get(0,defaultUicontrolBackgroundColor);function edit2_Callback(hObject, eventdata, handles)function edit2_CreateFcn(hObject, eventdata, handles)function edit3_Callback(hObject, eventdata, handles)function e
14、dit3_CreateFcn(hObject, eventdata, handles)function edit4_Callback(hObject, eventdata, handles)function edit4_CreateFcn(hObject, eventdata, handles)function edit5_Callback(hObject, eventdata, handles)function edit5_CreateFcn(hObject, eventdata, handles)function edit6_Callback(hObject, eventdata, han
15、dles)function edit6_CreateFcn(hObject, eventdata, handles)9.function edit7_Callback(hObject, eventdata, handles)function edit7_CreateFcn(hObject, eventdata, handles)function edit8_Callback(hObject, eventdata, handles)function edit8_CreateFcn(hObject, eventdata, handles)function edit9_Callback(hObjec
16、t, eventdata, handles)function edit9_CreateFcn(hObject, eventdata, handles)function pushbutton1_Callback(hObject, eventdata, handles)if (isempty(get(handles.edit1,string)|(isempty(get(handles.edit2,)|(isempty(get(handles.edit3,). |(isempty(get(handles.edit4,)|(isempty(get(handles.edit5,)|(isempty(ge
17、t(handles.edit6, |(isempty(get(handles.edit7,)|(isempty(get(handles.edit8,)|(isempty(get(handles.edit9,) msgbox(请确保每个输入框不为空注意%判断是否存在空框,若存在则出提示框l1=str2double(get(handles.edit1,l2=str2double(get(handles.edit2,M=str2double(get(handles.edit3,a1=str2double(get(handles.edit4,a=str2double(get(handles.edit5
18、,b=str2double(get(handles.edit6,b1=str2double(get(handles.edit7,v=str2double(get(handles.edit8,u=str2double(get(handles.edit9,%输入数据的提取 if(isnan(l1)|isnan(l2)|isnan(M)|isnan(a1)|isnan(a)|. isnan(b)|isnan(b1)|isnan(v)|isnan(u)请确保每个输入框为数字%判断输入是否均为数字,若否则出现提示框10. elseif(a+a1=1|a0|a10)请确保为穿行比与散空比为正且和为一 %判
19、断穿行比与散入空气比是否满足要求,不满足则出提示框 elseif(b1|b11|b1请确保吸附率为小于1的正值 %判断吸附率是否满足要求,不满足则出提示框 else q1=a*v*M/(l1*a1*b); q2=exp(-b*l1/v); q3=exp(-b1*l2/v); t1=l1/u; p4=exp(b*u*t1/v); p5=exp(a*b*u*t1/v); P=q1*q2*q3*(p4-p5); %初步计算最终有害物质的量 axis(0 ceil(t1) 0 ceil(P);%根据初步计算固定坐标轴大小 c=t1/500; %由于抽烟时间长短不同,仿真需要较少时间,故需适当步长 fo
20、r t=0:c:(l1/u) q4=exp(b*u*t/v); q5=exp(a*b*u*t/v); Q=q1*q2*q3*(q4-q5); hold on; plot(t,Q,m%for循环描点pause(0.00000001); %停顿体现动态 set(handles.text11,Q);%动态输出相应点的Q值 endif isequal(questdlg(确定要退出吗?信息:确定, 取消 . , ), ) closereq;%退出判断确认框,确认则退出,否则返回function pushbutton3_Callback(hObject, eventdata, handles)axes(handles.axes1)%选择坐标轴cla;%清空11.
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1