Matlab - AYUDENME A CONVERTIR A SCILAB

 
Vista:

AYUDENME A CONVERTIR A SCILAB

Publicado por Camila Denisse (1 intervención) el 06/08/2021 01:44:12
function [xfin,kfin,ffin,nEval,nIter,stop]=metodoGN (k,x0,xtol,ftol,maxIter,maxEval)
stop=0;
m=length(x0);
n=length(k);
Eval=0;
nIter=0;
h=1e-9;
J=Jacobiana(k,x0,h);
k0=zeros(1,n);
kfin=zeros(1,n);
for i=1:n
k0(i)=feval(char(k(i)),x0);
end %for, calculo k0
f0=k0*k0';
d=pasoGN(k0,J);
while ~stop
nIter=nIter+1;
if any(isinf(d(:))) %Se busca si hay algún infinito en el vector d
stop=-5; %Si hay un infinito hay desbordamiento (-5)
else
Evals=maxEval-Eval;
[xfin,stop,numEval]=LineSearch(k,x0,k0,d,h,Evals);
for i=1:n
kfin(i)=feval(char(k(i)),xfin);
end %for, calculo kfin
ffin=kfin*kfin';
Eval=Eval+numEval+1;
if any(isinf(kfin(:)))||isinf(ffin)
stop=-5;
elseif abs(xfin-x0)<=xtol
stop=2; %se ha logrado un incremento muy pequeño en x
elseif abs(ffin-f0)<=ftol
stop=1; %se ha logrado un incremento muy pequeño
en el valor de la función

elseif nIter>maxIter
stop=3; %se ha sobrepasado el número máximo de iteraciones
end %elseif
x0=xfin;
k0=kfin;
f0=ffin;
end %if-else
if ~stop
J=Jacobiana(k,x0,h);
d=pasoGN(k0,J);
Eval=Eval+m;
end %if
end %while
nEval=Eval;
nIter=nIter+1;
end
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder