MATLB数学实验胡良剑第十十一十二章部分答案.docx

上传人:b****2 文档编号:484633 上传时间:2023-04-29 格式:DOCX 页数:17 大小:46.72KB
下载 相关 举报
MATLB数学实验胡良剑第十十一十二章部分答案.docx_第1页
第1页 / 共17页
MATLB数学实验胡良剑第十十一十二章部分答案.docx_第2页
第2页 / 共17页
MATLB数学实验胡良剑第十十一十二章部分答案.docx_第3页
第3页 / 共17页
MATLB数学实验胡良剑第十十一十二章部分答案.docx_第4页
第4页 / 共17页
MATLB数学实验胡良剑第十十一十二章部分答案.docx_第5页
第5页 / 共17页
MATLB数学实验胡良剑第十十一十二章部分答案.docx_第6页
第6页 / 共17页
MATLB数学实验胡良剑第十十一十二章部分答案.docx_第7页
第7页 / 共17页
MATLB数学实验胡良剑第十十一十二章部分答案.docx_第8页
第8页 / 共17页
MATLB数学实验胡良剑第十十一十二章部分答案.docx_第9页
第9页 / 共17页
MATLB数学实验胡良剑第十十一十二章部分答案.docx_第10页
第10页 / 共17页
MATLB数学实验胡良剑第十十一十二章部分答案.docx_第11页
第11页 / 共17页
MATLB数学实验胡良剑第十十一十二章部分答案.docx_第12页
第12页 / 共17页
MATLB数学实验胡良剑第十十一十二章部分答案.docx_第13页
第13页 / 共17页
MATLB数学实验胡良剑第十十一十二章部分答案.docx_第14页
第14页 / 共17页
MATLB数学实验胡良剑第十十一十二章部分答案.docx_第15页
第15页 / 共17页
MATLB数学实验胡良剑第十十一十二章部分答案.docx_第16页
第16页 / 共17页
MATLB数学实验胡良剑第十十一十二章部分答案.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

MATLB数学实验胡良剑第十十一十二章部分答案.docx

《MATLB数学实验胡良剑第十十一十二章部分答案.docx》由会员分享,可在线阅读,更多相关《MATLB数学实验胡良剑第十十一十二章部分答案.docx(17页珍藏版)》请在冰点文库上搜索。

MATLB数学实验胡良剑第十十一十二章部分答案.docx

MATLB数学实验胡良剑第十十一十二章部分答案

第十章

第一题

f=[-3;4;-2;5];A=[1,1,3,-1;2,-3,1,-2];

b=[14;-2];Aeq=[4,-1,2,-1];beq=-2;

i=1:

3;lb(i)=zeros(3,1);

lb(4)=-inf;

[x,feval]=linprog(f,A,b,Aeq,beq,lb)

Optimizationterminated.

x=

0.0000

8.0000

0.0000

-6.0000

feval=

2.0000

第二题

f=[5;4;8];A=[2,-1,0;5,3,0];

b=[4;15];Aeq=[1,2,1];beq=6;lb=[0,0,0];

[x,feval]=linprog(f,A,b,Aeq,beq,lb)

Optimizationterminated.

x=

0.0000

3.0000

0.0000

feval=

12.0000

第五题

clear

f=-[7,12];A=[9,5;4,5;3,10];b=[360;200;300];

lb=[0;0];[x,feval]=linprog(f,A,b,[],[],lb)

Optimizationterminated.

x=

20.0000

24.0000

feval=

-428.0000

在对求出的最小值取反既可以得出最大值为428

第六题

%%变量x1,x2,x3,x4,x5,x6;分别代表x11,x12,x13,x21,x22,x23

%%xij表示是煤场i对于居民地j的出生煤量。

f=[10,5,6,4,8,12];lb=zeros(6,1);

Aeq=[1,1,1,0,0,0;0,0,0,1,1,1;1,0,0,1,0,0;0,1,0,0,1,0;0,0,1,0,0,1;];

beq=[60;100;50;70;40];[x,fval]=linprog(f,[],[],Aeq,beq,lb)

Optimizationterminated.

x=

0.0000

20.0000

40.0000

50.0000

50.0000

0.0000

fval=

940.0000

第十一题

编写函数

functionf=ex11fun(x);

f=x

(1)+x

(2);

%编写约束函数M函数

function[c,ceq]=confun(x)

%非线性不等式约束

c=[1.805-(4+(x

(2)-7)/x

(1))*(1-(4-x

(2))/x

(1));0.9025-(4-(7-x

(2)))/(3*x

(1));0.9025-(1-(4-x

(2)))/(2*x

(1)/3)];

%非线性等式的约束

ceq=[];

最后在窗口运行:

[x,feval]=fmincon(@newch11_fun,[1,1],[],[],[],[],[0,0],[],@newch11_confun)

Warning:

Large-scale(trustregion)methoddoesnotcurrentlysolvethistypeofproblem,

switchingtomedium-scale(linesearch).

>Infminconat260

Optimizationterminated:

first-orderoptimalitymeasureless

thanoptions.TolFunandmaximumconstraintviolationisless

thanoptions.TolCon.

Activeinequalities(towithinoptions.TolCon=1e-006):

lowerupperineqlinineqnonlin

1

2

x=

0.67814.8359

feval=

5.5140

第十二题

首先

%编写目标函数M函数

functionf=ch12_fun(x)

%目标函数

f=-x

(1)*x

(2)*x(3)

其次

%编写约束函数M函数

function[c,ceq]=ch12_confun(x)

%非线性不等式约束

c=[];

%非线性等式的约束

ceq=[];

最后窗口运行

A=[1,-2,-2;1,2,2];b=[0;72];Aeq=[1,-1,0];beq=10;

[x,fval]=fmincon(@ch12_fun,[25,15,8],A,b,Aeq,beq,[0,10,0],[Inf,20,Inf],@ch12_confun)

第十一章

第一题:

先编写Matlab程序枚举法IntLp.m:

function[x,y]=IntLp(f,G,h,Geq,heq,lb,ub,x,id,options)

%整数线性规划分支定界法,可求解全整数线性或混合整数线性规划

%y=minf'*xsubjectto:

G*x<=hGeq*x=heqx为全整数

%数或混合整数列向量

%用法

%[x,y]=IntLp(f,G,h)

%[x,y]=IntLp(f,G,h,Geq,heq)

%[x,y]=IntLp(f,G,h,Geq,heq,lb,ub)

%[x,y]=IntLp(f,G,h,Geq,heq,lb,ub,x)

%[x,y]=IntLp(f,G,h,Geq,heq,lb,ub,x,id)

%[x,y]=IntLp(f,G,h,Geq,heq,lb,ub,x,id,options)

%参数说明

%x:

最优解列向量;y:

目标函数最小值;f:

目标函数系数列向量

%G:

约束不等式条件系数矩阵;h:

约束不等式条件右端列向量

%Gep:

约束等式条件系数矩阵;heq:

约束等式条件右端列向量

%lb:

解的下界列向量(Default:

-inf)

%ub:

解得上界列向量(Default:

inf)

%x:

迭代初值列向量;

%id:

整数变量指标列向量,1—整数,0—实数(default:

1)

%options的设置请参见optimset或linprog

%例minz=x1+4x2

%s.t.2x1+x2<=8

%x1+2x2>=6

%x1,x2>=0且为整数

%先将x1+x2>=6化为-x1-2x2<=-6

%[x,y]=IntLp([1;4],[21;-1-2],[8;-6],[],[],[0;0])

globalupperoptcx0AbAeqbeqIDoptions;

ifnargin<10,options=optimset({});options.Display='off';

options.LargeScale='off';end

ifnargin<9,id=ones(size(f));end

ifnargin<8,x=[];end

ifnargin<7|isempty(ub),ub=inf*ones(size(f));end

ifnargin<6|isempty(lb),lb=zeros(size(f));end

ifnargin<5,heq=[];end

ifnargin<4,Geq=[];end

upper=inf;c=f;x0=x;A=G;b=h;Aeq=Geq;beq=heq;ID=id;

ftemp=IntLp(lb(:

),ub(:

));

x=opt;y=upper;

%以下为子函数

functionftemp=IntLp(vlb,vub)

globalupperoptcx0AbAeqbeqIDoptions;

[x,ftemp,how]=linprog(c,A,b,Aeq,beq,vlb,vub,x0,options);

ifhow<=0

return;

end;

ifftemp-upper>0.00005%inordertoavoiderror

return;

end;

ifmax(abs(x.*ID-round(x.*ID)))<0.00005

ifupper-ftemp>0.00005%inordertoavoiderror

opt=x';upper=ftemp;

return;

else

opt=[opt;x'];

return;

end;

end;

notintx=find(abs(x-round(x))>0.00005);

%inordertoavoiderror

intx=fix(x);tempvlb=vlb;tempvub=vub;

ifvub(notintx(1,1),1)>=intx(notintx(1,1),1)+1

tempvlb(notintx(1,1),1)=intx(notintx(1,1),1)+1;

ftemp=IntLp(tempvlb,vub);

end;

ifvlb(notintx(1,1),1)<=intx(notintx(1,1),1)

tempvub(notintx(1,1),1)=intx(notintx(1,1),1);

ftemp=IntLp(vlb,tempvub);

end;

第六题:

先编写Matlab程序枚举法BintLp_E.m:

function[x,f]=BintLp_E(c,A,b,N)

%[x,f]=BintLp_E(c,A,b,N)用枚举法求解下列

%0-1线性规划问题

%minf=c'*x,s.t.A*x=b,x的分量全为整数0或1,

%其中N表示约束条件Ax≤b中的前N个是等式,N=0时可以省略。

%程序中用到命令B=de2bi(D),其作用是将10进制数向量D转换

%为相应二进制数按位构成的以0,1为元素的矩阵B。

%此命令在toolboxcommunication中。

%返回结果x是最优解,f是最优解处的函数值。

ifnargin<4,N=0;end

c=c(:

);b=b(:

);

[m,n]=size(A);x=[];f=abs(c')*ones(n,1);i=1;

whilei<=2^n

B=de2bi(i-1,n)';

t=A*B-b;t11=find(t(1:

N,:

)~=0);

t12=find(t(N+1:

m,:

)>0);t1=[t11;t12];

ifisempty(t1)

f=min([f,c'*B]);

ifc'*B==f,x=B;end

end

i=i+1;

end

f

>>c=[4,3,2];

a=[2,-5,3;-4,-1,-3;0,-1,-1];b=[4,-3,-1];x0=BintLp_E(c,a,b)

f=

2

 

x0=

0

0

1

>>

第七题:

调用枚举法程序BintLp_E.m

>>c=[2,5,3,4];

a=[4,-1,-1,-1;2,-4,-2,-4;-1,-1,1,-1];b=[0,-4,-1];

x0=BintLp_E(c,a,b)

f=

4

x0=

0

0

0

1

>>

第十二章

第一题

先编写程序Dijkstra算法

minRoute(i,m,W,opt)

function[S,D]=minroute(i,m,W,opt)

ifnargin<4

opt=0;

end

dd=[];tt=[];

ss=[];ss(1,1)=i;

V=1:

m;V(i)=[];

dd=[0;i];

kk=2;

[mdd,ndd]=size(dd);

while~isempty(V)

[tmpd,j]=min(W(i,V));

tmpj=V(j);

fork=2:

ndd

[tmp1,jj]=min(dd(1,k)+W(dd(2,k),V));

tmp2=V(jj);

tt(k-1,:

)=[tmp1,tmp2,jj];

end

tmp=[tmpd,tmpj,j;tt];

[tmp3,tmp4]=min(tmp(:

1));

iftmp3==tmpd

ss(1:

2,kk)=[i;tmp(tmp4,2)];

else

tmp5=find(ss(:

tmp4)~=0);

tmp6=length(tmp5);

ifdd(2,tmp4)==ss(tmp6,tmp4)

ss(1:

tmp6+1,kk)=[ss(tmp5,tmp4);tmp(tmp4,2)];

else

ss(1:

3,kk)=[i;dd(2,tmp4);tmp(tmp4,2)];

end

end

dd=[dd,[tmp3;tmp(tmp4,2)]];

V(tmp(tmp4,3))=[];

[mdd,ndd]=size(dd);

kk=kk+1;

end

ifopt==1

[tmp,t]=sort(dd(2,:

));

S=ss(:

t);

D=dd(1,t);

else

S=ss;

D=dd(1,:

);

end

>>clearall

w=inf*ones(8);

w(1,[3,5,6])=[10,30,100];

w(2,[3])=[5];

w(3,[4])=[50];

w(4,[6])=[10];

w(5,[4,6])=[20,60];

[s,d]=minroute(1,6,w,1)

s=

111111

023555

000404

000006

 

d=

0Inf10503060

>>

最短距离分别为:

10;30;50;60

第三题:

>>clearall

w=inf*ones(11);

w(1,[2,3])=[2,8];

w(2,[3,5])=[6,1];

w(3,[4])=[7];

w(4,[1,7])=[1,9];

w(5,[3,9])=[5,1];

w(6,[3,5,7,9])=[1,3,4,6];

w(7,[3,10])=[2,1];

w(8,[5,11])=[2,9];w(9,[8])=[7];

w(10,[9])=[1];

w(11,[9,10])=[2,6];[s,d]=minroute(1,11,w,1)

s=

11111111111

02332632232

00045045545

00000079979

000000080108

000000000011

 

d=

028153Inf241142520

>>

最短距离分别为:

0,2,3,4,8,11,15,20,24,25,Inf

第四题

最短距离:

>>clearall

w=inf*ones(6);

w(1,[2,3])=[1,3];

w(2,[3,4,5])=[2,1,3];

w(3,[5,6])=[1,4];

w(4,[5,6])=[6,7];

w(5,[6])=[5];

[s,d]=minroute(1,6,w,1)

s=

111111

023223

000456

 

d=

013247

>>

最短时间

>>clearall

w=inf*ones(6);

w(1,[2,3])=[3,4];

w(2,[3,4,5])=[7,5,20];

w(3,[5,6])=[2,10];

w(4,[5,6])=[8,12];

w(5,[6])=[15];

[s,d]=minroute(1,6,w,1)

s=

111111

023233

000456

 

d=

0348614

>>

两条路线均为a-c-f距离为7个单位,所需的时间为14个单位;

第五题:

先编写MATLAB程序:

Minterrk.m

function[Wt,Pp]=mintreek(n,W)

%图论中最小生成树Kruskal算法及画图程序M-函数

%格式[Wt,Pp]=mintreek(n,W):

n为图顶点数,W为图的带权邻接矩

%阵,不构成边的两顶点之间的权用inf表示。

显示最小生成树的边及

%顶点,Wt为最小生成树的权,Pp(:

1:

2)为最小生成树边的两顶点,

%Pp(:

3)为最小生成树的边权,Pp(:

4)为最小生成树边的序号;

%附图,红色连线为最小生成树的图;

%例如

%n=6;w=inf*ones(6);

%w(1,[2,3,4])=[6,1,5];w(2,[3,5])=[5,3];

%w(3,[4,5,6])=[5,6,4];w(4,6)=2;w(5,6)=6;

%[a,b]=mintreek(n,w)

%ByX.D.DingJune2000

tmpa=find(W~=inf);[tmpb,tmpc]=find(W~=inf);

w=W(tmpa);e=[tmpb,tmpc];%w是W中非inf元素按列构成的向量

%e的每一行元素表示一条边的两个顶点的序号

[wa,wb]=sort(w);E=[e(wb,:

),wa,wb];[nE,mE]=size(E);

temp=find(E(:

1)-E(:

2));E=E(temp,:

);

P=E(1,:

);k=length(E(:

1));

while(rank(E)>0)

temp1=max(E(1,2),E(1,1));temp2=min(E(1,2),E(1,1));

fori=1:

k;

if(E(i,1)==temp1),E(i,1)=temp2;end;

if(E(i,2)==temp1),E(i,2)=temp2;end;

end;

a=find(E(:

1)-E(:

2));E=E(a,:

);

if(rank(E)>0),P=[P;E(1,:

)];k=length(E(:

1));end;

end;

Wt=sum(P(:

3));Pp=[e(P(:

4),:

),P(:

3:

4)];

fori=1:

length(P(:

3));%显示顶点vi与边ej

disp(['','e',num2str(P(i,4)),'','(v',...

num2str(P(i,1)),'','v',num2str(P(i,2)),')']);

end;

%以下是画图程序

axisequal;holdon

[x,y]=cylinder(1,n);xm=min(x(1,:

));ym=min(y(1,:

));

xx=max(x(1,:

));yy=max(y(1,:

));

axis([xm-abs(xm)*0.15,xx+abs(xx)*0.15,ym-abs(ym)*0.15,yy+abs(yy)*0.15]);plot(x(1,:

),y(1,:

),'ko')

fori=1:

n;temp=['v',int2str(i)];

text(x(1,i),y(1,i),temp);end;

fori=1:

nE;plot(x(1,e(i,:

)),y(1,e(i,:

)),'b');end;

fori=1:

length(P(:

4));

plot(x(1,Pp(i,1:

2)),y(1,Pp(i,1:

2)),'r');end;

text(-0.35,-1.2,['最小生成树的权为','',num2str(Wt)]);

title('红色连线为最小生成树');axis('off');holdoff

>>clearall;n=8;

w=inf*ones(8);

w(1,[2,3,4,5,6,7,8])=[1.3,2.1,0.9,0.7,1.8,2.0,1.5];

w(2,[3,4,5,6,7,8])=[0.9,1.8,1.2,2.6,2.3,1.1];

w(3,[4,5,6,7,8])=[2.6,1.7,2.5,1.9,1.0];

w(4,[5,6,7,8])=[0.7,1.6,1.5,0.9];

w(5,[6,7,8])=[0.9,1.1,0.8];

w(6,[7,8])=[0.6,1.0];

w(7,[8])=[0.5];[a,b]=mintreek(n,w)

e28(v7v8)

e21(v6v7)

e7(v1v5)

e10(v4v1)

e26(v1v6)

e3(v2v3)

e24(v2v1)

a=

5.2000

 

b=

7.00008.00000.500028.0000

6.00007.00000.600021.0000

1.00005.00000.70007.0000

4.00005.00000.700010.0000

5.00008.00000.800026.0000

2.00003.00000.90003.0000

3.00008.00001.000024.0000

>>

如图红线铺设输油管长度最短则得出最短长度为5+5.2=10.2KM

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

当前位置:首页 > 小学教育 > 其它课程

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

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