Está en la página 1de 4

UNIVERSIDAD DE CORDOBA

FACULTAD DE CIENCIAS BASICAS


DEPARTAMENTO DE MATEMATICA Y ESTADISTICA
Taller Métodos Numéricos, 22 de octubre de 2021

0.1. Método de Bisección y Regula Falsi


El siguiente programa calcula la raíz de una ecuación f (x) = 0 mediante el método de bisección. Los
datos del programa son la función f , los extremos del intervalo [a, b] donde se busca la raíz, y la tolerancia
tol con la que se desea calcular ésta. El programa tiene una salida de error en el caso en que la función
f no cambie de signo en el intervalo inicial.

function raiz=biseccion(funct,a,b,tol)
fa=feval(funct,a);
fb=feval(funct,b);
if (fb*fa>0)
error('La funcion tiene el mismo signo en ambos extremos.')
end
while (abs(b-a)>tol)
if (fa*fb==0)
if (fa==0)
raiz=a;
else
raiz=b;
end
else
raiz=(a+b)/2;
fraiz=feval(funct,raiz);
fprintf('%4.8f %4.8f %4.8f %0.8e %0.8e %0.8e\n',a,b,raiz,fa,fb,fraiz)
if fraiz==0;
disp('El punto medio es la raiz!')
break
elseif (fa*fraiz>0)
a=raiz;
fa=fraiz;
else
b=raiz;
fb=fraiz;
end
end
end
Para encontrar la raiz de f (x) = x sin(x) − 1 en [0, 2] debemos introducir primero la función f con el
comnado inline:

mif=inline('x*sin(x)-1')

obtenemos la salida
mif =

Inline function:
mif(x) = x*sin(x)-1
luego llamamos la función biseccion

biseccion(mif,0,2,10^-3)

0.00000000 2.00000000 1.00000000 -1.00000000e+00 8.18594854e-01 -1.58529015e-01


1.00000000 2.00000000 1.50000000 -1.58529015e-01 8.18594854e-01 4.96242480e-01
1.00000000 1.50000000 1.25000000 -1.58529015e-01 4.96242480e-01 1.86230774e-01
1.00000000 1.25000000 1.12500000 -1.58529015e-01 1.86230774e-01 1.50510434e-02
1.00000000 1.12500000 1.06250000 -1.58529015e-01 1.50510434e-02 -7.18266314e-02
1.06250000 1.12500000 1.09375000 -7.18266314e-02 1.50510434e-02 -2.83617227e-02
1.09375000 1.12500000 1.10937500 -2.83617227e-02 1.50510434e-02 -6.64277486e-03
1.10937500 1.12500000 1.11718750 -6.64277486e-03 1.50510434e-02 4.20803401e-03
1.10937500 1.11718750 1.11328125 -6.64277486e-03 4.20803401e-03 -1.21649042e-03
1.11328125 1.11718750 1.11523438 -1.21649042e-03 4.20803401e-03 1.49600366e-03
1.11328125 1.11523438 1.11425781 -1.21649042e-03 1.49600366e-03 1.39813102e-04

ans =

1.1143

La raiz en formato corto es 1,1143. La tabla es producto del siguiente comando que incluimos en el
programa:

fprintf('%4.8f %4.8f %4.8f %0.8e %0.8e %0.8e\n',a,b,raiz,fa,fb,fraiz)

Podemos apreciar que la primera columna corresponde al extremo izquyierdo del intervalo a, la segunda
columna es el extremo derecho b, la tercera corresponde a c = (a+b)/2 y las siguientes son las evaluaciones
de la funcion en esos puntos respectivamente. De acuerdo a eso, nuestras aproximaciones estan en la tercera
columna y en la ultima columna se debe verificar que ese valor evaluado en la función es cero. En este
caso la raiz es 1,11425781 y el valor evaluado es 1,39813102e − 04. Como nosotros solicitamos que el error
fuera menor a a 10−3 y este valor es del orden de 10−4 , se considera 0.
Comparemos estos resultados usando el método Regula Falsi cuyo programa es

function raiz=regula(funct,a,b,tol)
fa=feval(funct,a);
fb=feval(funct,b);
if (fb*fa>0)
error('La funcion tiene el mismo signo en ambos extremos.')
end
while (abs(b-a)>tol)
if (fa*fb==0)
if (fa==0)
raiz=a;
else
raiz=b;
end
else
raiz=(a*fb-b*fa)/(fb-fa);
fraiz=feval(funct,raiz);
fprintf('%4.8f %4.8f %4.8f %0.8e %0.8e %0.8e\n',a,b,raiz,fa,fb,fraiz)
if fraiz==0;
disp('El punto medio es la raiz!')
break
elseif (fa*fraiz>0)
a=raiz;
fa=fraiz;
else
b=raiz;
fb=fraiz;
end
end
end

Usamos la misma funci


on del ejemplo anterior:

mif=inline('x*sin(x)-1')

luego llamamos la función regula

regula(mif,0,2,10^-3)

y obtenemos

0.00000000 2.00000000 1.09975017 -1.00000000e+00 8.18594854e-01 -2.00192102e-02


1.09975017 2.00000000 1.12124074 -2.00192102e-02 8.18594854e-01 9.83461086e-03
1.09975017 1.12124074 1.11416119 -2.00192102e-02 9.83461086e-03 5.63035823e-06
1.09975017 1.11416119 1.11415714 -2.00192102e-02 5.63035823e-06 3.00226199e-09
1.09975017 1.11415714 1.11415714 -2.00192102e-02 3.00226199e-09 1.60094160e-12
1.09975017 1.11415714 1.11415714 -2.00192102e-02 1.60094160e-12 8.88178420e-16
1.09975017 1.11415714 1.11415714 -2.00192102e-02 8.88178420e-16 -2.22044605e-16

ans =
1.1142

Podemos ver el mismo resultado en menos iteraciones.

1. Para cada una de las siguientes funciones compruebe que hay un cero de f (x) en el intervalo indicado
y encuentre el número mínimo de iteraciones, N , necesarias para lograr una precisión de  = 10−3
utilizando el método de bisección. Realice N iteraciones y presente los resultados como en la tabla ??.

1 f (x) = x3 − 1 en [0, 2]
2 f (x) = x2 − 4 sen x en [1, 3]
3 f (x) = x3 − 7x + 6 en [0, 1,5]

4 f (x) = cos x − x en [0, 1]
5 f (x) = x − tan x en [4, 4,5]
6 f (x) = e−x − x en [0, 1]
x2
7 f (x) = ex − 1 − x − 2 en [−1, 1]
x −x
8 f (x) = e + 2 − 5 en [1, 2].
9 f (x) = x − cos(x) en [0, 2π].
10 f (x) = ex + 2−x + 2 cos(x) − 6 en [1, 2].
11 f (x) = 2x cos(x) − (x − 2)2 en [2, 3].
12 f (x) = (x − 2)2 − ln(x) en [e, 4].
13 f (x) = ex − 3x2 en [0, 1].
14 f (x) = sin(x) − e−x en [0, 1].
2. Para cada una de las siguientes funciones compruebe que hay un cero de f (x) en el intervalo indicado
y encuentre el número mínimo de iteraciones, N , necesarias para lograr una precisión de  = 10−3
utilizando el método de Regula Falsi. Realice N iteraciones y presente los resultados como en la tabla
??.

1 f (x) = x3 − 1 en [0, 2]
2 f (x) = x2 − 4 sen x en [1, 3]
3 f (x) = x3 − 7x + 6 en [0, 1,5]

4 f (x) = cos x − x en [0, 1]
5 f (x) = x − tan x en [4, 4,5]
6 f (x) = e−x − x en [0, 1]
x2
7 f (x) = ex − 1 − x − 2 en [−1, 1]
x −x
8 f (x) = e + 2 − 5 en [1, 2].
9 f (x) = x − cos(x) en [0, 2π].
10 f (x) = ex + 2−x + 2 cos(x) − 6 en [1, 2].
11 f (x) = 2x cos(x) − (x − 2)2 en [2, 3].
12 f (x) = (x − 2)2 − ln(x) en [e, 4].
13 f (x) = ex − 3x2 en [0, 1].
14 f (x) = sin(x) − e−x en [0, 1].

También podría gustarte