资源描述:
《《数学模型》实验答案》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第01章建立数学模型实验01-01商人们怎样安全过河(编程,p7~8)三名商人各带一个随从乘船渡河,一只小船只能容纳二人,由他们自己划行。随从们密约,在河的任一岸,一旦随从的人数比商人多,就杀人越货。但是如何乘船的大权掌握在商人们手中。商人们怎样才能安全渡河呢?[分析]决策:每一步(此岸到彼岸或彼岸到此岸)船上的人员。要求:在安全的前提下(两岸的随从数不比商人多),经有限步使全体人员过河。[模型构成]xk第k次渡河前此岸的商人数yk第k次渡河前此岸的随从数xk,yk=0,1,2,3;k=1,2,¼过程的状态sk=(xk,yk)允许状态集合S={(x,y)
2、x=0,y=0,1,2,3;x=3,y
3、=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)
4、u+v=1,2}状态转移律sk+1=sk+(-1)kdk[多步决策问题]141求dkÎD(k=1,2,¼,n),使skÎS,并按转移律由s1=(3,3)到达sn+1=(0,0)。[算法]1.给出允许状态集合;%用4阶方阵mark标记,其中mark(i,j)=0表示(i-1,j-1)为允许状态,mark(i,j)=3表示(i-1,j-1)为不可达状态2.给出允许决策集合;%D=[01;02;10;11;20]3.初始状态进栈
5、;%进栈数据包括:当前状态,出发标记(-1为从此岸出发,1为从彼岸出发),选择第几个决策4.初始状态标记;%mark(i,j)=-1表示从此岸出发转移到状态(i-1,j-1)已走过,mark(i,j)=1表示从彼岸出发转移到状态(i-1,j-1)已走过,mark(i,j)=3表示上述两种情况都出现5.循环直到栈空5.1出栈,将出栈的状态作为当前状态,并选择下一个决策;%原决策失败,回溯5.2循环直到决策都用过或到达最终状态5.2.1由当前状态、出发标记和决策得到转移到的新状态;5.2.2若新状态是允许状态且没走过,则执行5.2.2.1;否则执行5.2.2.65.2.2.1标记新状态的访问信息;
6、%mark(i,j)=-1/1/35.2.2.2当前状态及相关数据进栈;%存储决策过程5.2.2.4将新状态作为当前状态,改变出发标记,选择第1个决策;5.2.2.5跳转5.2;%从新状态开始1415.2.2.6选择下一个决策;%当前状态不变,当前决策无效5.3当前状态为最终状态,则退出循;6.如果有解,则输出决策过程;否则输出“无解”;[程序]clear;clc;mark=3*ones(4);mark(1,:)=0;mark(4,:)=0;%mark(i,j)=0为允许状态mark(2,2)=0;mark(3,3)=0;D=[01;02;10;11;20];%允许决策集合sp=1;st(sp
7、,:)=[3,3,-1,0];%进栈,(3,3)为当前状态,-1表示当前在此岸,决策0mark(4,4)=3;whilesp>0s0=st(sp,[1,2]);ss=st(sp,3);d=st(sp,4);sp=sp-1;%出栈d=d+1;whiled<6&&any(s0>0)s1=s0+ss*D(d,:);i=s1(1)+1;j=s1(2)+1;ifall(s1>-1)&&all(s1<4)&&(mark(i,j)==0
8、
9、mark(i,j)==-ss)ifmark(i,j)==0mark(i,j)=ss;else141mark(i,j)=3;endsp=sp+1;%进栈st(sp,:)=[
10、s0,ss,d];s0=s1;ss=-ss;d=1;elsed=d+1;endendifs0==0break;endendifs0==0disp([st(1:sp,1:2);s0]);%有解elsedisp('无解');end[运行结果]333132141303111220203010200实验01-02求解人口指数增长模型(编程,p10)人口指数增长模型满足微分方程其中,x(t)为t时刻的人口数,r为人口增长率(常数),x0为初始时刻(t=0)的人口数。>>x=dsolve('Dx=r*x','x(0)=x0')x=x0*exp(r*t)实验01-03人口指数增长模型参数估计及结果分析(美国
11、1790-2000年人口)(验证,p11)1.用表中数据进行数据拟合求参数r,x0的结果。用数据估计的参数为:141r=0.2022x0=6.04502.人口指数增长模型计算结果与实际数据比较(数据表)的结果。第1行为年份,第2行为实际人口,第3行为计算人口。指数增长模型拟合美国人口数据的结果Columns1through10179018001810182018301840185018601870