Está en la página 1de 10

Programación Para Ciencia y Tecnología (PPCT)

Práctica 4: Derivación e Integración


Numéricas

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:

f (x) = ex + 2−x + 2 cos x,

y también definiremos su derivada exacta, para poder calcular el error de la aproximación:

f ′ (x) = ex − 2−x ln 2 − 2 sen x.

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?

A continuación visualizaremos el error que se produce al aproximar la derivada de una fun-


ción cualquiera mediante aproximaciones de orden 2 y 4, para distintos valores del tamaño de
paso h. Para ello utilizaremos la función dibuja_error_derivada, que se proporciona como
material de la práctica, y que utiliza las funciones derivada_aprox_c2 y derivada_aprox_c4
que se pide implementar en los ejercicios anteriores.

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.

En la Figura 1 podemos ver que, para valores de h no muy pequeños, la aproximación


de orden 4 produce un error considerablemente menor que la de orden 2. Sin embargo, para
valores de h muy pequeños, ambas aproximaciones presentan un error grande, debido a la
cancelación de dígitos significativos.

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) = √

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.

Figura 2: Función f (x) a integrar.

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.

3.2. Regla de Simpson compuesta


La regla de Simpson compuesta permite calcular el valor aproximado de una integral
definida mediante la fórmula:
Z b m 
hX 
f (x)dx ≈ f (xi ) + 4f (xi + h2 ) + f (xi+1 ) ,
a 6 i=1

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

A continuación, utiliza la función simpsoncomp para calcular el valor de la integral:


Z 2 −x2
e 2
√ dx
−2 2π
El valor exacto de la integral anterior (con 15 dígitos significativos) es 0.954499736103642.
Al usar simpsoncomp con diferentes valores de m deberíamos obtener las siguientes
aproximaciones (se indican en negrita los dígitos que coinciden con los del resultado
exacto):
m = 10: 0.954497732488230
m = 25: 0.954499686621795
m = 100: 0.954499735911592
m = 1000: 0.954499736103622
m = 10000: 0.954499736103642

3.3. Cuadratura de Gauss-Legendre

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

A continuación, calcula, mediante la función gausslegendre, la misma integral que


en el ejercicio anterior. Los valores obtenidos deberán ser:
n = 2: 0.819295185055984
n = 8: 0.954499641677837
n = 12: 0.954499736103154
n = 15: 0.954499736103642

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

A continuación, calcula mediante dicha función la siguiente integral:


Z +∞
e−x cos x dx
0

El valor exacto de la integral (con 15 dígitos significativos) es 0.5, y los resultados


que debes obtener son:
n=2: 0.570208767055147
n=6: 0.499737502229138
n=10: 0.500000509799949
n=14: 0.499999999396099
n=18: 0.500000000000100

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.

3.5. Integrales con precisión mediante la regla de Simpson com-


puesta
En este apartado y los siguientes se aborda el cálculo de integrales con ciertas garantías
de precisión, para lo cual la estrategia consiste en calcular la integral aproximada repetidas
veces, cada vez con un mayor número de subintervalos/puntos, hasta que las aproximaciones
obtenidas apenas varíen.
El algoritmo 1 aplica esa estrategia en el caso de la regla de Simpson compuesta.

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

Integral calculada con 1280 subintervalos


0.9544997361036347

3.6. Integrales con precisión mediante Gauss-Legendre y Gauss-


Laguerre
En los ejercicios siguientes se pide adaptar el Algoritmo 1 para las fórmulas de Gauss-
Legendre y Gauss-Laguerre.

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

La función será muy similar a simpsoncomp_tolerancia, con las siguientes diferen-


cias:

9
El número puntos, n, será inicialmente 2 y se irá incrementando en 1 cada vez.

El número de puntos no puede superar 20 (la función puntosgaussleg está limitada


a 20 puntos). Si se superan los 20 puntos sin haber alcanzado la tolerancia pedida,
se deberá lanzar una excepción con un mensaje de error.

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

Respecto al número de puntos n, se tendrán en cuenta las mismas consideraciones


que en el ejercicio anterior, por lo que esta función será casi idéntica a la del ejercicio
anterior.
A continuación, utiliza la función gausslaguerre_tolerancia para calcular la si-
guiente integral con una tolerancia de 10−12 :
Z +∞
e−x cos x dx
0

Deberíamos obtener el siguiente resultado:


Integral calculada con 19 puntos
0.5000000000002962

10

También podría gustarte