Sunteți pe pagina 1din 1

function [x_opt,nr_it]=opt_rlx(fct_scop,x0,pas_init,r,tol)

%optimizare parametrica prin METODA RELAX?RII


%fct_scop - sirul de caractere ce desemneaza functia de optimizat
%x0
- punctul de start (vector de dimensiunea variabilei functiei de optim
izat, n)
%pas_init - pasul initial de cautare
%r
- ratia subunitara de modificare a pasului dupa fiecare ciclu de relax
are a tuturor
%
celor n coordonate
%tol
- valoarea de prag a pasului, cnd cautarea se opreste
%initializari
i=1;x(i,:)=x0;p=pas_init;
n=length(x0);
while (p>tol),
p0=p*r;p=p0;
k=1;d=zeros(1,n);
stop_global=0;inapoi=0;
while (~stop_global),
d(k)=1;j=0;
stop=0;
while (~stop)
if inapoi,
p=p/2;
inapoi=0;
end;
x(i+1,:)=x(i,:)+p*d;
j=j+1;
if feval(fct_scop,x(i+1,:))>feval(fct_scop,x(i,:)),
if j==1,
p=-2*p;
i=i+1;
x(i+1,:)=x(i,:)+p*d;
inapoi=1;
else stop=1;
x(i+1,:)=[];
i=i-1;
d(k)=0;
k=k+1;
p=p0;
end;
end;
i=i+1;
end;
if k<=n,
stop_global=0;
else stop_global=1;
end;
end;
end;
[nr_it n]=size(x);
x_opt=x(nr_it,:);

S-ar putea să vă placă și