Documentos de Académico
Documentos de Profesional
Documentos de Cultura
BISECCIÓN
1. Aplicar bisección para hallar el mayor cero de h(x)=(x-2)2 – ln(x). con una
tolerancia de 10-5
-1
-2
-3
0 0.5 1 1.5 2 2.5 3 3.5 4
Escribir la función a la que se le va a aplicar bisección en un archivo tipo
function, esto se hace en otro editor:
function y=h(x)
y=(x-2).^2-log(x);
end
Programa:
function [c] = bisec(f,a,b,tol)
%DATOS
% f es la función a la cual se le va a aplicar bisección
% y es introducida como una cadena de caracteres 'f'
% a y b son los extremos del intervalo
% tol es la tolerancia para el error
%RESULTADOS
% c es la aproximación al cero de la función f
k=0;
ya=feval(f,a);
yb=feval(f,b);
if ya*yb<=0
while abs(a-b)/2>tol
c = (a+b)/2;
yc=feval(f,c);
fprintf('%8d%17.11f%17.11f%17.11f%17.11f\n',k,a,b,c,yc);
k=k+1;
if yc==0
a=b;
elseif ya*yc<0
b=c;yb=yc;
else
a=c;ya=yc;
end
end
else
fprintf('Cambiar limites');
end
En el Comand Windows ingresar los datos necesarios para correr el
programa:
>> a=3,b=4,tol=10.^(-5)
a=
3
b=
4
tol =
1.0000e-005
>> [c] = bisec('h',a,b,tol)
0 3.00000000000 4.00000000000 3.50000000000
0.99723703150
1 3.00000000000 3.50000000000 3.25000000000
0.38384500366
2 3.00000000000 3.25000000000 3.12500000000
0.12619071681
3 3.00000000000 3.12500000000 3.06250000000
0.00967467413
4 3.00000000000 3.06250000000 3.03125000000 -
0.04549851320
5 3.03125000000 3.06250000000 3.04687500000 -
0.01816920958
6 3.04687500000 3.06250000000 3.05468750000 -
0.00431157341
7 3.05468750000 3.06250000000 3.05859375000
0.00266547603
8 3.05468750000 3.05859375000 3.05664062500 -
0.00082706753
9 3.05664062500 3.05859375000 3.05761718750
0.00091819957
10 3.05664062500 3.05761718750 3.05712890625
0.00004531484
11 3.05664062500 3.05712890625 3.05688476563 -
0.00039093914
12 3.05688476563 3.05712890625 3.05700683594 -
0.00017282785
13 3.05700683594 3.05712890625 3.05706787109 -
0.00006376043
14 3.05706787109 3.05712890625 3.05709838867 -
0.00000922377
15 3.05709838867 3.05712890625 3.05711364746
0.00001804529
c=
3.0571
2. Aplicar bisección para hallar el mayor cero de h(x)=x3 – x-2con una tolerancia
de 10-5
x=-3:0.01:3;
y1=x.^3;
y2=x-2;
plot(x,y1,'r',x,y2,'k', 'linewidth', 2)
grid on
30
20
10
-10
-20
-30
-3 -2 -1 0 1 2 3
Escribir la función a la que se le va a aplicar bisección en un archivo tipo
function, esto se hace en otro editor:
function y=h(x)
y=(x^3)-x+2;
end
Programa:
function [c] = bisec(f,a,b,tol)
%DATOS
% f es la función a la cual se le va a aplicar bisecci�n
% y es introducida como una cadena de caracteres 'f'
% a y b son los extremos del intervalo
% tol es la tolerancia para el error
%RESULTADOS
% c es la aproximaci�n al cero de la función f
k=0;
ya=feval(f,a);
yb=feval(f,b);
if ya*yb<=0
while abs(a-b)/2>tol
c = (a+b)/2;
yc=feval(f,c);
fprintf('%8d%17.11f%17.11f%17.11f%17.11f\n',k,a,b,c,yc);
k=k+1;
if yc==0
a=b;
elseif ya*yc<0
b=c;yb=yc;
else
a=c;ya=yc;
end
end
else
fprintf('Cambiar limites');
end