You are on page 1of 5

function [c,err,yc]=bisect(f,a,b,delta)

% Aproximacin a una raz de la ecuacin f(x)=0 en el intervalo [a,b].


% Puede usarse slo si f(x) es continua y f(a) y f(b) tienen distinto
% signo.

% Datos
% - f es la funcin, introducida como una cadena de caracteres 'f'
% - a y b son el extremo izquierdo y el extremo derecho.
% - delta es la tolerancia.

% Resultados
% - c es el cero
% - yc=f(c)
% - err es el error estimado de la aproximacin a c.

ya=feval(f,a);
yb=feval(f,b);
if ya*yb>0, return, end
max1=1+round((log(b-a)-log(delta))/log(2));
for k=1:max1
c=(a+b)/2;
yc=feval(f,c);
if yc==0
a=c;
b=c;
elseif yb*yc>0
b=c;
yb=yc;
else
a=c;
ya=yc;
end
if b-a < delta, break, end
end
c=(a+b)/2;
err=abs(b-a);
yc=feval(f,c);



NOTA: Teclear en MatLab:

>>[c,err,yc]=bisect('f',1,2,0.001)




function [k,p,err,P]=fixpt(g,p0,tol,max1)

% Aproximacin a una solucin de la ecuacin x=g(x) mediante la iteracin
% pn+1=g(pn) realizada a partir de una aproximacin p0.

% Datos
% - g es la funcin de iteracin
% - p0 es el punto de partida
% - tol es la tolerancia
% - max1 es el nmero mximo de iteraciones
% Resultados
% - k es el nmero de iteraciones realizadas
% - p es la aproximacin al punto fijo
% - err es la diferencia entre dos trminos consecutivos
% - P es la sucesin {pn} completa

P(1)=p0;
for k=2:max1
P(k)=feval(g,P(k-1));
err=abs(P(k)-P(k-1));
relerr=err/(abs(P(k))+eps);
p=P(k);
if (err<tol) | (relerr<tol),break; end
end
if k==max1
disp('se ha excedido el nmero mximo de iteraciones')
end
P=P';



NOTA: Teclear en MatLAB

[k,p,err,P]=fixpt('g',3,0.0001,91)
x=[-2:0.01:4];
y=1+x-x.^2/4;
yd=x;
plot(x,y,'-b',x,yd,'--r')



function [p0,err,k,y]=newton(f,df,p0,delta,epsilon,max1)

% Iteracin de Newton-Raphson.
% Aproximacin a una raz de f(x)=0 a partir de un valor inicial p0
% mediante la iteracin pk=pk-1-f(pk-1)/f'(pk-1) para k=1,2...

% Datos
% - f es la funcin introducida como una cadena de caracteres 'f'.
% - df es la derivada de f, introducida como una cadena 'df'.
% - p0 es la aproximacin inicial a un cero de f.
% - delta es la tolerancia para p0.
% - epsilon es la tolerancia para los valores de la funcin.
% - max1 es el nmero mximo de iteraciones.

% Resultados
% - p0 es la aproximacin al cero, obtenida con el mtodo de Newton-
Raph
% son.
% - err es una estimacin del error de p0.
% - k es el nmero de iteraciones realizadas.
% - y es el valor de la funcin f(p0)

for k=1:max1
p1=p0-feval(f,p0)/feval(df,p0);
err=abs(p1-p0);
relerr=2*err/(abs(p1)+delta);
p0=p1;
y=feval(f,p0);
if (err<delta) | (relerr<delta) | (abs(y)<epsilon), break, end
end


function [c,err,yc]=regula(f,a,b,delta,epsilon,max1)

% Mtodo de la rgula falsi o de la posicin falsa.
% Aproximacin a una raz de la ecuacin f(x)=0 en el intervalo [a,b].
% Puede usarse slo si f(x) es continua y f(a) y f(b) tienen distinto
% signo.

% Datos
% - f es la funcin, introducida como una cadena de caracteres 'f'
% - a y b son el extremo izquierdo y el extremo derecho.
% - delta es la tolerancia para el cero.
% - epsilon es la tolerancia para el valor de f en el cero.
% - max1 es el nmero mximo de iteraciones.

% Resultados
% - c es el cero
% - yc=f(c)
% - err es el error estimado de la aproximacin a c.

ya=feval(f,a);
yb=feval(f,b);
if ya*yb>0
disp('Note: f(a)*f(b)>0'),
return,
end
for k=1:max1
dx=yb*(b-a)/(yb-ya);
c=b-dx;
ac=c-a;
yc=feval(f,c);
if yc==0, break;
elseif yb*yc>0
b=c;
yb=yc;
else
a=c;
ya=yc;
end
dx=min(abs(dx),ac);
if abs(dx)<delta, break, end
if abs(yc)<epsilon, break, end
end
c;
err=abs(b-a)/2;
yc=feval(f,c);


NOTA: Teclear en MatLab:

[c,err,yc]=regula('f',-2,-1,0.01,0.01,10)



function [p1,err,k,y]=secant(f,p0,p1,delta,epsilon,max1)

% Mtodo de la secante. Aproximacin a una raz de f(x)=0 a partir de
unos
% valores iniciales p0 y p1 mediante la iteracin
% pk+1=pk-f(pk)(pk-pk-1)/f(pk)-f(pk-1) para
k=1,2,...

% Datos
% - f la funcin intoducida como una cadena de caracteres 'f'
% - p0 y p1 son las aproximaciones iniciales a un cero de f.
% - delta es la tolerancia para p1.
% - epsilon es la tolerancia para los valores de la funcin.
% - max1 es el nmero mximo de iteraciones.
% Resultados
% - p1 es la aproximacin al cero obtenida con el mtodo de la
secante.
% - err es una estimacin del error de p1.
% - k es el nmero de iteraciones realizadas.
% - y es el valor de la funcin f(p1).

for k=1:max1
p2=p1-feval(f,p1)*(p1-p0)/(feval(f,p1)-feval(f,p0));
err=abs(p2-p1);
relerr=2*err/(abs(p2)+delta);
p0=p1;
p1=p2;
y=feval(f,p1);
if (err<delta) | (relerr<delta) | (abs(y)<epsilon), break, end
end


function y=f(x)

%y=exp(-x);
%y=-x.^2+2;
y=x*exp(-x)-0.2;

function y=df(x)

%y=exp(-x);
%y=-2*x;
y=exp(-x)*(1-x);


function y=g(x)

%y=exp(-x);
%y=1+x-x^2/4;
%y=log(3*x^2);
y=0.2*exp(x);

You might also like