1、Dx=-a*x,Dy=a*x-b*yx(0)=1100y(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, hol
2、d on/off, grid on/off, xlabel, ylabel, text。 编写的程序和运行结果:程序1:用plotclc;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 /mgtext(2,1100/exp(a*2), itx(itt)text(3,-(1100*a*(1/exp(a*3) - 1/exp(b*3)/(a - b), ity(itt)程序2:用fp
3、lot和匿名函数fplot(t)1100/exp(a*t),-(1100*a*(1/exp(a*t) - 1/exp(b*t)/(a - b),0 25);2.(编程,验证)商人们怎样安全过河p89三名商人各带一个随从乘船渡河,一只小船只能容纳二人,由他们自己划行。随从们密约,在河的任一岸,一旦随从的人数比商人多,就杀人越货。但是如何乘船的大权掌握在商人们手中。商人们怎样才能安全渡河呢模型构成决策: 每一步(此岸到彼岸或彼岸到此岸)船上的人员。在安全的前提下(两岸的随从数不比商人多),经有限步使全体人员过河。xk 第k次渡河前此岸的商人数yk 第k次渡河前此岸的随从数 xk , yk=0,1,
4、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;决策 dk=(uk , vk)允许决策集合 D=(u , v) u+v =1, 2状态转移律 sk+1=sk+(-1)kdk多步决策问题求dk D(k=1, 2, , n), 使sk S, 并按转移律由 s1=(3,3) 到达sn+1=(0,0)。(编程)求允许决策集合D和允许状态集合SD是2行多列矩阵,每一列是一个决策。S是2行多列矩阵,每一列
5、是一种状态。 编写程序求D和S,并输出。 S的第一列是3,3,最后一列是0,0 。程序: clc;%求允许决策集合D(2n1,n1种决策)D=;for u=0:2 for v=0: if u+v=1|u+v=2 D=D,u;v; endend%求允许状态集合S(2n2,n2种状态)S=;for x=3:-1: for y=3: if x=0|x=3|x=y S=S,x;y;end%首列状态 ( 商人数, 仆从数) = ( 3, 3 ),末列为( 0, 0 )D, S运行结果:(验证)求动态允许状态集合SS和状态转移矩阵A上面允许状态集合S没有指明当时船是在此岸还是在彼岸,应该将S中的每一种状态
6、再分为两种状态,需增加一个元素(值为-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的语句。
7、运行程序,输出SS和A。对照参考答案,如数值不一致,请检查程序。MATLAB函数all的用法见提示。 运行的完整程序和运行结果:%动态允许状态集合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(SSnum);for i=1:SSnum
8、 for j=1: 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;SS, A(验证)给出一个商人们安全过河的方案程序运行结果: 读懂以上程序,掌握all和any函数的应用。 将程序接在之前的程序后(去掉最后多余的输出语句),运行程序。对照答案,如不一致,请检查程序。MATLAB函数any的用法见提示。 给出运行的完整程序和运行结果:%SK为多行SSnum列的矩阵,第i列对应SS的第i列的状态。%第i行表示第i次渡河前有那些状态,1表示有对应下标列号的状
9、态,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%多步决策,直到找到目标。有难度!if any(s)=0 %新行全0 disp(无解! return;%最后一行的第SSnum状态(j)开始往回找转换到它的状态(i),直到状态1。%得到一个状态号的顺序sk(行向量),为一个解。sk=zeros(1,size(SK,1)