数学建模作业10
作者:王思婕 发布时间:2020-05-14 10:49:14 浏览次数:1551、a=[0,5,3,inf,inf,inf,inf,inf,inf,inf,inf,inf,inf,inf,inf,inf;
inf,0,inf,1,3,6,inf,inf,inf,inf,inf,inf,inf,inf,inf,inf;
inf,inf,0,inf,8,7,6,inf,inf,inf,inf,inf,inf,inf,inf,inf;
inf,inf,inf,0,inf,inf,inf,6,8,inf,inf,inf,inf,inf,inf,inf;
inf,inf,inf,inf,0,inf,inf,3,5,inf,inf,inf,inf,inf,inf,inf;
inf,inf,inf,inf,inf,0,inf,inf,3,3,inf,inf,inf,inf,inf,inf;
inf,inf,inf,inf,inf,inf,0,inf,8,4,inf,inf,inf,inf,inf,inf;
inf,inf,inf,inf,inf,inf,inf,0,inf,inf,2,2,inf,inf,inf,inf;
inf,inf,inf,inf,inf,inf,inf,inf,0,inf,inf,1,2,inf,inf,inf;
inf,inf,inf,inf,inf,inf,inf,inf,inf,0,inf,3,3,inf,inf,inf;
inf,inf,inf,inf,inf,inf,inf,inf,inf,inf,0,inf,inf,3,5,inf;
inf,inf,inf,inf,inf,inf,inf,inf,inf,inf,inf,0,inf,5,2,inf;
inf,inf,inf,inf,inf,inf,inf,inf,inf,inf,inf,inf,0,6,6,inf;
inf,inf,inf,inf,inf,inf,inf,inf,inf,inf,inf,inf,inf,0,inf,4;
inf,inf,inf,inf,inf,inf,inf,inf,inf,inf,inf,inf,inf,inf,0,3;
inf,inf,inf,inf,inf,inf,inf,inf,inf,inf,inf,inf,inf,inf,inf,0]
[D,path]=floyd1(a)
function [D,path]=floyd1(a)
n=size(a,1);
D=a;
path=zeros(n,n);
for i=1:n
for j=1:n
if D(i,j)~=inf
path(i,j)=j
end
end
end
for k=1:n
for i=1:n
for j=1:n
if D(i,k)+D(k,j)<D(i,j)
D(i,j)=D(i,k)+D(k,j)
path(i,j)=path(i,k)
end
end
end
end
end
path =
1 2 3 2 2 3 3 2 2 3 2 2 2 2 2 2
0 2 0 4 5 6 0 5 5 6 5 5 5 5 5 5
0 0 3 0 5 6 7 5 6 6 5 6 6 5 6 6
0 0 0 4 0 0 0 8 9 0 8 8 9 8 8 8
0 0 0 0 5 0 0 8 9 0 8 8 9 8 8 8
0 0 0 0 0 6 0 0 9 10 0 9 9 9 9 9
0 0 0 0 0 0 7 0 9 10 0 10 10 10 10 10
0 0 0 0 0 0 0 8 0 0 11 12 0 11 12 12
0 0 0 0 0 0 0 0 9 0 0 12 13 12 12 12
0 0 0 0 0 0 0 0 0 10 0 12 13 12 12 12
0 0 0 0 0 0 0 0 0 0 11 0 0 14 15 14
0 0 0 0 0 0 0 0 0 0 0 12 0 14 15 15
0 0 0 0 0 0 0 0 0 0 0 0 13 14 15 15
0 0 0 0 0 0 0 0 0 0 0 0 0 14 0 16
0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 16
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16
2、
function u=DecisF1(k,x)%决策函数
d=[2 3 2 4];m=6;
if k==4
u=d(k)-x;
else
u=max(0,d(k)-x):m;
end
function s=TransF1(k,x,u)%状态转移方程
d=[2 3 2 4];
s=x+u-d(k);
function f=SubObjF1(k,x,u)%阶段k的指标函数
d=[2 3 2 4];
if u==0
f=0.5*(x+u-d(k));
else if u>6
f=10^6;
else
f=3+u+0.5*(x+u-d(k));
end
end
clear;clc;
x1=0:4;
s=nan*ones(5,1);
s(1)=0;
x=[s x1' x1' x1'];
[p,f]=dynprog(x,'DecisF1','SubObjF1','TransF1')
p =
1.0000 0 5.0000 9.5000
2.0000 3.0000 0 0
3.0000 0 6.0000 11.0000
4.0000 4.0000 0 0
f =
20.5000
3、
function u=DecisF1(k,x)%决策函数
A=[600 700 500 1200];
if k==4
u=A(k)-x;
else
u=A(k)-x:10^6;
end
function f=SubObjF1(k,x,u)%阶段k的指标函数
A=[600 700 500 1200];
if u==0
f=x+u-A(k);
else
f=(x+u-A(k))+0.005*(u^2);
end
function s=TransF1(k,x,u)%状态转移方程
A=[600 700 500 1200];
s=x+u-A(k);
end
clear;clc;
x1=0:4;
s=nan*ones(5,1);
s(1)=0;
x=[s x1' x1' x1'];
[p,f]=dynprog(x,'DecisF1','SubObjF1','TransF1')
p =
1.0e+03 *
0.0010 0 0.6000 1.8000
0.0020 0 0.7000 2.4500
0.0030 0 0.5040 1.2741
0.0040 0.0040 1.1960 7.1521
f =
1.2676e+04
>>
4、
function y=ObjF1(v,f)%基本方程中函数
y=v+f;
y=-y;
function u=DecisF1(k,x)%决策函数
u=0:x;
end
function f=SubObjF1(k,x,u)%阶段k的指标函数
f=8*u+5*(x-u);
f=-f;
end
function s=TransF1(k,x,u)%状态转移方程
s=0.7*u+0.9*(x-u);
s=-s;
End
clear;clc;
x1=0:5;
s=nan*ones(6,1);
s(1)=1000;
x=[s x1' x1' x1' x1' x1'];
[p,f]=dynprog(x,'DecisF1','SubObjF1','TransF1','ObjF1')
5、
function u=DecisF1(k,x)%决策函数
if k~=1
u=1:k-1;
else
u=0;
end
function f=SubObjF1(k,x,u)%阶段k的指标函数
r=[5 4.5 4 3.75 3 2.5];
U=[0.5 1 1.5 2 2.5 3];
c=[0.5 1 1.5 2 2.5 3];
f=max(r(k)-U(k),r(1)-U(1)-c(k));
end
function s=TransF1(k,x,u)%状态转移方程
s=u;
End
clear;clc;
x1=0:5;
s=nan*ones(6,1);
s(1)=0;
x=[s x1' x1' x1' x1'];
[p,f]=dynprog(x,'DecisF1','SubObjF1','TransF1')
p =
1.0000 0 0 4.5000
2.0000 0 1.0000 3.5000
3.0000 1.0000 2.0000 3.0000
4.0000 2.0000 3.0000 2.5000
5.0000 3.0000 4.0000 2.0000
f =
15.5000