function output=fpowell(f,t,N,A,e)
if nargin<5,error=10^(-3);else error=e;end
if nargin<4,x0=zeros(N,1);else x0=A;end
syms a;
D=eye(N);
k=1;
while k>0
MaxLength=0;x00=x0;m=0;
if k==1,s=D;end
for i=1:N
x=x0+a*s(:,i);
for j=1:N , t(j)=x(j);end
ff=subs(f);
t=Divide(ff,a);
aa=OneDemensionslSearch(ff,a,t);
xx=x0+aa*s(:,i);
for j=1:N ,
t(j)=x0(j);end
fx0=subs(f);
for j=1:N ,
t(j)=xx(j);end
fxx=subs(f,{x1,x2,x3},{xx(1),xx(2),xx(3)});
length=fx0-fxx;
if length>MaxLength,MaxLength=length;m=m+1;end
x0=xx;
end
ss=x0-x00;
ReflectX=2*x0-x00;
for j=1:N ,
t(j)=x00(j);end
f1=subs(f);
for j=1:N ,
t(j)=x0(j);end
f2=subs(f);
for j=1:N ,
t(j)=ReflectX(j);end
f3=subs(f);
iff3<f1&&(f1+f3-2*f2)*(f1-f2-MaxLength)^2<0.5*MaxLength*(f1-f3)^2
x=x0+a*ss;
for j=1:N , t(j)=x(j);end
ff=subs(f);
t=Divide(ff,a);
aa=OneDemensionslSearch(ff,a,t);
x0=x0+aa*ss;
for j=m:(N-1),s(:,j)=s(:,j+1);end
s(:,N)=ss;
else
if f2>f3,
x0=ReflectX;end
end
if norm(x00-x0)<error,break;end
k=k+1;
k
x0'
end
opx=x0;
val=subs(f,{x1,x2,x3},{opx(1),opx(2),opx(3)});
output(1)=opx;output(2)=val;
opx'
val
k
加载中,请稍候......