Está en la página 1de 2

Método de la Bisección

f = @(x)(x + sin(x)/2 - 1);

xmin = -5;
xmax = 5;
xs = linspace(xmin, xmax,200);
ys = f(xs);
plot(xs, ys);
title('Grafica de f')
xlabel('x')
ylabel('y')

hold on;
plot(xs,ys)

xleft = -4;
xright = 4;
xtol = 1e-2;
plot([xleft], [0], 'x')
plot([xright], [0], 'x')

j = 1;
sleft = sign(f(xleft));
sright = sign(f(xright));
while xright - xleft > xtol
xmed = (xleft + xright)/2;
smed = sign(f(xmed));
if smed==sleft
xleft = xmed;
else
xright = xmed;
end
plot([xmed], [0], 'o');
j = j + 1;
end
legends = cell(1, j+2);
legends{1} = 'f';
legends{2} = 'left end';
legends{3} = 'right end';
for k=1:j-1
legends{k+3} = sprintf('step %d', k);
end

legend(legends)
hold off;

Ejercicio
Empaqueta el método de bisección como una función con entradas:
 Una función f continua
 Los extremos de un intervalo a y b.
 Una tolerancia para el error xtol

y salidas

 Si f(a)*f(b)>0, se rompe y no devuelve nada (imprime un mensaje de


error, lanza una "excepción", etc)
 Si f(a)*f(b)<=0, devuelve un intervalo que contiene la raíz de
longitud inferior a xtol

Método Netwon

function [x,errorx]=newton(f, fp, x0, xtol, maxiter)


x = x0;
%Comenzamos con un error infinito, simplemente para que
%la ejecución del programa no se detenga antes de empezar
errorx = inf;
k = 0; %contador
% el bucle se detiene cuando se consiga la precisión deseada,
% pero también termina prematuramente si
% se alcanza el máximo de iteraciones
while errorx > xtol && k<maxiter
x = x - f(x)/fp(x);
errorx = abs(f(x));
k = k + 1;
end
end

f = @ (x)(x^2-2);
fp = @ (x)(2*x);
% 2 iteraciones son insuficientes para conseguir la precisión deseada
[x,e] = newton(f,fp, 1, 1e-8, 2)
% 10 iteraciones sí son suficientes para conseguir la precisión deseada
% La estimación del error es mejor que la precisión mínima que le pedimos
[x,e] = newton(f,fp, 1, 1e-8, 10)
[x,e] = newton(f,fp, 1, 1e-8, 100)

Ejercicio
Realice las modificaciones al método de Netwon para crear la función del
método de la Secante.

También podría gustarte