第二题 matlab 编程(任选一个)
1) 翻牌游戏把13张牌反过来(背面朝上)按一定的顺序排列,先把你已经排
好的牌第一张取出放在这叠牌的最底层,拿出第二张放在桌面上,然后将第三张取
出又放在最底层,取出第四张放在桌子上……直到游戏结束,你依次取出放在桌子
上的牌刚好为K,Q,J,10,9,8,7,6,5,4,3,2,A。问你一开始时这13张牌
的顺序是怎样的?请你编程解决这个问题。
解:程序如下:
function f=card()
a=1:13;
i=1;
for j=1:13
end
f=d;
a=card()
n=numel(a); %目前的片数;numle为元数的个数。
a(n+1)=a(1); %在多少张里面取第一张。
a(1)=[];%将上面取出的第一张牌所在空格剪掉。
b(i)=a(1); %翻出来时桌面上亮出来的牌。
i=i+1;
a(1)=[];%随着i自增,取出现的空格为空。(即删除)。
end
c={'K','Q','J','10','9','8','7','6','5','4','3','2','A'};
%因为10占两位,故用单元d=cell(1,13);
%由BC对应的数,
%将C中字符型的牌放入由B决定对应的D中。
for k=1:13
r=b(k);
d{r}=c{k};
运行结果为:
a =
'A'
'7'
'8'
'K'
'4'
'2'
'Q'
'6'
'J'
'3'
'10'
'5'
'9'
2) 学校要举行篮球循环赛,共有十个队参加比赛,请你安排一下比赛场次,
使每队每次打完比赛后至少能隔一场不比赛,以便得到休息保持体力,请你用
MATLAB解决这个问题,并给出至少一个比赛日程表。(每队休息的场次越多越好,
但每队都应得到的休息大体相同,不能出现某队刚打完比赛,马上和另一个已经休
息了若干场的球队比赛,这是不公平的)。
3)利用最速下降法求如下函数的极值
,
)
x
(
f x
(
x
其中,初始点为
x
0
1
2
1,1 T
2
1
x
2
2
7 )
(
x
1
x
2
2
2
11)
解:
首先:得明确最速下降法的算法与思想。
最速下降法也叫梯度法,它是以梯度的负方向作为搜索方向。
即:
d
)
(
f x
k
k
设 ( )
f x 在 kx 附近连续可微, kd 为搜索方向向量,
kg
。由泰勒展开式
( )
f x
得:
(
f x
k
d
k
)
(
f x
k
)
T
g d
k
k
o
(
),
0
那么目标函数 ( )
f x 在 kx 处沿方向 kd 下降的变化率为
)
(
f x
(
f x
k
k
0
lim
lim
0
T
g d
k
k
)
d
k
o
k
d
k
T
g d
k
g
k
(
)
cos
k
,
其中 k 是 kg 与 kd 的夹角。显然,对于不同的方向 kd ,函数变化率取决于它与
kg 夹角的余弦值。要使变化率最小,只有 cos
kd 应取负梯度方向(即
(
f x
k
)。
d
k
)
k 即 k 时才能达到,亦即
1,
最速下降法的算法:
步骤 1:选取初始点 0
x
R 允许误差 0
,n
1. 令 k=0.
步骤 2:计算
g
k
(
f x
k
).
若 kg ,停止计算,输出 kx 作为近似最优解。
步骤 3:取方向 k
d
g 。
k
步骤 4:由线搜索技术确定步长因子 k 。
步骤 5:令 1
x
k
x
k
k
,
d k
k
转到步骤 1
k
1,
程序如下:
(1)先写一个主程序 m 文件 (名为 grad.m):
function [x,val,k]=grad(fun,gfun,x0)
% 最速下降法求解无约束问题:min f(x1,x2)
% 输入:x0是初始点,fun是目标函数,gfun是梯度
% 输出:x是近似最优点,val是最优值,k是迭代次数
maxk=2000; % 最大迭代次数
rho=0.5;
sigma=0.4;
k=0;
epsilon=1e-100;
while(k
(2)建立目标函数和求梯度的两个函数 (名字分别为 fun.m 和 gfun.m ):
% 目标函数 m 文件:
function f=fun(x);
f=(x(1)^2+x(2)-7)^2+(x(1)+x(2)^2-11)^2;
% 梯度函数 m 文件:
function g=gfun(x);
g=[2*(x(1)^2+x(2)-7)*2*x(1)+2*(x(1)+x(2)^2-11),...
2*(x(1)^2+x(2)-7)+2*(x(1)+x(2)^2-11)*2*x(2)]';
在MATLAB命令窗口输入:
x0=[1 1]';
[x,val,k]=grad('fun','gfun',x0);
-38
-46
7440890
106
516114
106
3.7656e+004
106
2.7018e+003
106
122.9419
106
8.2928
106
-3.7939
-27.5479
8.0287e+005
8.2928
g =
f =
f =
f =
f =
f =
f =
f =
f =
f =
f =
f =
f =
g =
f =
f =
f =
f =
f =
f =
6.6153e+004
8.2928
6.4017e+003
f =
f =
f =
f =
f =
f =
f =
f =
g =
8.2928
724.5325
8.2928
85.3361
8.2928
7.3880
8.2928
1.1179
8.2928
7.1755
-4.2271
1.7788e+003
1.1179
155.6531
1.1179
31.8208
1.1179
6.7267
1.1179
0.7722
1.1179
0.0087
1.1179
0.7795
0.4543
19.1951
0.0087
5.2534
0.0087
1.3044
f =
f =
f =
f =
f =
f =
f =
f =
f =
f =
f =
f =
g =
f =
f =
f =
f =
f =
0.0087
0.2929
0.0087
0.0558
0.0087
0.0080
0.0087
0.0022
0.0087
0.2135
-0.3139
3.2148
0.0022
0.7323
0.0022
0.1622
0.0022
0.0327
0.0022
0.0053
0.0022
f =
f =
f =
f =
f =
f =
f =
f =
f =
g =
f =
f =
f =
f =
f =
f =
f =
f =
f =
f =
f =
f =
f =
f =
g =
f =
f =
f =
7.1342e-004
0.0022
7.1178e-004
0.0022
0.1969
-0.0192
0.5068
7.1178e-004
0.1246
7.1178e-004
0.0277
7.1178e-004
0.0051
7.1178e-004
6.0803e-004
7.1178e-004
7.5948e-005
7.1178e-004
-0.0014
-0.0980
0.3595
7.5948e-005
0.0861
f =
f =
f =
f =
f =
f =
f =
f =
f =
g =
f =
f =
f =
f =
f =
f =
f =
f =
f =
f =
f =
f =
f =
f =
g =
f =
f =
7.5948e-005
0.0202
7.5948e-005
0.0045
7.5948e-005
8.7536e-004
7.5948e-005
1.2537e-004
7.5948e-005
1.3217e-005
7.5948e-005
0.0300
0.0157
0.0323
1.3217e-005
0.0078
1.3217e-005
0.0018
1.3217e-005
3.9724e-004
1.3217e-005
7.3572e-005
1.3217e-005
1.0453e-005
1.3217e-005
3.5963e-006
1.3217e-005
f =
f =
f =
f =
f =
f =
f =
f =
f =
f =
f =
f =
g =
f =
f =
f =
f =
f =
f =
f =
f =
f =
f =
f =
f =
f =
f =
g =
0.0091
-0.0118
0.0042
3.5963e-006
9.9898e-004
3.5963e-006
2.2438e-004
3.5963e-006
4.4841e-005
3.5963e-006
6.9411e-006
3.5963e-006
9.5052e-007
3.5963e-006
1.1940e-006
3.5963e-006
0.0080