数学模型程序代码-Matlab-姜启源-第一章-建立数学模型_第1页
数学模型程序代码-Matlab-姜启源-第一章-建立数学模型_第2页
数学模型程序代码-Matlab-姜启源-第一章-建立数学模型_第3页
数学模型程序代码-Matlab-姜启源-第一章-建立数学模型_第4页
数学模型程序代码-Matlab-姜启源-第一章-建立数学模型_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第1章 建立数学模型教材中给出原始数据,结合模型,得到结果。但如何求得结果这一过程没有给出,实际上要用MATLAB软件编写程序来求得,这应该交给实验课来完成。考虑到上学期同学们刚学习MATLAB语言,编程能力不强,所以有关的程序给出来供同学们进行验证。要求同学们要读懂程序。1.(求解,编程)如何施救药物中毒p1011人体胃肠道和血液系统中的药量随时间变化的规律(模型):其中,x(t)为t时刻胃肠道中的药量,y(t)为t时刻血液系统中的药量,t=0为服药时刻。1.1(求解)模型求解p1011要求: 用MATLAB求解微分方程函数dsolve求解该微分方程(符号运算)。 用MATLAB的化简函数s

2、implify化简所得结果。 结果与教材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

3、(simplify(x,y); 1100*exp(-a*t), (1100*a*exp(-t*(a + b)*(exp(a*t) - exp(b*t)/(a - b)1.2(编程)结果分析p11已知=0.1386, =0.1155,将上题中得到x(t)和y(t)两条曲线画在同一个图形窗口内。参考图形如下。提示:MATLAB命令plot, fplot, hold on/off, grid on/off, xlabel, ylabel, text。 编写的程序和运行结果:程序1:用plotclc;clear;a=0.1386; b=0.1155;t=0:0.01:25;x=1100./exp(a*

4、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=0.1386; b=0.1155;fplot(t)1100/exp(a

5、*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.(编程,验证)商人们怎样安全过河p89三名商人各带一个随从乘船渡河,一只小船只能容纳二人,由他们自己划行。随从们密约,在河的任一岸,一旦随从

6、的人数比商人多,就杀人越货。但是如何乘船的大权掌握在商人们手中。商人们怎样才能安全渡河呢?模型构成决策: 每一步(此岸到彼岸或彼岸到此岸)船上的人员。要求:在安全的前提下(两岸的随从数不比商人多),经有限步使全体人员过河。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,2uk第k次渡船上的商人数vk第k次渡船上的随从数 uk , vk=0,1,2; k=1,2,¼决策dk=(u

7、k , 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)。2.1(编程)求允许决策集合D和允许状态集合SD是2行多列矩阵,每一列是一个决策。S是2行多列矩阵,每一列是一种状态。要求: 编写程序求D和S,并输出。 S的第一列是3,3',最后一列是0,0 '。 编写的程序和运行结果:程序:clear; clc;%求允许决策集合D(2×n1,n1种决策)D=;for u=0

8、:2 for v=0:2 if u+v=1|u+v=2 D=D,u;v; end endend%求允许状态集合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 endend%首列状态 ( 商人数, 仆从数)' = ( 3, 3 )',末列为( 0, 0 )'D, S运行结果:2.2(验证)求动态允许状态集合SS和状态转移矩阵A上面允许状态集合S没有指明当时船是在此岸还是在彼岸,应该将S中的每一种状态再分为两种状态,需增加一个元素(值为-1或1)放在第三行。定义动态允许状态

9、集合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。对

10、照参考答案,如数值不一致,请检查程序。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 endend%求允许状态集合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 endend%首列状态 ( 商人数, 仆从数)' = ( 3, 3 )',末列为( 0, 0 )'%动态允许状态集

11、合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,其它为0A=zeros(SSnum);for i=1:SSnum for j=1:SSnum for d=D%顺序取D的每一列给d s=SS(1:2,i)+SS(3,i)*d;

12、-SS(3,i); if all(s=SS(:,j)%所有元素不为0时为真 A(i,j)=1; break; end end endendSS, A运行结果:2.3(验证)给出一个商人们安全过河的方案程序如下(输入时,不必把注释也输入):程序运行结果:要求: 读懂以上程序,掌握all和any函数的应用。 将程序接在之前的程序后(去掉最后多余的输出语句),运行程序。对照答案,如不一致,请检查程序。MATLAB函数any的用法见提示。 给出运行的完整程序和运行结果:程序:clear; clc;%求允许决策集合D(2×n1,n1种决策)D=;for u=0:2 for v=0:2 if u

13、+v=1|u+v=2 D=D,u;v; end endend%求允许状态集合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 endend%首列状态 ( 商人数, 仆从数)' = ( 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);%状态总数,

14、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 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 endend%SK为多行SSnum列的矩阵,第i列对应SS的第i列的状态。%第i行表示第i次渡河前有那些状态,

15、1表示有对应下标列号的状态,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

16、 any(s)=0 %新行全0disp('无解!'); return;end%最后一行的第SSnum状态(j)开始往回找转换到它的状态(i),直到状态1。%得到一个状态号的顺序sk(行向量),为一个解。sk=zeros(1,size(SK,1);sk(1)=1; sk(1,end)=SSnum; j=SSnum;for k=size(SK,1)-1:-1:2 for i=find(SK(k,:) if A(i,j)=1 sk(k)=i; j=i; break; end endenddisp(1:length(sk);SS(1:2,sk);%输出结果给出程序的运行结果:3.(求解

17、)商人们怎样安全过河(修改)p9对第2题的问题改动,用类似的方法求解。3.1 在第2题中修改商人数和随从数有四名商人各带一个随从,其它同第2题。修改第2题中的程序求解。 修改的程序部分和完整程序的运行结果(安全过河的方案):%求允许状态集合S(2×n2,n2种状态)S=;for x=4:-1:0 for y=4:-1:0 if x=0|x=4|x=y S=S,x;y; end endend%首列状态 (商人数, 仆从数)' = ( 4, 4 )',末列为( 0, 0 )'3.2 在3.1题中修改船容纳的人数船能容纳3人。修改3.1题中的程序求解。 修改的程序部

18、分和完整程序的运行结果(安全过河的方案):%求允许决策集合D(2×n1,n1种决策)D=;for u=0:3 for v=0:3 if u+v>=1 && u+v<=3 D=D,u;v; end endend4.(编程)安全过河问题(人、猫、鸡、米)p21习题5人带着猫、鸡、米过河,除需要人划船之外,船至多能载猫、鸡、米三者之一,而当人不在场时猫要吃鸡、鸡要吃米。试设计一个安全过河方案。模仿商人过河问题的程序编写程序解决本问题。 程序:clear; clc;%求允许决策集合D(2×n1,n1种决策)D=1,0,0,0',1,1,0,0&#

19、39;,1,0,1,0',1,0,0,1'%求允许状态集合S(2×n2,n2种状态)S=;j=1;for a=23+22+21+1:-1:0 s=fix(a/23);mod(fix(a/22),2);mod(fix(a/2),2);mod(a,2);%取二进制数字 if s(1)&&(s(2)&&s(4)|s(3)|s(1)&&(s(2)&&s(4)|s(3) S(:,j)=s; j=j+1; end%s=人,猫,鸡,米end%首列状态=(1,1,1,1)',末列为(0,0,0,0)'%动

20、态允许状态集合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)=1,1,1,1,-1'(起点),SS(:,end)=0,0,0,0,1'(终点)%状态转移矩阵A,A(i,j)=1表示存在决策使状态i转到j,其它为0A=zeros(SSnum);for i=1:SSnum for j=1:SSnum for d=D%顺序取D的每一列给d s=SS(1:4

21、,i)+SS(5,i)*d;-SS(5,i); if all(s=SS(:,j)%所有元素不为0时为真 A(i,j)=1; break; end end endend%SK为多行SSnum列的矩阵,第i列对应SS的第i列的状态。%第i行表示第i次渡河前有那些状态,1表示有对应下标列号的状态,0则无。%第i+1行是第i行状态转移过来的状态%当第SSnum状态出现时停止,表示有解。%或者新行的元素全0时停止,表示无解。%新行不允许出现之前出现过的状态。s=1,zeros(1,SSnum-1);%从状态1,1,1,1,-1'开始SK=s;while any(s) && all

22、(SSnum-find(s) k=find(s);%求最后一行为1的列下标 s=any(A(k,:),1);%得到新行,元素值为1或0 s=s&any(SK,1);%去掉新行中之前出现的状态 SK=SK;s;%新行加入,作为SK的末行endif any(s) %新行全0disp('无解!'); return;end%最后一行的第SSnum状态(j)开始往回找转换到它的状态(i),直到状态1。%得到一个状态号的顺序sk(行向量),为一个解。sk=zeros(1,size(SK,1);sk(1)=1; sk(1,end)=SSnum; j=SSnum;for k=size(

23、SK,1)-1:-1:2 for i=find(SK(k,:) if A(i,j)=1 sk(k)=i; j=i; break; end endenddisp(1:length(sk);SS(1:4,sk);%输出结果 程序的运行结果5.(选做,编程)商人们怎样安全过河(自编)2.3中的程序有一定难度,所以给出了参考程序,初学MATLAB的同学可能想不到用其中的一些语句。第2题给出的是求解商人们安全过河问题的一种算法程序,还有其它的算法程序,比如回溯法、递归算法等。要求: 按照自己的理解和想法,改写2.3中的程序。 或用别的算法编写解决商人们安全过河的程序。 程序和运行结果:解1(递归)程序f

24、unction river()global mark D SHOW;%全局变量mark=2*ones(4);mark(1,:)=0; mark(4,:)=0;%mark(i,j)=0为允许状态mark(2,2)=0; mark(3,3)=0;D=0 1; 0 2; 1 0; 1 1; 2 0;%允许决策集合mark(4,4)=2; SHOW=;fun(3,3,-1);disp(3,3;SHOW);returnfunction f=fun(s,t)global mark D SHOW;%全局变量if s=0f=1; return;endfor k=1:5s1=s+t*D(k,:);i=s1(1)

25、+1; j=s1(2)+1;if all(s1>=0) && all(s1<=3) && (mark(i,j)=0 | mark(i,j)=t)if mark(i,j)=0%标记状态(i-1,j-1)的使用情况mark(i,j)=-t;elsemark(i,j)=2;end if fun(s1,-t)SHOW=s1;SHOW; f=1; return; endendendif s=3 disp('无解');endf=0;运行结果3 33 13 23 0 %船停靠彼岸,先把所有随从渡过彼岸3 11 12 20 2 %船停靠彼岸,再把所有

26、商人渡过彼岸0 3 %船停靠此岸,此岸只有随从,彼岸只有商人0 10 20 0 %船停靠彼岸,最后把所有随从渡过彼岸三个阶段:(3,3,船停此岸)(3,0,船停彼岸)(0,3,船停此岸)(0,0,船停彼岸)第一阶段:所有随从渡过彼岸(商人不动);第二阶段:使所有商人渡过彼岸,并将随从渡回此岸;第三阶段:所有随从渡过彼岸(商人不动)。解2(借用栈)思路定义状态:此岸的商人数,随从数,小船停靠在此岸或彼岸。从初始状态开始,找到一个决策得到下一个状态,再从新状态开始,找到一个决策得到下一个状态,.。在这个过程中,出现过的状态将不可再用。若从某个状态开始,所有决策都得不到新状态,则返回上一状态,并从下

27、一个决策开始,试探是否能得到新的状态。直到到达状态(0,0),或无解。算法1. 给出允许状态集合;%用4阶方阵mark标记,其中mark(i,j)=0表示(i-1,j-1)为允许状态,mark(i,j)=2表示(i-1,j-1)为不可达状态2. 给出允许决策集合;% D=0 1; 0 2; 1 0; 1 1; 2 03. 初始状态进栈;%包括:当前状态,出发标记(-1/1为从此岸/彼岸出发),选择第几个决策4. 初始状态标记;%mark(i,j)=-1/1表示从此岸/彼岸出发转移到状态(i-1,j-1)已走过,mark(i,j)=2表示上述两种情况都出现或不可达状态5. 循环直到栈空或到达状态

28、(0,0) 5.1 出栈,将出栈的状态作为当前状态,并选择下一个决策;%原决策失败,回溯 5.2 循环直到决策都用过或到达最终状态 5.2.1 由当前状态、出发标记和决策得到转移到的新状态; 5.2.2 若新状态是允许状态且没走过,则执行5.2.2.1;否则选择下一个决策 5.2.2.1 标记新状态的访问信息;%mark(i,j)=-1/1/2 5.2.2.2 当前状态重新进栈(改变了决策);%存储决策过程 5.2.2.4 将新状态作为当前状态,置出发标记,选择第1个决策;6. 若有解,则输出决策过程;否则输出“无解”;程序clear; clc;mark=2*ones(4);mark(1,:)

29、=0; mark(4,:)=0;%mark(i,j)=0为允许状态mark(2,2)=0; mark(3,3)=0;D=0 1; 0 2; 1 0; 1 1; 2 0;%允许决策集合sp=1; st(sp,:)=3,3,-1,0; %进栈,(3,3)为当前状态,-1表示小船停靠此岸,决策0(未做决策)mark(4,4)=2;%标记为不可达状态s0=3,3;while sp>0&& any(s0>0)%栈未空且s0中至少有一个元素>0s0=st(sp,1,2); ss=st(sp,3);%当前状态,ss=-1/1小船停靠此岸/彼岸d=st(sp,4);%之前用过

30、的决策,该决策失败sp=sp-1;%出栈 d=d+1;%试探下一个决策 while d<6 && any(s0>0)s1=s0+ss*D(d,:);%下一个状态,不包括小船停靠状态i=s1(1)+1;j=s1(2)+1;%状态转换为下标if all(s1>=0) && all(s1<=3) && (mark(i,j)=0 | mark(i,j)=-ss)if mark(i,j)=0%标记状态(i-1,j-1)的使用情况mark(i,j)=ss;elsemark(i,j)=2;endsp=sp+1;%进栈st(sp,:)=s

31、0,ss,d;%当前状态重新进栈,改变了决策s0=s1; ss=-ss; d=1;%下一个状态作当前状态,选择第1个决策else%决策d失败d=d+1;endendendif s0=0disp(1:sp+1',st(1:sp,1:2);s0);%有解elsedisp('无解'); end运行结果 1 3 3 2 3 1 3 3 2 4 3 0 5 3 1 6 1 1 7 2 2 8 0 2 9 0 3 10 0 1 11 0 2 12 0 0解3clear; clc;%求允许状态集合SS=;for x=0:3 for y=0:3 if (x=0&&(y&

32、gt;=0&&y<=3). |(x=3&&(y>=0&&y<=3). |(x=1&&y=1|x=2&&y=2) S=S,x;y; end endendSA=S;%从此岸(A)到彼岸(B)渡河前此岸的允许状态集合SB=S;%从彼岸(B)到此岸(A)渡河前此岸的允许状态集合%求允许决策集合DD=;for u=0:2 for v=0:2 if u+v=1|u+v=2 D=D,u;v; end endend k=1;%第1次渡河s=3;3;%第1次渡河前的状态Snum(1)=1;%第1次渡河前的状态总数S

33、A(:,end)=; SB=SA;%去掉状态(3,3)while Snum(k)>0 Snum(k+1)=0;%第k+1次渡河前的状态总数初始化 k1=size(s,2)-Snum(k)+1;k2=size(s,2); for i=k1:k2 xk=s(1,i); yk=s(2,i); for d=D xk1=xk+(-1)k*d(1); yk1=yk+(-1)k*d(2); if (-1)k=1 for j=1:size(SB,2) if xk1=SB(1,j)&&yk1=SB(2,j) s=s,SB(:,j); SB(:,j)=; Snum(k+1)=Snum(k+1

34、)+1; break; end end else for j=1:size(SA,2) if xk1=SA(1,j)&&yk1=SA(2,j) s=s,SA(:,j); SA(:,j)=; Snum(k+1)=Snum(k+1)+1; break; end end end end end k=k+1;endSnums(:,1:Snum(1)m=Snum(1);for k=1:11 disp(s(:,m+1:m+Snum(k+1); m=m+Snum(k+1);end解4i=1;S=;D=;S(:,i)=3;3;%开始S(:,1)=3,3'while S(1,i)=0|S

35、(2,i)=0%当s(:,i)=0,0'完成 D(:,i)=round(2*rand(2,1);%随机取0,1,2给决策D(:,i) d=D(:,i); if d(1)+d(2)=1&&d(1)+d(2)=2%成立则不是允许决策 continue;%重新选取决策 end S(:,i+1)=S(:,i)+(-1)i*D(:,i);%得到下一个状态S(:,i+1) s=S(:,i+1); if (s(1)=1&&s(2)=1)|(s(1)=2&&s(2)=2)|(s(1)>3|s(1)<0)|(s(2)>3|s(2)<

36、0)%成立则不是允许状态 continue;%重新选取决策 end i=i+1; if i=105%等于此循环次数判无解 disp('无解');return; endendfor i=1:size(S,2)%添加状态的第3行元素,-1为船在此岸,1时在彼岸 SS(:,i)=S(:,i);(-1)i;end%区分过程中的不同状态for i=1:size(SS,2)-1%去掉状态转移过程中多余的状态 a=0; for j=i+1:size(SS,2)%找出与第i状态相同的最后一个状态 if any(SS(:,i)-SS(:,j)=0 a=j; end end if i<a%删

37、除第i到a-1列,多余的状态转移 SS(:,i:a-1)=; endenddisp(1:size(SS,2);SS)%该程序运行效率含随机性,可能误判为无解!解5syms k;%定义一个关于k的,储存各个状态之间转化的符号矩阵as=3,2,1,0;ss=;%能够存在的状态集合for i=1:length(s)%计算ss for j=1:length(s) if i=length(s)|i=1|s(i)=s(j) sss=s(i),s(j); ss=ss;sss; end endendignore,p=sort(sum(ss,2),'descend');%按总数排序,便于计算状态

38、矩阵ss=ss(p,:);a=sym(zeros(length(ss),length(ss);for i=1:length(ss) for j=i+1:length(ss) m=abs(sum(ss(i,:)-sum(ss(j,:); if m=1|m=2%两个状态的总人数之差只能是1或者2 if ss(i,:)>=ss(j,:)%保证总人数多的状态每个分量都要大 a(i,j)=2+(-1)k; a(j,i)=(-1)k; end end endenda(1,2)=0;%当第一次由(3,3)变到(3,2)时,下一次必为(3,2) 变到(3,3),避免无用功k=1;dd=1;s0=ss(1

39、,:);%初始状态S=ss(1,:);%储存总的状态转移方案D=;%每一步的决策集合while any(s0)&k<=100 b=eval(a);%确定此时的a矩阵 for i=1:length(ss)%判断s0处于s中的第几行 if s0(1,:)=ss(i,:) break end end m=find(b(i,:)=1); %确定此时的方案集合 if k>1&length(m)>=2 m(find(m=dd(k-1)=;%避免走回头路 end ignore,p=sort(rand(1,length(m);%在剩下的状态中随机找一个可行状态 s0=ss(m

40、(p(1),:); k=k+1; dd=dd;m(p(1);S=S;s0;D=D;abs(S(k,:)-S(k-1,:);endSD40附1:实验提示第2.2题MATLAB函数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题MATLAB函数any的用法:对于向量v,any(v)当v中有元素非0时,返回true(值为1);否则返回false

41、(值为0)。(类似v的所有元素“或”)对于矩阵X,any(X)返回一个行向量,每一个元素值为any作用于X对应列的结果。any(X, 1)作用于列(同any(X)),any(X, 2)作用于行。第3题要给出安全过河的方案。第4题在设计允许状态集合和允许决策集合时,要把“人”考虑进去附2:第1章 建立数学模型数学模型出现在生产、工作和社会活动中:电气工程师必须建立所要控制的生产过程的数学模型,用这个模型对控制装置作出相应的设计和计算,才能实现有效的过程控制。气象工作者为了得到准确的天气预报,一刻也离不开根据气象站、气象卫星汇集的气压、雨量、风速等资料建立的数学模型。生理医学专家有了药物浓度注人体

42、内随时间和空间变化的数学模型,就可以分析药物的疗效,有效地指导临床用药。城市规划工作者需要建立一个包括人口、经济、交通、环境等大系统的数学模型,为领导层对城市发展规划的决策提供科学根据。厂长经理们要是能够根据产品的需求状况、生产条件和成本、贮存费用等信息,筹划出一个合理安排生产和销售的数学模型,一定可以获得更大的经济效益。对于科学技术人员和应用数学工作者来说,建立数学模型是沟通实际问题与数学工具之间联系的一座桥梁。1.1 从现实对象到数学模型原型和模型原型 指人们在现实世界里关心、研究或者从事生产、管理的实际对象。在科技领域通常使用系统、过程等词汇:如机械系统、电力系统、生态系统、生命系统、社

43、会经济系统;又如钢铁冶炼过程、导弹飞行过程、化学反应过程、污染扩散过程、生产销售过程、计划决策过程等。本书所述的现实对象、研究对象、实际问题等均指原型。模型 则指为了某个特定目的将原型的某一部分信息简缩、提炼而构造的原型替代物。模型的基本特征是由构造模型的目的决定的:模型不是原型原封不动的复制品,原型有各个方面和各种层次的特征,而模型只要求反映与某种目的有关的那些方面和层次。一个原型,为了不同的目的可以有许多不同的模型:放在展厅里的飞机模型应该在外形上逼真,但是不一定会飞。参加航模竞赛的模型飞机要具有良好的飞行性能,在外观上不必苛求。在飞机设计、试制过程中用到的数学模型和计算机模拟,只要求在数

44、量规律上真实反映飞机的飞行动态特性,毫不涉及飞机的实体。用模型替代原型的方式分类,模型可分为物质模型(形象模型):直观模型、物理模型等。理想模型(抽象模型):思维模型、符号模型、数学模型等。直观模型:那些供展览用的实物模型,以及玩具、照片等,通常把原型的尺寸按比例缩小或放大,主要追求外观上的逼真。物理模型:科技工作者为一定目的根据相似原理构造的模型,它不仅可以显示原型的外形或某些特征,而且可以用来进行模拟实验,间接地研究原型的某些规律。如波浪水箱中的舰艇模型用来模拟波浪冲击下舰艇的航行性能,风洞中的飞机模型用来试验飞机在气流中的空气动力学特性。有些现象直接用原型研究非常困难,更可借助于这类模型

45、,如地震模拟装置、核爆炸反应模拟设备等。思维模型:指通过人们对原型的反复认识,将获取的知识以经验形式直接贮存于人脑中,从而可以根据思维或直觉作出相应的决策。如汽车司机对方向盘的操纵、一些技艺性较强的工种(如钳工)的操作。通常说的某些领导者凭经验作决策也是如此。Ø 优缺点:思维模型便于接受,也可以在一定条件下获得满意的结果,但是它往往带有模糊性、片面性、主观性、偶然性等缺点,难以对它的假设条件进行检验,且不便于人们的相互沟通。符号模型:是在一些约定或假设下借助于专门的符号、线条等,按一定形式组合起来描述原型。如地图、电路图、化学结构式等。具有简明、方便、目的性强及非量化等特点。数学模型

46、:是由数字、字母或其它数学符号组成的,描述现实对象数量规律的数学公式、图形或算法。什么是数学模型?航行问题:甲乙两地相距750km,船从甲到乙顺水航行需30h,从乙到甲逆水航行需50h,问船速、水速各若干?用x,y分别代表船速和水速,可以列出方程( x + y ) · 30 = 750,( x y ) · 50 = 750这组方程就是航行问题的数学模型。方程的解x = 20 km/h,y = 5 kn/h,最终给出了航行问题的答案。建立数学模型的基本内容:根据建立数学模型的目的和问题的背景作出必要的简化假设(航行中设船速和水速为常数);用字母表示待求的未知量(x,y代表船速

47、和水速);利用相应的物理或其它规律(匀速运动的距离等于速度乘以时间),列出数学式子(二元一次方程);求出数学上的解答(x = 20,y = 5);用这个答案解释原问题(船速和水递分别为20 km/h和5 km/h);最后用实际现象验证上述结果。数学模型可以描述为,对于现实世界的一个特定对象,为了一个特定目的,根据特有的内在规律,做出一些必要的简化假设,运用适当的数学工具,得到的一个数学结构。本书的重点不在于介绍现实对象的数学模型是什么样子,而是要讨论建立数学模型的全过程。建立数学模型简称数学建模或建模。数学模拟:运用数字式计算机的计算机模拟。它根据实际系统或过程的特性,按照一定的数学规律用计算

48、机程序语言模拟实际运行状况,并依据大量模拟结果对系统或过程进行定量分析。例如,通过各种工件在不同机器上按一定工艺顺序加工的模拟,能够识别生产过程中的瓶颈环节;通过高速公路上交通流的模拟,可以分析车辆在路段上的分布特别是堵塞的状况。与用物理模型的模拟实验相比,计算机模拟有明显的优点:成本低、时间短、重复性高、灵活性强。数学建模与计算机模拟有人把计算机模拟作为建立数学模型的手段之一。但是数学模型在某种意义下描述了对象内在特性的数量关系,其结果容易推广,特别是得到了解析形式答案时,更易推广。而计算机模拟则完全模仿对象的实际演变过程,难以从得到的数字结果分析对象的内在规律。当然,对于那些因内部机理过于

49、复杂、目前尚难以建立数学模型的实际对象,用计算机模拟获得一些定量结果,可称是解决问题的有效手段。1.2 数学建模的重要意义P4数学,作为一门研究现实世界数量关系和空间形式的科学,在它产生和发展的历史长河中,一直是和人们生活的实际需要密切相关的。作为用数学方法解决实际问题的第一步,数学建模自然有着与数学同样悠久的历史。两千多年以前创立的欧几里德几何,17世纪发现的牛顿万有引力定律,都是科学发展史上数学建模的成功范例。进入20世纪以来,随着数学以空前的广度和深度向一切领域的渗透,和电子计算机的出现与飞速发展,数学建模越来越受到人们的重视。1) 在一般工程技术领域,数学建模仍然大有用武之地。在以声、

50、光、热、力、电这些物理学科为基础的诸如机械、电机、土木、水利等工程技术领域中,数学建模的普遍性和重要性不言而喻。虽然这里的基本模型是已有的,但是由于新技术、新工艺的不断涌现,提出了许多需要用数学方法解决的新问题;高速、大型计算机的飞速发展,使得过去即便有了数学模型也无法求解的课题(如大型水坝的应力计算、中长期天气预报等)迎刃而解;建立在数学模型和计算机模拟基础上的CAD技术,以其快速、经济、方便等优势,大量地替代了传统工程设计中的现场实验、物理模拟等手段。2) 在高新技术领域,数学建模几乎是必不可少的工具。无论是发展通讯、航天、微电子、自动化等高新技术本身,还是将高新技术用于传统工业去创造新工艺、开发新产品,计算机技术支持下的建模和模拟都是经常使用的有效手段。数学建模、数值计算和计算机图形学等相结合形成的计算机软件,已经被固化于产品中,在许多高新技术领域起着核心作用,被认为是高新技术的特征之一。在这个意义上,数学不再仅仅作为一门科学,是许多技术的基础,而且直接定向了技术的前台。高技术本质上是一种数学技术。3) 数学迅速进入一些新领域,为数学建模开拓了许多新的处女她。随着数学向诸如经济、人口、生态、地质等所谓非物理领域的渗透,一些交叉学科如计量经济学、人口控制论、数学生态学、数学地质学等应运而生

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论