Está en la página 1de 1

GIIT_AMA_2122_Practica1

Práctica 1. Cálculo de los ceros (raíces) de una función


Límite de entrega de esta práctica: ver tarea en Moodle o calendario de la asignatura.

Instrucciones:

1. Haz una copia de la hoja pública y renómbrala: si tu correo es usuario@alumnos.unex.es añade al final del
título _usuario, por ejemplo AMA_2122_Practica1_mariomp
Para cambiar el nombre pulsa en el título de la hoja (arriba del todo, entre el logo de Sage y el menú
"Archivo / File...")
2. Comparte la hoja de trabajo con el usuario mariomp2122 mediante el botón Compartir / Share de arriba a la
derecha.
3. Completa la primera celda y trabaja la práctica.
4. Cuando hayas terminado, haz una copia en un único fichero PDF y ponlo en el campus virtual. Esa será la versión
que se evaluará. La hoja no se considera entregada si no se ha renombrado y compartido (pasos 1 y 2).
Para generar el PDF lo más sencillo es usar el botón Imprimir / Print de arriba e imprimir la nueva página a
fichero.
Una alternativa es hacer capturas de pantalla (JPG, PNG...) de la hoja a imprimir, y convertirlas a un
único archivo PDF.

Nombre y Apellidos:

Grupo:

Método de la bisección
Comencemos definiendo una función para aplicar el método y un intervalo donde sea continua y tenga un cero. Vamos a
aplicar el algoritmo para calcular la raíz de f(x)=-x+cos(x) en el intervalo [0, 1.6].

f(x) = -x+cos(x)
a = 0.0; b = 1.6

Representamos la función para ver que tiene un cero en ese intervalo. Nótese que no haría falta representarla sino
comprobar que cambia de signo en los extremos del intervalo.

plot(f(x),(x,a,b))

¿El punto en el que tiene el cero está a la izquierda o a la derecha del punto medio del intervalo, ? Aunque en el dibujo
parece estar a la izquierda, podemos asegurarnos viendo el valor de la función en ese punto.

c=(a+b)/2
c

f(c)

Como es negativo, sabemos que el cero estará a la derecha (por el Teorema de Bolzano, ya que la función es continua).

Es decir, que sabemos que la raíz está en el intervalo [0,0.8]. Así que podemos considerar ese intervalo y repetir el
proceso tantas veces como queramos para que el intervalo sea más pequeño.

b=c; a,b

plot(f(x),(x,a,b))

Ahora repetimos el proceso.

c=(a+b)/2.0
c

f(c)

Como es positivo, sabemos que la solución está en el intervalo [0.4, 0.8]

a=c; a,b

plot(f(x),(x,a,b))

Ejercicio. Aplica 4 pasos del método de la bisección a la función f(x) = e − x − sen(x) para encontrar una raíz entre
-0.2 y 1.1.

Error del Método de la Bisección

Para encontrar una raíz con el método de la Bisección en el intervalo [a,b], el error que se comete en el paso n
es de:

b−a
En =
2n

Si nos piden una raíz con un error máximo de un valor e


se tiene que cumplir que:

En ≤ e

y a partir de ahí despejar el valor de n


.

Si nos piden una raíz con una precisión de d


cifras decimales significativas se tiene que cumplir que:

E n ≤ 0.5 ⋅ 10 − d

y a partir de ahí despejar el valor de n

error = 0.05; a = 0.0; b = 1.0


it = log((b-a)/error,2); print "n >=",it.n()
it = ceil(it); print "Número de pasos:", it

d = 3; a = 0.0; b = 1.0
error = 0.5*10^(-d);
it = log((b-a)/error,2); print "n >=",it.n()
it = ceil(it); print "Número de pasos:", it

f(x) = -6*x+2*e^(x)
for i in [1..it]:
c=(a+b)/2;
print "Iteración:", i;
print "Posible raíz:", c;
print "f(c) =",f(c);
if f(a)*f(c)<0: b = c;
else: a = c;
print;

sol = find_root(f(x),0,1); print "Solución real:", sol


print "Error solicitado:", error
print "Error cometido:", abs(sol-c)

Método de Newton
Apliquemos el método para calcular la raíz de la función f(x) = e x − 4
, partiendo de x 0 = 1.6

f(x)=e^x-4
plot(f(x),(x,0,2))

Tomamos el punto inicial x 0 = 1.6

x0 = 1.6

Aplicamos el método de Newton

x1=x0-(f(x0)/f.diff(x)(x0)) ; x1.n()

Evaluando la celda de manera iterada, vamos obteniendo las sucesivas aproximaciones.

f(x)=e^x-4
s=1.6;
for i in [1..4]:
s=(s-(f(s)/f.diff(x)(s))).n() ; s

Como podemos comprobar, llegaremos al valor exacto de la raíz, que no es otra que ln4

ln(4).n()

Podemos representar gráficamente el método:

f(x)=e^x-4
P=plot(f(x),(x,1,1.8))
c=1.6;
for i in [1..4]:
P+=line([(c,0),(c,f(c))], color='red',thickness=2)
P+=line([(c,f(c)),(c-(f(c)/f.diff(x)(c)),0)], color='black',thickness=2)
c=(c-(f(c)/f.diff(x)(c))).n();
P

Estimación del error mediante la diferencia entre dos valores consecutivos

Supongamos que queremos un error menor que 10 − 5. Una manera usual de estimarlo es ir restando a cada valor obtenido
el anterior.

f(x)=e^x-4
x0=1.6; print "Punto inicial: ",x0; print
for i in [1..5]:
xcopia=x0
x0=(x0-(f(x0)/f.diff(x)(x0))).n() ; print "Iteración ",i, ": ",x0
error=abs(x0-xcopia); print "Error:",error; print

A partir de los datos anteriores, podemos ver que 4 pasos serían suficientes.

Ejercicio. Aplica el método de Newton-Raphson a la función f(x) = 1 − x − sen(x) para encontrar una raíz entre 0
y 1 con 4 cifras decimales de precisión.

Ejercicios Finales
En los ejercicios siguientes, dni será la suma de los números de tu DNI (sin letra, claro).

1
Ejercicio 1. Aplicar el método de la Bisección a la función f(x) = e − x − sen(x ⋅ (1 + )) para encontrar una
ln ( dni )
raíz entre 0 y 1 con 5 cifras decimales significativas. Sin aplicar el método, ¿cuántas iteraciones harían falta para
encontrar una raíz con 10 cifras decimales significativas?

1
Ejercicio 2. Aplicar el método de Newton a la función f(x) = e − x − sen(x ⋅ (1 + )) para encontrar una raíz
ln ( dni )
entre 0 y 1 con un error máximo de 0.0001.

Ejercicio 3. Modifica el método de Newton para obtener el método de la Secante con n pasos.

Ejercicio 4. Utilizando el método de la Secante que has obtenido en el ejercicio anterior, encuentra una raíz de la
1
función f(x) = e − x − sen(x ⋅ (1 + )) con 4 cifras decimales significativas.
ln ( dni )

También podría gustarte