|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
按照书上介绍的复合形算法写的小程序,运行倒是通过了
可结果却不敢恭维, 不知错哪里了, 请大家帮忙看一下,
非常非常感谢!
自己觉得算法本身可能有问题
clear;format long;a=4;b=9;
V=zeros(4,2);r=rand(4,2);Y=zeros(4,1);
for i=1:4
V(i,:)=a+r(i,:).*(b-a);
end
for i=1:4
Z=V(i,:);Y(i)=feval(@f,Z);%f=x.^2-7*x+y.^2-4*y-x.*y
end
[m l]=min(Y);[m h]=max(Y);
cnt=0;
F=sum((Y-Y(l)).^2);e=0.0001;u=2.5;
while F<e
S=zeros(1,2);
for i=1:4
S=S+V(i,:);
end
M=(S-V(h,:))/3;yM=feval(@f,M);
R=2*M-V(h,:);
while (R(1)<4|R(1)>9)|(R(2)<4|R(2)>9)
R=(R+M)/2;
end
yR=feval(@f,R);
if yR<Y(l)
E=u*M-(1-u)*V(h,:);
while (E(1)<4|E(1)>9)|(E(2)<4|E(2)>9)
E=(E+M)/2;
end
yE=feval(@f,E);
if yE<yR
V(h,:)=E;Y(h)=yE;
else
V(h,:)=R;Y(h)=yR;
end
else
if yR>Y(l)&yR<Y(h)
V(h,:)=R;Y(h)=yR;
else
if yR>Y(h)
N=0.5*M-0.5*V(h,:);
else
N=1.5*M+0.5*V(h,:);
end
while (N(1)<4|N(1)>9)|(N(2)<4|N(2)>9)
N=(N+M)/2;
end
yN=feval(@f,N)
if yN<Y(h)
V(h,:)=N;Y(h)=yN;
else
for i=1:4
V(i,:)=(V(i,:)+V(l,:))/2;
Z=V(i,:);Y(i)=feval(@f,Z);
end
end
end
end
[m l]=min(Y);[m h]=max(Y);
F=sum((Y-Y(l)).^2);
cnt=cnt+1;
end
x=V(l,:)
虽然MATLAB自带了优化工具箱,但实际优化的目标函数不是显函数,
所以只能自己动手编, 郁闷啊现在
[ 本帖最后由 花如月 于 2007-9-23 20:44 编辑 ] |
|