Práctica 3 - Unican.es

Anuncio
PRÁCTICAS DE CÁLCULO NUMÉRICO III
PRÁCTICA 3
Página web de la asignatura: http://personales.unican.es/segurajj/cniii.html
El objetivo de esta práctica es implementar la reglas de integración de Gauss-Legendre, Gauss-Hermite
y Gauss-Laguerre, calculando los nodos y los pesos de la cuadratura mediante el algoritmo de GolubWelsch.
Para calcular los nodos y los pesos, deberemos diagonalizar la matriz simétrica de Jacobi asociada
a cada una de las cuadraturas gaussianas. Para ello, utilizaremos el comando eig de Matlab, que nos
proporciona los valores y vectores propios (teclear “help eig” para tener información sobre este comando).
Como ejemplo ilustrativo de la construcción de las cuadraturas, consideremos la cuadratura de
2
Gauss-Hermite, que es la correspondiente a la función peso w(x) = e−x en el intervalo (−∞, +∞). Los
polinomios ortogonales asociados a este peso son los polinomios de Hermite, que verifican:
Hn+1 (x) = 2xHn (x) − 2nHn−1 (x)
y H0 (x) = 1, H1 (x) = 2x.
La matriz (simétrica) de Jacobi de tamaño N es entonces



J =


0 α1 0
...
α1 0
α2 0
..
.. ..
.
. ...
.
0
αN −1
...
...





αN −1 
0
p
donde αi = i/2. El primer paso para construir la regla de cuadratura de Gauss-Hermite con N nodos
será construir la matriz de Jacobi de tamaño N . Para ello, escribiremos el programa JacobiH.m con
la sintaxis:
function J=JacobiH(N)
que nos dará como output la matriz de Jacobi de tamaño N .
Los nodos y pesos los obtendremos mediante el algoritmo de Golub-Welsch, que implementaremos
en el programa GW.m, cuya primera linea será
function [x,w]=GW(mu0,J)
siendo x el vector de los nodos y w el de los pesos.
Como sabemos, los dos únicos datos de entrada que precisa el algoritmo de Golub-Welsch son el
momento de orden cero (mu0), es decir:
Z b
µ0 =
w(x)dx
a
√
que para el caso de la cuadratura de Gauss-Hermite es µ0 = π, junto con la matriz de Jacobi J. En
GW.m utilizaremos el comando eig de Matlab para obtener los valores y vectores propios.
Finalmente, construiremos el programa GaussH.m que implementará la cuadratura de GaussHermite para evaluar integrales de la forma
Z +∞
−∞
En la primera linea escribiremos:
2
f (x)e−x dx .
function I0=GaussH(f,N)
el resultado numérico de la integración será I0. Las entradas son f, la función a integrar (que introduciremos como cadena alfanumérica), y N, el número de nodos de la integración.
Para la cuadratura de Gauss-Legendre (w(x) = 1 en [−1, 1]) procederemos de similar forma, programando en JacobiL.m la construcción de la matriz de Jacobi y en GaussL.m la aplicación de la regla
de cuadratura.
Recordemos la relación de recurrencia para los polinomios de Legendre:
(n + 1)Pn+1 (x) = (2n + 1)xPn (x) − nPn−1 (x) n = 1, 2
P0 (x) = 1, P1 (x) = x
Para la integración de Gauss-Laguerre, cuyo peso depende de un parámetro (w(x) = xα e−x en
[0, +∞), α > −1) deberemos considerar este parámetro (que fijaremos al valor que más nos convenga)
como entrada en la función que construye la matriz de Jacobi (JacobiLa.m)y en la que implementa la
regla de cuadratura (GaussLa.m). Utilizaremos la siguiente sintaxis:
function J=JacobiLa(alpha,N)
y
function I0=GaussLa(f,alpha,N)
(α)
Recordemos la recurrencia para los polinomios de Laguerre Ln (x):
(α)
(α)
(α)
(n + 1)Ln+1 (x) = (−x + 2n + α + 1)Ln (x) − (n + α)Ln−1 (x) , n = 1, 2, ...
(α)
(α)
L0 (x) = 1 , L1 (x) = −x + α + 1
1.
Actividades
1. En un fichero matlab que llamaremos practi3.m, evaluaremos las siguientes integrales con la mayor
precisión relativa posible utilizando en cada caso el mı́nimo número de nodos posible (pero sin
separar las integrales en suma de integrales):
a)
b)
c)
d)
e)
R3
14
6
−2 (x − 7x )dx
R +∞ 18
14
2 −4(x−2)2 dx
−∞ (x + x − 6x )e
R +∞ 10
(x + 5x4 )e−x dx
0
R +∞ −1/2 10
x
(x + 5x4 + 20)e−x dx
0
R +∞ 10
(x + 5x4 + 20)e−x dx
2
En pantalla deberemos ver el resultado numérico ası́ como una descripción breve del motivo de la
elección de cada método y del número de nodos.
2. Sabemos que las cuadraturas gaussianas (para un peso w(x) en [a, b]) con n nodos verifican que
Z b
f (x)w(x)dx =
a
n
X
wi f (xi ) + γ
i=1
f (2n) (ζ)
, ζ ∈ (a, b)
(2n)!
Encontrar numéricamente γ en los siguientes casos:
a) Cuadratura de Gauss-Legendre con 10 nodos
b) Cuadratura de Gauss-Hermite con 10 nodos
1
3. Evaluar la integral −1
cos(cos(x))dx con una precisión relativa mejor que 10−12 , comparando
integraciones gaussianas con un número creciente de nodos hasta alcanzar la precisión requerida.
R
Descargar