数学建模 实验一Word文件下载.docx
- 文档编号:3712508
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:21
- 大小:423.78KB
数学建模 实验一Word文件下载.docx
《数学建模 实验一Word文件下载.docx》由会员分享,可在线阅读,更多相关《数学建模 实验一Word文件下载.docx(21页珍藏版)》请在冰点文库上搜索。
图形如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;
决策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=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);
(类似v的所有元素“或”)
对于矩阵X,any(X)返回一个行向量,每一个元素值为any作用于X对应列的结果。
any(X,1)作用于列(同any(X)),any(X,2)作用于行。
D=[];
foru=0:
2
forv=0:
ifu+v==1||u+v==2
D=[D[u;
v]];
end
end
S=[];
forx=3:
-1:
fory=3:
ifx==0||x==3||x==y
S=[S,[x;
y]];
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:
ford=D
s=[SS(1:
2,i)+SS(3,i)*d;
-SS(3,i)];
ifall(s==SS(:
j))
A(i,j)=1;
break;
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];
if~any(s)
disp('
Î
Þ
½
â
£
¡
'
);
return;
sk=zeros(1,size(SK,1));
sk
(1)=1;
sk(1,end)=SSnum;
j=SSnum;
fork=size(SK,1)-1:
fori=find(SK(k,:
))
ifA(i,j)==1
sk(k)=i;
j=i;
disp([1:
length(sk);
SS(1:
2,sk)]);
★程序的运行结果。
3.(求解)商人们怎样安全过河(修改)p9
对第2题的问题改动,用类似的方法求解。
3.1在第2题中修改商人数和随从数
有四名商人各带一个随从,其它同第2题。
修改第2题中的程序求解。
★修改的程序部分和运行结果(安全过河的方案)
forx=4:
fory=4:
ifx==0||x==4||x==y
3.2在3.1题中修改船容纳的人数
船能容纳3人。
修改3.1题中的程序求解。
3
ifu+v==1||u+v==2||u+v==3
4.(编程)安全过河问题(人、猫、鸡、米)p21习题5
人带着猫、鸡、米过河,除需要人划船之外,船至多能载猫、鸡、米三者之一,而当人不在场时猫要吃鸡、鸡要吃米。
试设计一个安全过河方案。
模仿商人过河问题的程序编写程序解决本问题。
★程序
%x1表示人,x2表示猫,x3表示鸡,x4表示米
x1=1;
forx2=0:
1
forx3=0:
forx4=0:
ifx2+x3+x4==1||x2+x3+x4==0
D=[D[x1;
x2;
x3;
x4]];
forx1=1:
forx2=1:
forx3=1:
forx4=1:
ifx1==0&
(x3+x4~=2)&
(x2+x3~=2)||x1==1&
(x3+x4~=0)&
(x2+x3~=0)
S=[S,[x1;
x2;
x3;
x4]];
SS=[[S;
4,i)+SS(5,i)*d;
-SS(5,i)];
4,sk)]);
★程序的运行结果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数学建模 实验一 数学 建模 实验