logo资料库

最速下降法matlab.doc

第1页 / 共28页
第2页 / 共28页
第3页 / 共28页
第4页 / 共28页
第5页 / 共28页
第6页 / 共28页
第7页 / 共28页
第8页 / 共28页
资料共28页,剩余部分请下载后查看
第二题 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
分享到:
收藏