欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    数学建模实验答案建立数学模型.docx

    • 资源ID:12653923       资源大小:274.43KB        全文页数:57页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数学建模实验答案建立数学模型.docx

    1、数学建模实验答案建立数学模型实验01 建立数学模型(4学时)(第1章 建立数学模型)教材中给出原始数据,结合模型,得到结果。但如何求得结果这一过程没有给出,实际上要用MATLAB软件编写程序来求得,这应该交给实验课来完成。考虑到上学期同学们刚学习MATLAB语言,编程能力不强,所以有关的程序给出来供同学们进行验证。要求同学们要读懂程序。1.(求解,编程)如何施救药物中毒p1011人体胃肠道和血液系统中的药量随时间变化的规律(模型):其中,x(t)为t时刻胃肠道中的药量,y(t)为t时刻血液系统中的药量,t=0为服药时刻。1.1(求解)模型求解p1011要求: 用MATLAB求解微分方程函数ds

    2、olve求解该微分方程(符号运算)。 用MATLAB的化简函数simplify化简所得结果。 结果与教材P11上的内容比较。提示:dsolve和simplify的用法可用help查询。建议在命令窗口中操作。 求解的语句及运行结果: x,y= dsolve(Dx=-a*x,Dy=a*x-b*y,x(0)=1100,y(0)=0); disp(x,y) 1100*exp(-a*t), exp(-a*t)*exp(-b*t)*(1100*a*exp(a*t)/(a - b) - (1100*a*exp(b*t)/(a - b) disp(simplify(x,y); 1100*exp(-a*t),

    3、(1100*a*exp(-t*(a + b)*(exp(a*t) - exp(b*t)/(a - b)1.2(编程)结果分析p11已知=0.1386, =0.1155,将上题中得到x(t)和y(t)两条曲线画在同一个图形窗口内。参考图形如下。提示:MATLAB命令plot, fplot, hold on/off, grid on/off, xlabel, ylabel, text。 编写的程序和运行结果:程序1:用plotclc;clear;a=0.1386; b=0.1155;t=0:0.01:25;x=1100./exp(a*t);y=-(1100*a*(1./exp(a*t) -1./e

    4、xp(b*t)/(a - b);plot(t,x,t,y);grid on;xlabel(itt /h); ylabel(itx,ity /mg);text(2,1100/exp(a*2), itx(itt);text(3,-(1100*a*(1/exp(a*3) - 1/exp(b*3)/(a - b), ity(itt);程序2:用fplot和匿名函数clc;clear;a=0.1386; b=0.1155;fplot(t)1100/exp(a*t),-(1100*a*(1/exp(a*t) - 1/exp(b*t)/(a - b),0 25);grid on;xlabel(itt /h)

    5、; ylabel(itx,ity /mg);text(2,1100/exp(a*2), itx(itt);text(3,-(1100*a*(1/exp(a*3) - 1/exp(b*3)/(a - b), ity(itt);2.(编程,验证)商人们怎样安全过河p89三名商人各带一个随从乘船渡河,一只小船只能容纳二人,由他们自己划行。随从们密约,在河的任一岸,一旦随从的人数比商人多,就杀人越货。但是如何乘船的大权掌握在商人们手中。商人们怎样才能安全渡河呢?模型构成决策: 每一步(此岸到彼岸或彼岸到此岸)船上的人员。要求:在安全的前提下(两岸的随从数不比商人多),经有限步使全体人员过河。xk 第k

    6、次渡河前此岸的商人数yk 第k次渡河前此岸的随从数 xk , yk=0,1,2,3; k=1,2,过程的状态 sk=(xk , yk)允许状态集合 S=(x, y) x=0, y=0,1,2,3; x=3, y=0,1,2,3; x=y=1,2uk 第k次渡船上的商人数vk 第k次渡船上的随从数 uk , vk=0,1,2; k=1,2,决策 dk=(uk , vk)允许决策集合 D=(u , v) u+v =1, 2状态转移律 sk+1=sk+(-1)kdk多步决策问题求dkD(k=1, 2, , n), 使skS, 并按转移律由 s1=(3,3) 到达sn+1=(0,0)。2.1(编程)求

    7、允许决策集合D和允许状态集合SD是2行多列矩阵,每一列是一个决策。S是2行多列矩阵,每一列是一种状态。要求: 编写程序求D和S,并输出。 S的第一列是3,3,最后一列是0,0 。 编写的程序和运行结果:程序:clear; clc;%求允许决策集合D(2n1,n1种决策)D=;for u=0:2 for v=0:2 if u+v=1|u+v=2 D=D,u;v; end endend%求允许状态集合S(2n2,n2种状态)S=;for x=3:-1:0 for y=3:-1:0 if x=0|x=3|x=y S=S,x;y; end endend%首列状态 ( 商人数, 仆从数) = ( 3,

    8、3 ),末列为( 0, 0 )D, S运行结果:2.2(验证)求动态允许状态集合SS和状态转移矩阵A上面允许状态集合S没有指明当时船是在此岸还是在彼岸,应该将S中的每一种状态再分为两种状态,需增加一个元素(值为-1或1)放在第三行。定义动态允许状态集合 SS=(x, y, z) x=0, y=0,1,2,3; x=3, y=0,1,2,3; x=y=1,2;z=-1,1(x, y, -1),表示从此岸渡河前此岸的允许状态(x, y)。(x, y, 1),表示从彼岸渡河前此岸的允许状态(x, y)。SS是三行多列矩阵,每一列表示一种状态,列下标为其编号。定义状态转移矩阵A,其中,A(i, j)=

    9、1表示D中存在决策使状态i转到j,否则A(i, j)=0。程序如下(输入时,不必把注释也输入):程序运行结果(参考):要求: 将程序接在上题的程序之后(去掉最后多余的输出语句),程序最后给出显示SS和A的语句。 运行程序,输出SS和A。对照参考答案,如数值不一致,请检查程序。MATLAB函数all的用法见提示。 运行的完整程序和运行结果:程序:clear; clc;%求允许决策集合D(2n1,n1种决策)D=;for u=0:2 for v=0:2 if u+v=1|u+v=2 D=D,u;v; end endend%求允许状态集合S(2n2,n2种状态)S=;for x=3:-1:0 for

    10、 y=3:-1:0 if x=0|x=3|x=y S=S,x;y; end endend%首列状态 ( 商人数, 仆从数) = ( 3, 3 ),末列为( 0, 0 )%动态允许状态集合SS(3n3,n3种状态)%-1,从此岸渡河前此岸的允许状态%1,从彼岸渡河前此岸的允许状态SS=S;-ones(1,size(S,2),S;ones(1,size(S,2);SSnum=size(SS,2);%状态总数,SS中的列下标对应状态的编号%SS(:,1)=3,3,-1(起点),SS(:,end)=0,0,1(终点)%状态转移矩阵A,A(i,j)=1表示存在决策使状态i转到j,其它为0A=zeros(

    11、SSnum);for i=1:SSnum for j=1:SSnum for d=D%顺序取D的每一列给d s=SS(1:2,i)+SS(3,i)*d;-SS(3,i); if all(s=SS(:,j)%所有元素不为0时为真 A(i,j)=1; break; end end endendSS, A运行结果:2.3(验证)给出一个商人们安全过河的方案程序如下(输入时,不必把注释也输入):程序运行结果:要求: 读懂以上程序,掌握all和any函数的应用。 将程序接在之前的程序后(去掉最后多余的输出语句),运行程序。对照答案,如不一致,请检查程序。MATLAB函数any的用法见提示。 给出运行的完

    12、整程序和运行结果:程序:clear; clc;%求允许决策集合D(2n1,n1种决策)D=;for u=0:2 for v=0:2 if u+v=1|u+v=2 D=D,u;v; end endend%求允许状态集合S(2n2,n2种状态)S=;for x=3:-1:0 for y=3:-1:0 if x=0|x=3|x=y S=S,x;y; end endend%首列状态 ( 商人数, 仆从数) = ( 3, 3 ),末列为( 0, 0 )%动态允许状态集合SS(3n3,n3种状态)%-1,从此岸渡河前此岸的允许状态%1,从彼岸渡河前此岸的允许状态SS=S;-ones(1,size(S,2)

    13、,S;ones(1,size(S,2);SSnum=size(SS,2);%状态总数,SS中的列下标对应状态的编号%SS(:,1)=3,3,-1(起点),SS(:,end)=0,0,1(终点)%状态转移矩阵A,A(i,j)=1表示存在决策使状态i转到j,其它为0A=zeros(SSnum);for i=1:SSnum for j=1:SSnum for d=D%顺序取D的每一列给d s=SS(1:2,i)+SS(3,i)*d;-SS(3,i); if all(s=SS(:,j)%所有元素不为0时为真 A(i,j)=1; break; end end endend%SK为多行SSnum列的矩阵,

    14、第i列对应SS的第i列的状态。%第i行表示第i次渡河前有那些状态,1表示有对应下标列号的状态,0则无。%第i+1行是第i行状态转移过来的状态%当第SSnum状态出现时停止,表示有解。%或者新行的元素全0时停止,表示无解。%新行不允许出现之前出现过的状态。s=1,zeros(1,SSnum-1);%从状态3,3,-1开始SK=s;while any(s) & s(SSnum)=1 k=find(s);%求最后一行为1的列下标 s=any(A(k,:),1);%得到新行,元素值为1或0 s=s&any(SK,1);%去掉新行中之前出现的状态 SK=SK;s;%新行加入,作为SK的末行end%多步决

    15、策,直到找到目标。有难度!if any(s)=0 %新行全0 disp(无解!); return;end%最后一行的第SSnum状态(j)开始往回找转换到它的状态(i),直到状态1。%得到一个状态号的顺序sk(行向量),为一个解。sk=zeros(1,size(SK,1);sk(1)=1; sk(1,end)=SSnum; j=SSnum;for k=size(SK,1)-1:-1:2 for i=find(SK(k,:) if A(i,j)=1 sk(k)=i; j=i; break; end endenddisp(1:length(sk);SS(1:2,sk);%输出结果给出程序的运行结果

    16、:3.(求解)商人们怎样安全过河(修改)p9对第2题的问题改动,用类似的方法求解。3.1 在第2题中修改商人数和随从数有四名商人各带一个随从,其它同第2题。修改第2题中的程序求解。 修改的程序部分和完整程序的运行结果(安全过河的方案):%求允许状态集合S(2n2,n2种状态)S=;for x=4:-1:0 for y=4:-1:0 if x=0|x=4|x=y S=S,x;y; end endend%首列状态 (商人数, 仆从数) = ( 4, 4 ),末列为( 0, 0 )3.2 在3.1题中修改船容纳的人数船能容纳3人。修改3.1题中的程序求解。 修改的程序部分和完整程序的运行结果(安全过

    17、河的方案):%求允许决策集合D(2n1,n1种决策)D=;for u=0:3 for v=0:3 if u+v=1 & u+v=0) & all(s10& any(s00)%栈未空且s0中至少有一个元素0 s0=st(sp,1,2); ss=st(sp,3);%当前状态,ss=-1/1小船停靠此岸/彼岸 d=st(sp,4);%之前用过的决策,该决策失败 sp=sp-1;%出栈 d=d+1;%试探下一个决策 while d0) s1=s0+ss*D(d,:);%下一个状态,不包括小船停靠状态 i=s1(1)+1;j=s1(2)+1;%状态转换为下标 if all(s1=0) & all(s1=3) & (mark(i,j)=0 | mark(i,j)=-ss) if mark(i,j)=0%标记状态(i-1,j-1)的使用情况 mark(i,j)=ss; else mark(i,j)=2; end sp=sp+1;%进栈 st(sp,:)=s0,ss,d;%当前状态重新进栈,改变了决策 s0=s1; ss=-ss; d=1;%下一个状态作当前状态,选择第1个决策 else%决策d失败 d=d+1; end endendif s0=0 disp(1:sp+1,st(1:sp,1:2);s0);%有解


    注意事项

    本文(数学建模实验答案建立数学模型.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开