数学建模 实验一.docx

上传人:b****1 文档编号:2001244 上传时间:2023-05-02 格式:DOCX 页数:21 大小:423.78KB
下载 相关 举报
数学建模 实验一.docx_第1页
第1页 / 共21页
数学建模 实验一.docx_第2页
第2页 / 共21页
数学建模 实验一.docx_第3页
第3页 / 共21页
数学建模 实验一.docx_第4页
第4页 / 共21页
数学建模 实验一.docx_第5页
第5页 / 共21页
数学建模 实验一.docx_第6页
第6页 / 共21页
数学建模 实验一.docx_第7页
第7页 / 共21页
数学建模 实验一.docx_第8页
第8页 / 共21页
数学建模 实验一.docx_第9页
第9页 / 共21页
数学建模 实验一.docx_第10页
第10页 / 共21页
数学建模 实验一.docx_第11页
第11页 / 共21页
数学建模 实验一.docx_第12页
第12页 / 共21页
数学建模 实验一.docx_第13页
第13页 / 共21页
数学建模 实验一.docx_第14页
第14页 / 共21页
数学建模 实验一.docx_第15页
第15页 / 共21页
数学建模 实验一.docx_第16页
第16页 / 共21页
数学建模 实验一.docx_第17页
第17页 / 共21页
数学建模 实验一.docx_第18页
第18页 / 共21页
数学建模 实验一.docx_第19页
第19页 / 共21页
数学建模 实验一.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数学建模 实验一.docx

《数学建模 实验一.docx》由会员分享,可在线阅读,更多相关《数学建模 实验一.docx(21页珍藏版)》请在冰点文库上搜索。

数学建模 实验一.docx

数学建模实验一

实验01建立数学模型(4学时)

(第1章建立数学模型)

教材中给出原始数据,结合模型,得到结果。

但如何求得结果这一过程没有给出,实际上要用MATLAB软件编写程序来求得,这应该交给实验课来完成。

考虑到上学期同学们刚学习MATLAB语言,编程能力不强,所以有关的程序给出来供同学们进行验证。

要求同学们要读懂程序。

1.(求解,编程)如何施救药物中毒p10~11

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

其中,x(t)为t时刻胃肠道中的药量,y(t)为t时刻血液系统中的药量,t=0为服药时刻。

1.1(求解)模型求解p10~11

①用MATLAB求解微分方程函数dsolve求解该微分方程(符号运算)。

②用MATLAB的化简函数simplify化简所得结果。

③结果与教材P11上的内容比较。

提示:

dsolve和simplify的用法可用help查询。

建议在命令窗口中操作。

★求解的语句及运行结果。

1.2(编程)结果分析p11

已知λ=0.1386,μ=0.1155,将上题中得到x(t)和y(t)两条曲线画在同一个图形窗口内。

图形如P11中的图1。

提示:

MATLAB命令plot,fplot,holdon/off,gridon/off,xlabel,ylabel,text。

★编写的程序。

★运行结果。

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,,n),使skS,并按转移律由s1=(3,3)到达sn+1=(0,0)。

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

D是2行多列矩阵,每一列是一个决策。

S是2行多列矩阵,每一列是一种状态。

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

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

★编写的程序。

★输出结果。

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)=1表示D中存在决策使状态i转到j,否则A(i,j)=0。

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

要求:

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

②运行程序,输出SS和A。

[提示:

all]

对于向量v,all(v)当v的所有元素都非0时,返回true(值为1);否则返回false(值为0)。

(类似v的所有元素“与”)

对于矩阵X,all(X)返回一个行向量,每一个元素值为all作用于X对应列的结果。

all(X,1)作用于列(同all(X)),all(X,2)作用于行。

★运行的完整程序。

★运行结果。

2.3(验证)给出一个商人们安全过河的方案

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

要求:

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

②将程序接在之前的程序(去掉最后多余的输出语句)后,运行程序。

[提示:

any]

对于向量v,any(v)当v中有元素非0时,返回true(值为1);否则返回false(值为0)。

(类似v的所有元素“或”)

对于矩阵X,any(X)返回一个行向量,每一个元素值为any作用于X对应列的结果。

any(X,1)作用于列(同any(X)),any(X,2)作用于行。

★运行的完整程序。

D=[];

foru=0:

2

forv=0:

2

ifu+v==1||u+v==2

D=[D[u;v]];

end

end

end

S=[];

forx=3:

-1:

0

fory=3:

-1:

0

ifx==0||x==3||x==y

S=[S,[x;y]];

end

end

end

SS=[[S;-ones(1,size(S,2))],[S;ones(1,size(S,2))]];

SSnum=size(SS,2);

A=zeros(SSnum);

fori=1:

SSnum

forj=1:

SSnum

ford=D

s=[SS(1:

2,i)+SS(3,i)*d;-SS(3,i)];

ifall(s==SS(:

j))

A(i,j)=1;break;

end

end

end

end

SS=[[S;-ones(1,size(S,2))],[S;ones(1,size(S,2))]];

SSnum=size(SS,2);

A=zeros(SSnum);

fori=1:

SSnum

forj=1:

SSnum

ford=D

s=[SS(1:

2,i)+SS(3,i)*d;-SS(3,i)];

ifall(s==SS(:

j))

A(i,j)=1;break;

end

end

end

end

s=[1,zeros(1,SSnum-1)];

SK=s;

whileany(s)&&all(SSnum-find(s))

k=find(s);

s=any(A(k,:

),1);

s=s&~any(SK,1);

SK=[SK;s];

end

if~any(s)

disp('Î޽⣡');return;

end

sk=zeros(1,size(SK,1));

sk

(1)=1;sk(1,end)=SSnum;j=SSnum;

fork=size(SK,1)-1:

-1:

2

fori=find(SK(k,:

))

ifA(i,j)==1

sk(k)=i;j=i;break;

end

end

end

disp([1:

length(sk);SS(1:

2,sk)]);

★程序的运行结果。

3.(求解)商人们怎样安全过河(修改)p9

对第2题的问题改动,用类似的方法求解。

3.1在第2题中修改商人数和随从数

有四名商人各带一个随从,其它同第2题。

修改第2题中的程序求解。

★修改的程序部分和运行结果(安全过河的方案)

D=[];

foru=0:

2

forv=0:

2

ifu+v==1||u+v==2

D=[D[u;v]];

end

end

end

S=[];

forx=4:

-1:

0

fory=4:

-1:

0

ifx==0||x==4||x==y

S=[S,[x;y]];

end

end

end

SS=[[S;-ones(1,size(S,2))],[S;ones(1,size(S,2))]];

SSnum=size(SS,2);

A=zeros(SSnum);

fori=1:

SSnum

forj=1:

SSnum

ford=D

s=[SS(1:

2,i)+SS(3,i)*d;-SS(3,i)];

ifall(s==SS(:

j))

A(i,j)=1;break;

end

end

end

end

SS=[[S;-ones(1,size(S,2))],[S;ones(1,size(S,2))]];

SSnum=size(SS,2);

A=zeros(SSnum);

fori=1:

SSnum

forj=1:

SSnum

ford=D

s=[SS(1:

2,i)+SS(3,i)*d;-SS(3,i)];

ifall(s==SS(:

j))

A(i,j)=1;break;

end

end

end

end

s=[1,zeros(1,SSnum-1)];

SK=s;

whileany(s)&&all(SSnum-find(s))

k=find(s);

s=any(A(k,:

),1);

s=s&~any(SK,1);

SK=[SK;s];

end

if~any(s)

disp('Î޽⣡');return;

end

sk=zeros(1,size(SK,1));

sk

(1)=1;sk(1,end)=SSnum;j=SSnum;

fork=size(SK,1)-1:

-1:

2

fori=find(SK(k,:

))

ifA(i,j)==1

sk(k)=i;j=i;break;

end

end

end

disp([1:

length(sk);SS(1:

2,sk)]);

3.2在3.1题中修改船容纳的人数

船能容纳3人。

修改3.1题中的程序求解。

★修改的程序部分和运行结果(安全过河的方案)

D=[];

foru=0:

3

forv=0:

3

ifu+v==1||u+v==2||u+v==3

D=[D[u;v]];

end

end

end

S=[];

forx=4:

-1:

0

fory=4:

-1:

0

ifx==0||x==4||x==y

S=[S,[x;y]];

end

end

end

SS=[[S;-ones(1,size(S,2))],[S;ones(1,size(S,2))]];

SSnum=size(SS,2);

A=zeros(SSnum);

fori=1:

SSnum

forj=1:

SSnum

ford=D

s=[SS(1:

2,i)+SS(3,i)*d;-SS(3,i)];

ifall(s==SS(:

j))

A(i,j)=1;break;

end

end

end

end

SS=[[S;-ones(1,size(S,2))],[S;ones(1,size(S,2))]];

SSnum=size(SS,2);

A=zeros(SSnum);

fori=1:

SSnum

forj=1:

SSnum

ford=D

s=[SS(1:

2,i)+SS(3,i)*d;-SS(3,i)];

ifall(s==SS(:

j))

A(i,j)=1;break;

end

end

end

end

s=[1,zeros(1,SSnum-1)];

SK=s;

whileany(s)&&all(SSnum-find(s))

k=find(s);

s=any(A(k,:

),1);

s=s&~any(SK,1);

SK=[SK;s];

end

if~any(s)

disp('Î޽⣡');return;

end

sk=zeros(1,size(SK,1));

sk

(1)=1;sk(1,end)=SSnum;j=SSnum;

fork=size(SK,1)-1:

-1:

2

fori=find(SK(k,:

))

ifA(i,j)==1

sk(k)=i;j=i;break;

end

end

end

disp([1:

length(sk);SS(1:

2,sk)]);

4.(编程)安全过河问题(人、猫、鸡、米)p21习题5

人带着猫、鸡、米过河,除需要人划船之外,船至多能载猫、鸡、米三者之一,而当人不在场时猫要吃鸡、鸡要吃米。

试设计一个安全过河方案。

模仿商人过河问题的程序编写程序解决本问题。

★程序

%x1表示人,x2表示猫,x3表示鸡,x4表示米

D=[];

x1=1;

forx2=0:

1

forx3=0:

1

forx4=0:

1

ifx2+x3+x4==1||x2+x3+x4==0

D=[D[x1;x2;x3;x4]];

end

end

end

end

S=[];

forx1=1:

-1:

0

forx2=1:

-1:

0

forx3=1:

-1:

0

forx4=1:

-1:

0

ifx1==0&&(x3+x4~=2)&&(x2+x3~=2)||x1==1&&(x3+x4~=0)&&(x2+x3~=0)

S=[S,[x1;x2;x3;x4]];

end

end

end

end

end

SS=[[S;-ones(1,size(S,2))],[S;ones(1,size(S,2))]];

SSnum=size(SS,2);

A=zeros(SSnum);

fori=1:

SSnum

forj=1:

SSnum

ford=D

s=[SS(1:

4,i)+SS(5,i)*d;-SS(5,i)];

ifall(s==SS(:

j))

A(i,j)=1;break;

end

end

end

end

s=[1,zeros(1,SSnum-1)];

SK=s;

whileany(s)&&all(SSnum-find(s))

k=find(s);

s=any(A(k,:

),1);

s=s&~any(SK,1);

SK=[SK;s];

end

if~any(s)

disp('Î޽⣡');return;

end

sk=zeros(1,size(SK,1));

sk

(1)=1;sk(1,end)=SSnum;j=SSnum;

fork=size(SK,1)-1:

-1:

2

fori=find(SK(k,:

))

ifA(i,j)==1

sk(k)=i;j=i;break;

end

end

end

disp([1:

length(sk);SS(1:

4,sk)]);

★程序的运行结果

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

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

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