数学模型程序代码-Matlab-姜启源-第一章-建立数学模型 

loading 分享 2026-8-27 下载文档

第1章 建立数学模型

教材中给出原始数据,结合模型,得到结果。但如何求得结果这一过程没有给出,实际上要用MATLAB软件编写程序来求得,这应该交给实验课来完成。考虑到上学期同学们刚学习MATLAB语言,编程能力不强,所以有关的程序给出来供同学们进行验证。要求同学们要读懂程序。 1.(求解,编程)如何施救药物中毒p10~11

人体胃肠道和血液系统中的药量随时间变化的规律(模型):

?dx???x,x(0)?1100??dt(?,??0) ?dy???x??y,y(0)?0??dt其中,x(t)为t时刻胃肠道中的药量,y(t)为t时刻血液系统中的药量,

t=0为服药时刻。

(求解)模型求解p10~11

要求:

① 用MATLAB求解微分方程函数dsolve求解该微分方程(符号运算)。 ② 用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), (1100*a*exp(-t*(a + b))*(exp(a*t) - exp(b*t)))/(a - b)] (编程)结果分析p11

已知λ=, μ=,将上题中得到x(t)和y(t)两条曲线画在同一个图形窗口内。参考图形如下。 提示: MATLAB命令plot, fplot, hold on/off, grid on/off, xlabel, ylabel, text。

★ 编写的程序和运行结果:

程序1:用plot clc;clear; a=; b=; t=0::25; x=1100./exp(a*t); y=-(1100*a*(1./exp(a*t) -1./exp(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=; b=; 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'); 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.(编程,验证)商人们怎样安全过河p8~9

三名商人各带一个随从乘船渡河,一只小船只能容纳二人,由他们自己划行。随从们密约,在河的任一岸,一旦随从的人数比商人多,就杀人越货。但是如何乘船的大权掌握在商人们手中。商人们怎样才能安全渡河呢

[模型构成]

决策: 每一步(此岸到彼岸或彼岸到此岸)船上的人员。 要求:在安全的前提下(两岸的随从数不比商人多),经有限步使全体人员过河。

xk 第k次渡河前此岸的商人数

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,2}

uk 第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, sn+1=(0,0)。

, n), 使skS, 并按转移律由 s1=(3,3) 到达

(编程)求允许决策集合D和允许状态集合S

D是2行多列矩阵,每一列是一个决策。 S是2行多列矩阵,每一列是一种状态。 要求:

① 编写程序求D和S,并输出。

② S的第一列是[3,3]',最后一列是[0,0] '。

★ 编写的程序和运行结果:

程序: clear; clc; %求允许决策集合D(2×n1,n1种决策) D=[]; for u=0:2 for v=0:2 if u+v==1||u+v==2 D=[D,[u;v]]; end end end %求允许状态集合S(2×n2,n2种状态) S=[]; for x=3:-1:0 for y=3:-1:0 if x==0||x==3||x==y S=[S,[x;y]]; end end end%首列状态 ( 商人数, 仆从数)' = ( 3, 3 )',末列为( 0, 0 )' D, S 运行结果: (验证)求动态允许状态集合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)=1表示D中存在决策使状态i转到j,否则A(i, j)=0。

程序如下(输入时,不必把注释也输入): 程序运行结果(参考): 要求:

① 将程序接在上题的程序之后(去掉最后多余的输出语句),程序最后给出显示SS和A的语句。

② 运行程序,输出SS和A。对照参考答案,如数值不一致,请检查程序。 MATLAB函数all的用法见提示。

★ 运行的完整程序和运行结果:

程序: clear; clc; %求允许决策集合D(2×n1,n1种决策) D=[]; for u=0:2 for v=0:2 if u+v==1||u+v==2 D=[D,[u;v]]; end end end %求允许状态集合S(2×n2,n2种状态) S=[]; for x=3:-1:0 for y=3:-1:0 if x==0||x==3||x==y S=[S,[x;y]]; end end end%首列状态 ( 商人数, 仆从数)' = ( 3, 3 )',末列为( 0, 0 )' %动态允许状态集合SS(3×n3,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,其它为0 A=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 end end SS, A 运行结果: (验证)给出一个商人们安全过河的方案

程序如下(输入时,不必把注释也输入):

程序运行结果: 要求:

① 读懂以上程序,掌握all和any函数的应用。

② 将程序接在之前的程序后(去掉最后多余的输出语句),运行程序。对照答案,如不一致,请检查程序。

MATLAB函数any的用法见提示。

★ 给出运行的完整程序和运行结果:

程序: clear; clc; %求允许决策集合D(2×n1,n1种决策) D=[]; for u=0:2 for v=0:2 if u+v==1||u+v==2 D=[D,[u;v]]; end end end %求允许状态集合S(2×n2,n2种状态) S=[]; for x=3:-1:0 for y=3:-1:0 if x==0||x==3||x==y


数学模型程序代码-Matlab-姜启源-第一章-建立数学模型 .doc 将本文的Word文档下载到电脑
搜索更多关于: 数学模型程序代码-Matlab-姜启源-第一章-建立数学模型 的文档
相关推荐
相关阅读