Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Curso 2022/23
1. Objetivos
El objetivo de esta práctica es implementar y aplicar métodos para derivar e integrar
funciones de manera numérica.
2. Derivación numérica
En este apartado nos ocupamos de la aproximación de la derivada de una función, com-
probando el error que se comete según la fórmula empleada para ello.
Empezaremos por definir la función cuya derivada aproximaremos:
Ejercicio 1.
Define en la ventana de comandos una función que corresponda a la función f (x)
anterior y otra que corresponda a su derivada f ′ (x).
Comprueba, por ejemplo, que f (2) = 6.8067624, f ′ (2) = 5.3971745.
1
Ejercicio 2.
Implementa una función de Python, con el nombre derivada_aprox_c2, para apro-
ximar la derivada de una función f (x) mediante diferencias centradas de orden 2:
f (x + h) − f (x − h)
f ′ (x) ≈
2h
Los datos de entrada y resultados serán:
Entrada: f : función a derivar
x: punto en el que se quiere obtener la derivada
h: tamaño de paso
Resultado: aproximación de f ′ (x)
A continuación, utiliza dicha función para obtener una aproximación de f ′ (2) con
h = 0.1, siendo f (x) la función definida en el ejercicio 1. Compara el valor obtenido con
el valor exacto de f ′ (2).
Ejercicio 3.
Implementa una función de Python, con el nombre derivada_aprox_c4, para apro-
ximar la derivada de una función f (x) mediante diferencias centradas de orden 4:
−f (x + 2h) + 8f (x + h) − 8f (x − h) + f (x − 2h)
f ′ (x) ≈
12h
Los datos de entrada y resultados serán los mismos que en el caso de la aproximación
de orden 2.
A continuación, utiliza dicha función para obtener una aproximación de f ′ (2) con
h = 0.1, siendo f (x) la función definida en el ejercicio 1. Compara el valor obtenido con
el valor exacto de f ′ (2). ¿Obtienes una mejor o peor aproximación que en el ejercicio 2?
Ejercicio 4.
Utiliza la función dibuja_error_derivada para hacer una gráfica del error en la
aproximación de f ′ (2), siendo f ′ (x) la función del ejercicio 1. Deberías obtener una gráfica
como la de la figura 1.
2
Figura 1: Error al aproximar f ′ (2), para distintos valores del tamaño de paso h.
3. Integración numérica
3.1. Función de la que calcularemos integrales definidas
En los siguientes apartados calcularemos integrales definidas de la siguiente función:
−x2
e 2
f (x) = √
2π
Se trata de la función de densidad de la distribución normal de media 0 y desviación
típica 1. Su integral en un intervalo [a, b] es de interés debido a que es la probabilidad de que
un valor que se distribuya según la normal(0,1) esté en dicho intervalo (aunque para nosotros
esto es solo una curiosidad que no tendremos en cuenta).
Además, esta función es interesante en el campo de la integración numérica debido a que
su primitiva no puede ser calculada por métodos elementales, lo cual hace que su integral en
un intervalo tenga que ser calculada, en general, forzosamente por métodos de cuadratura
numérica.
En el caso de las integrales impropias se sugerirá el uso de otras funciones más adelante.
Ejercicio 5.
3
Define en la ventana de comandos la función f (x) anterior. Comprueba que f (1) =
0.24197072.
Ejercicio 6.
Haz una gráfica de la función f (x) en el intervalo x ∈ [−10, 10]. Utiliza para ello la
función dibuja_funcion de la práctica 2. Deberías obtener una gráfica como la de la
Figura 2.
donde h = b−a m
, xi = a+(i−1)h, y m es el número de subintervalos en que se divide el intervalo
[a, b], de manera que en la fórmula intervienen todos los extremos de dichos subintervalos
más sus puntos medios. El número total de puntos, por tanto, en los que se evalúa la función
es 2m + 1.
En la implementación en Python de la regla, resulta más natural que el índice i en el
sumatorio vaya de 0 a m − 1, en vez de 1 a m. En consecuencia, la primera xi sería x0 en vez
de x1 , y la fórmula xi = a + (i − 1)h no es válida. Corrígela, teniendo en cuenta que:
4
x0 = a
x1 = a + h
x2 = a + 2h
..
.
Ejercicio 7.
Implementar una función (simpsoncomp) para calcular una integral mediante la regla
de Simpson compuesta. Los datos de entrada y resultados de la función simpsoncomp
serán:
Entrada: f : función f (x) a integrar
a, b: intervalo de integración
m: número de subintervalos
Resultado: valor obtenido de la integral
Ejercicio 8.
Desarrollar una función, llamada guasslegendre, que nos permita calcular integrales
mediante la fórmula de la cuadratura de Gauss-Legendre:
n
!
Z b
b−aX (b − a)xi + a + b
f (x)dx ≈ wi f ,
a 2 i=1 2
donde n es el número de puntos que se usan. Los nodos xi y los pesos wi se obtendrán
5
mediante la función puntosgaussleg, que se proporciona como material de la práctica.
Los datos de entrada y resultados de la función gausslegendre serán:
Entrada: f : función f (x) a integrar
a, b: intervalo de integración
n: número de puntos
Resultado: valor obtenido de la integral
Obsérvese que con sólo 8 puntos este método ha obtenido las mismas cifras exactas que
la regla de Simpson compuesta con 51 puntos (m = 25). Si la función a integrar fuera más
parecida a una función polinómica de bajo grado en el intervalo de integración, la exactitud
de Gauss-Legendre sería aún mayor.
No obstante, la cuadratura de Gauss-Legendre se debe usar con precaución con ciertas fun-
ciones, como se puede apreciar en el siguiente ejercicio. La baja precisión de Gauss-Legendre
en ese caso se debe a la naturaleza exponencial del integrando, que influye más cuanto más
ancho sea el intervalo de integración.
Ejercicio 9.
Calcular la siguiente integral mediante Gauss-Legendre:
Z 10 −x2
e 2
√ dx
−10 2π
El valor exacto de la integral (con 15 dígitos significativos) es 1, mientras que los
resultados que obtendremos serán:
n = 2: 0.000000460997634
n = 6: 0.216615160411421
n = 10: 0.778676989377783
n = 14: 0.968084428125310
n = 18: 0.997362717013644
n = 20: 0.999376549134695
6
3.4. Integrales impropias. Cuadratura de Gauss-Laguerre
La fórmula de la cuadratura de Gauss-Laguerre es:
n
Z +∞
e−ba X xi
−bx
e f (x)dx ≈ wi f +a ,
a b i=1 b
donde n es el número de puntos que se usan. Los nodos xi y los pesos wi se obtienen invocando
la función puntosgausslag, que se proporciona como material de la práctica.
Téngase en cuenta que, para aplicar esta cuadratura, se debe definir una función f (x) sin
incluir en ella el factor exponencial e−bx .
Ejercicio 10.
Implementar una función, llamada gausslaguerre, correspondiente a la fórmula de
cuadratura de Gauss-Laguerre. La función tendrá los siguientes datos de entrada y re-
sultados:
Entrada: f : función f (x) a integrar, sin la parte exponencial
a: extremo inferior de integración
b: parámetro de la exponencial
n: número de puntos
Resultado: valor obtenido de la integral
Ejercicio 11.
Calcular esta integral mediante Gauss-Laguerre:
Z +∞
1
dx
1 1 + x2
7
Observa que para poder calcularla debes usar la función
ex
f (x) =
1 + x2
El valor exacto de la integral (con 15 dígitos significativos) es 0.785398163397448,
y los resultados que debes obtener son:
n=2: 0.653534414928918
n=4: 0.716953571641194
n=6: 0.739518182903988
n=8: 0.751100324335989
n=10: 0.758099798525915
n=20: 0.772025867376112
En el ejercicio anterior, la baja exactitud del resultado se debe a que ha sido necesario
recurrir a una función (f ) con una exponencial en el numerador, la cual “domina” clara-
mente al denominador, que es “solo” polinómico. Se trata, por lo tanto, de una función con
un carácter marcadamente no polinómico, y no hay que olvidar que todas las fórmulas de
cuadratura de Gauss (de todos los tipos) son exactas cuando la f implicada es un polinomio
de hasta cierto grado. Cuanto “menos polinómica de bajo grado” sea f , más inexacta será la
aproximación dada por las fórmulas de cuadratura de Gauss.
Ejercicio 12.
Implementa en Python la función simpsoncomp_tolerancia, correspondiente al Al-
goritmo 1.
A continuación, calcula mediante dicha función la siguiente integral, empleando un
número inicial de 10 intervalos y una tolerancia de 10−12 :
Z 2 −x2
e 2
√ dx
−2 2π
El resultado que debemos obtener es:
8
Algoritmo 1: simpsoncomp_tolerancia
Entrada: f : función f (x) a integrar
a, b: intervalo de integración
m: número inicial de subintervalos
tol: tolerancia en el cálculo de la integral
Resultado: integral: valor obtenido de la integral
1 integral0 = simpsoncomp(f, a, b, m)
2 fin = 0
3 m = 2m
4 mientras fin = 0 hacer
5 integral = simpsoncomp(f, a, b, m)
6 si |integral − integral0| < tol entonces
7 fin = 1
8 si no
9 integral0 = integral
10 m = 2m
11 fin si
12 fin mientras
13 mostrar por pantalla el número de subintervalos usados para calcular la integral
Ejercicio 13.
Desarrolla una función, llamada gausslegendre_tolerancia, para el cálculo de una
integral con una tolerancia determinada, mediante la fórmula de Gauss-Legendre. La
función tendrá los siguientes datos de entrada y resultados:
Entrada: f : función f (x) a integrar
a, b: intervalo de integración
tol: tolerancia en el cálculo de la integral
Resultado: valor obtenido de la integral
9
El número puntos, n, será inicialmente 2 y se irá incrementando en 1 cada vez.
A continuación, utiliza la función que acabas de crear para calcular la siguiente inte-
gral, con una tolerancia de 10−12 :
Z 2 −x2 2
e
√ dx
−2 2π
Deberías obtener el siguiente resultado:
Integral calculada con 13 puntos
0.9544997361036593
Ejercicio 14.
Desarrolla una función, llamada gausslaguerre_tolerancia, para el cálculo de una
integral con una tolerancia determinada, mediante la fórmula de Gauss-Laguerre. La
función tendrá los siguientes datos de entrada y resultados:
Entrada: f : función f (x) a integrar
a: extremo inferior de integración
b: parámetro de la exponencial
tol: tolerancia en el cálculo de la integral
Resultado: valor obtenido de la integral
10