Documentos de Académico
Documentos de Profesional
Documentos de Cultura
GDIGG_AMAT_2223_Practica2_vfernandc
Práctica 2. Raíces de una función. Parte II
Temporalización de la práctica: Lunes 10 de octubre de 2022 (Grupo A) y Jueves 13 de octubre de 2022
(Grupo B)
Instrucciones:
1. Haz una copia de la hoja pública y renómbrala: si tu correo es mariomp@alumnos.unex.es añade al final
del título _mariomp, por ejemplo GDIGG_AMAT_2223_Practica2_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 de tu profesor mediante el botón Compartir/Share de arriba a
la derecha.
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.
5. Una vez subido el PDF al campus virtual, no podrá modificarse esta hoja de trabajo. Hacerlo conllevará
la calificación de 0 en esta práctica.
6. Los ejercicios a entregar se representan en Rojo y deben estar correctamente explicados. Los ejercicios
indicados con ** NO serán obligatorios, pero aquellos que los hagan podrán ir sumando por cada uno de
ellos 0.1 puntos adicionales en la calificación de la práctica.
En primer lugar, vamos a considerar una función y dos puntos cualesquiera x y x , representando en el
0 1
Por ejemplo, sean la función f (x) = e − 4 , y dos puntos x = 1 y x = 2, para representar puntos en
x
0 1
Sage, podemos utilizar la función points(x), siendo x una lista de puntos de la forma (a,b).
https://sage-cum.unex.es:8015/home/GDGG22vfernandc/3/print 1/8
31/10/22, 23:31 GDIGG_AMAT_2223_Practica2_vfernandc -- Sage
f(x) = e^x - 4
x0, x1 = 1,2
puntos = [(x0,f(x0)),(x1,f(x1))]
points(puntos,figsize=4,pointsize=40,color="red")
Si queremos añadir la recta que pasa por ambos puntos, recordemos que la ecuación de una recta que pasa
por los puntos (a,b) y (c,d) es:
d − b
y − b = ⋅ (x − a)
c − a
p = points(puntos,figsize=4,pointsize=40,color="red")
m = (f(x1)-f(x0))/(x1-x0)
p+plot(f(x0)+m*(x-x0),xmin=0,xmax=3)
El método de la Secante construye una sucesión numérica que converge a la raíz de la función, pero para
poder aplicarlo es necesario considerar dos valores iniciales óptimos x y x , pues éstos nos permitirán
0 1
obtener la pendiente de la recta que pasa por ellos para poder sustituirla por la derivada que aparece en el
método de Newton. De modo que, para x , x , n−1 n−2
https://sage-cum.unex.es:8015/home/GDGG22vfernandc/3/print 2/8
31/10/22, 23:31 GDIGG_AMAT_2223_Practica2_vfernandc -- Sage
f(x) = e^x -4
x0, x1 = 1,2
print "x0 = ", x0
print "x1 = ", x1
x2 = (x0*f(x1)-x1*f(x0))/(f(x1)-f(x0))
print "Aproximación de la raíz:", x2.n(digits=5)
x0 = 1
x1 = 2
Aproximación de la raíz: 1.2744
En una única iteración, el método de la Secante proporciona una aproximación de la raíz de 1.2744, sin
embargo podemos comprobar que la raíz se encuentra próxima a 1.4 (basta representar la gráfica en el
intervalo [1,2]). Es por ello que será necesario realizar más iteraciones, y habrá que tener en cuenta el error
permitido para obtener una aproximación. Para este método, el error que se comete en la iteración n será
es decir, será la diferencia, en valor absoluto, entre la aproximación obtenida en la iteración n y la obtenida
en la iteración n-1. Por ello, en la primera iteración (que será el valor x ) se comete el siguiente error:
2
error1 = abs(x2-x1)
print "Error cometido en la iteración 1:", error1.n(digits=5)
Error cometido en la iteración 1: 0.72559
1
−x
f (x) = e − sin (x ⋅ (1 + ))
log(dni)
https://sage-cum.unex.es:8015/home/GDGG22vfernandc/3/print 3/8
31/10/22, 23:31 GDIGG_AMAT_2223_Practica2_vfernandc -- Sage
siendo dni la suma de los números de tu DNI. Aplica el método de la Secante para
obtener una aproximación de la raíz con 4 cifras decimales significativas, partiendo de
dos valores iniciales cualesquiera.
dni = 38
f(x) = e^(-x) - sin(x*(1+(1/log(dni))))
x0, x1 = 0,1
err = 0,5
Secante (err,f,x0,x1)
Traceback (click to the left of this block for traceback)
...
UnboundLocalError: local variable 'x2' referenced before assignment
Ejercicio 4. Redefine dni = 2.dni (por ejemplo, dni = 2.8765431). Aplica el método de la
Secante, partiendo de dos valores cualesquiera, para encontrar una raíz de la función
−x/2
f (x) = e − sin(x/2) − (1 + dni) ⋅ x
dni= 2.76055654
f(x) = e^(-x/2) - sin(x/2) - (1+dni)*x
x0, x1 = 1, 2
print "x0 = ", x0
print "x1 = ", x1
x2 = (x0*f(x1)-x1*f(x0))/(f(x1)-f(x0))
print "Aproximación de la raíz:", x2.n(digits=5)
https://sage-cum.unex.es:8015/home/GDGG22vfernandc/3/print 4/8
31/10/22, 23:31 GDIGG_AMAT_2223_Practica2_vfernandc -- Sage
error1 = abs(x2-x1)
print "Error cometido en la iteración 1:", error1.n(digits=4)
x0 = 1
x1 = 2
Aproximación de la raíz: 0.16688
Error cometido en la iteración 1: 1.833
En este caso, se puede transformar el problema de buscar una raíz de una función f (x) que cumple que
f (x) = 0
en el problema de buscar un punto fijo de otra función F (x) que debe cumplir que
F (x) = x
Este método permite construir una sucesión numérica de puntos fijos de la función F (x), partiendo de un
valor inicial óptimo x , que converge a la raíz de la función f (x). En esta ocasión, la construcción de la
0
xn = F (xn−1 )
esto es, para la iteración n la aproximación de la raíz será la imagen por F de la aproximación obtenida en la
iteración anterior.
Por tanto, para aplicar este método es necesario previamente encontrar la función F (x). Por ejemplo, si
queremos encontrar una raíz de la función f (x) = −3x + e , debemos buscar la función F (x) que
−x
cumpla que
F (x) = x
entonces ésta ya cumple que F (x) . Finalmente, debemos tomar un valor inicial x , por ejemplo
= x 0
x = 1.
0
f(x) = -3*x+e^(-x)
print "f(x) = ", f(x)
F(x) = e^(-x)/3
x0 = 1
https://sage-cum.unex.es:8015/home/GDGG22vfernandc/3/print 5/8
31/10/22, 23:31 GDIGG_AMAT_2223_Practica2_vfernandc -- Sage
x1 = F(x0)
print "Aproximación de la raíz:", x1.n(digits=5)
f(x) = -3*x + e^(-x)
Aproximación de la raíz: 0.12263
Observamos que en una iteración, la aproximación de la raíz es de 0.12263, sin embargo se puede
comprobar fácilmente que la raíz se encuentra próxima a 0.25. Por ello, es necesario seguir realizando
iteraciones, esto es, construyendo la sucesión numérica, hasta que se cumpla la condición del error. En esta
ocasión, volveremos a considerar el error cometido en la iteración n como
error1 = abs(x1-x0)
print "Error cometido en la iteración 1:", error1.n(digits=5)
Error cometido en la iteración 1: 0.87737
** Ejercicio 5. Crea una función que aplique el método del Punto Fijo para encontrar
una aproximación de una raíz de una función f (x) partiendo del valor inicial x0 y con
un error permitido err, esto es, debe recibir como argumentos la función f (x) , el valor
inicial x0, y el error err, y debe devolver la aproximación de la raíz encontrada xn, así
como el error que se comete al encontrarla. En esta ocasión, para que se cumpla el
error utiliza while.
dni = 38
f(x) = (e^(-x/4))-sin(x/4)-(1+dni*x)
x0,x2= 1,0
err = 10^-2
Secante ( err,f,x0,x1)
Aproximación de la raíz: -0.00010045
Error cometido en la iteración 1: 0.12273
Aproximación de la raíz: 1.7084e-9
Error cometido en la iteración 1: 0.00010045
(((38*((e^(-1/4) - sin(1/4) - 39)*e^(-1) + 38*e^(-1) -
3*e^(-1/12*e^(-1)) + 3*sin(1/12*e^(-1)) + 3)/(3*e^(-1/4) + 38*e^(-1)
- 3*e^(-1/12*e^(-1)) - 3*sin(1/4) + 3*sin(1/12*e^(-1)) - 114) -
e^(-1/4*((e^(-1/4) - sin(1/4) - 39)*e^(-1) + 38*e^(-1) -
3*e^(-1/12*e^(-1)) + 3*sin(1/12*e^(-1)) + 3)/(3*e^(-1/4) + 38*e^(-1)
https://sage-cum.unex.es:8015/home/GDGG22vfernandc/3/print 6/8
31/10/22, 23:31 GDIGG_AMAT_2223_Practica2_vfernandc -- Sage
Aplica el método del Punto Fijo, siendo el valor inicial x el punto medio del intervalo
0
en el que se encuentre la solución, para encontrar una solución con una precisión de 5
cifras decimales significativas.
Finalmente, habrá ocasiones en las que la función F (x) no sea acertada pues no tendrá puntos fijos, y por lo
tanto, la sucesión numérica proporcionada por el método no convergerá a la raíz de la función f (x). Para
comprobar si F (x) es óptima o no, hay que comprobar si tanto F (x) como F (x) están definidas (y son
′
continuas) en el intervalo (a, b) en el que se encuentra la raíz de f (x), y además F (x) debe estar acotada
′
f(x) = x^3 - x - 1
plot(f(x),(x,1,2),figsize=4)
https://sage-cum.unex.es:8015/home/GDGG22vfernandc/3/print 7/8
31/10/22, 23:31 GDIGG_AMAT_2223_Practica2_vfernandc -- Sage
Observamos que la función f (x) presenta una raíz en el intervalo [1, 2], sin embargo si representamos tanto
la función F (x) como su derivada en el intervalo [1, 2], podemos observar que F (x) no está acotada por 1
′
en dicho intervalo, por lo que la sucesión numérica que proporcionaría el método del Punto Fijo no
converge a la raíz que presenta la función f (x) en el intervalo [1, 2].
F(x) = x^3 - 1
Fder(x) = F.diff()
plot(F(x),(x,1,2),figsize=4)+plot(Fder(x),(x,1,2),color="red")
F(x) = x^3 - 1
x0 = 1
for i in [1..4]:
print "Iteración ",i, ":"
x1 = F(x0)
print "Aproximación:", x1.n(digits=5)
x0 = x1
Observamos que efectivamente la sucesión no converge. ¿Qué ocurre si cambiamos el valor inicial x ? 0
¿Convergerá?
b) Aplica el método del Punto Fijo para aproximar la solución negativa con una
precisión de 4 cifras decimales significativas. ¿Qué error se comete?
c) Observando los resultados obtenidos, ¿cuál de los dos métodos proporciona una
aproximación de la solución más precisa?
https://sage-cum.unex.es:8015/home/GDGG22vfernandc/3/print 8/8