Está en la página 1de 8

31/10/22, 23:31 GDIGG_AMAT_2223_Practica2_vfernandc -- Sage

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)

Entrega de la práctica: Ver tarea en el campus virtual o agenda de la asignatura

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.

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.

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.

Alumno: Virginia Fernández Blanco


Método de la Secante
El método de la Secante es una modificación del método de Newton, en el que se sustituye la derivada de la
función, f (x), por la pendiente de la recta que pasa por los puntos (x , f (x )) y (x , f (x )) .
0 0 1 1

En primer lugar, vamos a considerar una función y dos puntos cualesquiera x y x , representando en el
0 1

plano la recta que pasa por ambos puntos.

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

y con la función plot() dibujamos la recta.

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

xn−2 f (xn−1 ) − xn−1 f (xn−2 )


xn =
f (xn−1 ) − f (xn−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á

errorn = |xn − xn−1 |

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

** Ejercicio 1. Crea una función que aplique el método de la Secante para


encontrar una aproximación de una raíz de una función f(x) partiendo de
los valores iniciales x0, x1 y con un error permitido err, esto es, debe
recibir como argumentos la función f(x) , los valores iniciales x0, x1, 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.

def Secante(err, f, x0,x1):


error1 = 1
while error1 > err:
x2 = (x0*f(x1)-x1*f(x0))/(f(x1)-f(x0))
print "Aproximación de la raíz:", x2.n(digits=5)
error1 = abs(x2-x1)
print "Error cometido en la iteración 1:", error1.n(digits=5)
x0 = x1
x1 = x2
return x2, error1.n

Ejercicio 2. Dada la función

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 3. Sea la función

f (x) = sin(√ x) − x + 2.2

Utilizando el método de la Secante, encuentra una aproximación de la raíz


positiva con un error máximo permitido de 0.05. ¿Qué error se comete al
encontrar dicha aproximación? Considera los valores iniciales que desees.

f(x) = sin (sqrt(x)) - x + 2.2


x0, x1 = 0, 1
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)
error1 = abs(x2-x1)
print "Error cometido en la iteración 1:", error1.n(digits=5)
x0 = 0
x1 = 1
Aproximación de la raíz: 13.878
Error cometido en la iteración 1: 12.878

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

con un error permitido máximo de 10 −4


.

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

Método del Punto Fijo


El último método numérico para encontrar raices de una función f (x) es el método del Punto Fijo, éste
permite aproximar la raíz de f (x) a partir del punto fijo de otra función F (x).

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

Además, debemos tener en cuenta que la transformación F (x) no es única.

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

sucesión será del siguiente modo:

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

partiendo de que f (x) = 0 , luego


−x
−3x + e = 0

si despejamos la x tendríamos la siguiente ecuación equivalente


−x
x = e /3

luego nos podemos fijar que si


−x
F (x) = e /3

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

errorn = |xn − xn−1 |

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.

#Realiza el ejercicio en esta celda

Ejercicio 6. Redefine dni = 0.dni (por ejemplo, dni = 0.8765431). Aplica el


método de la Secante, partiendo de un valor cualquiera x , para encontrar 0

una raíz de la función


−x/4
f(x) = e − sin(x/4) − (1 + dni) ⋅ x

con un error permitido máximo de 10 −2


.

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

- 3*e^(-1/12*e^(-1)) - 3*sin(1/4) + 3*sin(1/12*e^(-1)) - 114)) +


sin(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)
- 3*e^(-1/12*e^(-1)) - 3*sin(1/4) + 3*sin(1/12*e^(-1)) - 114)) +
1)*e^(-1) - ((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)*(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))/(114*((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) -
38*e^(-1) + 3*e^(-1/12*e^(-1)) - 3*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) - 3*e^(-1/12*e^(-1)) - 3*sin(1/4) +
3*sin(1/12*e^(-1)) - 114)) - 3*sin(1/12*e^(-1)) +
3*sin(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)
- 3*e^(-1/12*e^(-1)) - 3*sin(1/4) + 3*sin(1/12*e^(-1)) - 114))),
<built-in method _numerical_approx of
sage.symbolic.expression.Expression object at 0x7f2002bb3ef0>)

Ejercicio 7. Sea la ecuación


−x
√ x + 2e + arctg(x) = −5x + 10

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.

#Realiza el ejercicio en esta celda

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

por 1 en todo ese intervalo, es decir,



|F (x)| < 1

Por ejemplo, para la función


3
f (x) = x − x − 1

una función F (x) podría ser


3
F (x) = x − 1

pero veamos qué ocurre.

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")

Veamos que efectivamente la sucesión no converge, realizando 4 iteraciones.

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á?

Ejercicio 8. Sean la ecuación e x


+ 2x
2
= x + 3 , y el valor inicial x 0 = −2 ,

a) Aplica el método de la Secante para aproximar la solución negativa con una


precisión de 4 cifras decimales significativas. ¿Qué error se comete? Considera un
valor inicial x óptimo para encontrar la raíz negativa.
1

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?

#Realiza el ejercicio en esta celda

https://sage-cum.unex.es:8015/home/GDGG22vfernandc/3/print 8/8

También podría gustarte