
外点法
clc
m=zeros(1,50);
a=zeros(1,50);
b=zeros(1,50);%最优点坐标
f0=zeros(1,50);%最优点函数值
syms d x1 x2 e;
m(1)=1;c=10;a(1)=0;b(1)=0;
f=x1^2+x2^2+e*(1-x1)^2;
f0(1)=1;
fx1=diff(f,'x1');fx2=diff(f,'x2');
for k=1:100
x1=a(k);
x2=b(k);e=m(k);
for n=1:100%梯度法最优值收敛条件求点
f1=subs(fx1);
f2=subs(fx2);
if(double(sqrt(f1^2+f2^2))<=0.002)
a(k+1)=double(x1);
b(k+1)=double(x2);
f0(k+1)=double(subs(f));
break;
else
D=(x1-d*f1)^2+(x2-d*f2)^2+e*(1-(x1-d*f1))^2;
Dd=diff(D,'d');dd=solve(Dd);x1=x1-dd*f1;x2=x2-dd*f2;
end
end
if (double(sqrt((a(k+1)-a(k))^2+(b(k+1)-b(k))^2))<=0.001)&&(double(abs((f0(k+1)-f0(k))/f0(k)))<=0.001)
a(k+1)
b(k+1)
k
f0(k+1)
break;
else
m(k+1)=c*m(k);
end
end
f0(1:k)
t=1:1:50;
plot(t,f0);
ylim([0 1]);
xlabel('k值');
ylabel('f值')
ans =
0.9999
ans =
0
k =
5
ans =
0.9999
ans =
1.0000 0.5000 0.9091 0.9901 0.9990
外点法
clc
m=zeros(1,50);
a=zeros(1,50);
b=zeros(1,5