1 Polinômios de Legendre 2 Quadratura de Gauss-Legendre

Propaganda
UFES - CENTRO TECNOLÓGICO
DEPARTAMENTO DE INFORMÁTICA
Prof. Thomas W. Rauber
1o Trabalho de Cálculo Numérico 2008/2
Data de entrega: veja www.inf.ufes.br/~thomas
Integração Numérica usando Quadratura de Gauss-Legendre.
Linguagem de Programação para Implementação
Eng. Mecânica: Octave
Grupo de até dois alunos
Problema: O objetivo do trabalho é o cálculo do integral de uma função em um intervalo [a, b], usando a
Quadratura de Gauss-Legendre.
1
Polinômios de Legendre
A primeira parte do trabalho consiste em obter os polinômios de Legendre. Com a inicialização L0 (x) = 1 e L1 (x) =
x o polinômio de Legendre define-se
como Ln (x) = n1 [(2n − 1) · x · Ln−1 (x) − (n − 1)Ln−2 (x)],
Pn recursivamente
k
resultando na forma Ln (x) = k=0 ak,n x , com os coeficientes ak,n definidos como a0,n = 1−n
n a0,n−2 , ak,n =
1−n
2n−1
2n−1
2n−1
a
+
a
para
k
=
1,
.
.
.
,
n
−
2
e
a
=
a
,
a
=
a
.
k,n−2
k−1,n−1
n−1,n
n−2,n−1
n,n
n−1,n−1
n
n
n
n
Deve-se para cada n = 0, . . . , nmax gerar os coeficientes e colocá-las na (n + 1)-ésima linha de uma matriz de
dimensão (nmax + 1) × (nmax + 1) (o 1o ı́ndice em Octave é 1 e não 0!).
Programe uma função em Octave (não Matlab) que retorna a matriz de coeficientes de Legendre. O único
µ 1 0 0 0¶
0
1 0 0
parâmetro de entrada é nmax . Ajuda: A matriz com nmax = 3 por exemplo é − 21 0 32 0 .
0 − 32 0
5
2
Com os coeficientes ak,n , k = 0, . . . , n de Ln (x), armazenados na (n + 1)-ésima linha da matriz, pode-se calcular
o valor Ln (x) para qualquer argumento x. Faça uma função que recebe como entradas a matriz de coeficientes, o
grau n e o argumento x e retorna o valor calculado. A função deve aceitar também o argumento x em forma de
vetor o retornar o resultado em outro vetor, em que cada componente é o valor correspondente da componente do
vetor de entrada. Por exemplo a chamada polLegendre(C,3,[-0.5,0,0.5]) deve retornar [ 0.43750 0.00000
-0.43750 ], sendo polLegendre o nome da função que calcula Ln (x), C a matriz de coeficientes, n = 3 e
x = −0.5 : 0.5 : 0.5.
Visualização: Com a disponibilidade de Ln (x) é possı́vel desenhar o polinômio de Legendre. Use a função plot
do Octave para visualizar L0 (x) a L5 (x) no mesmo desenho.
2
2.1
Quadratura de Gauss-Legendre
Obtenção das abscissas ti e pesos Ai
Para o cálculo do integral pelo Quadratura de Gauss-Legendre será necessário ter a tabela das abscissas ti e pesos
Ai , i = 1, . . . , n. A geração (e exibição) dessa tabela (até nmax = 15) tem que ser automática. Para tal precisa-se
uma função que, dado um vetor de coeficientes de um polinômio retorna as raı́zes do mesmo, pois as abscissas ti
procuradas são as raı́zes de Li (x).
Em Octave pode-se usar a função roots([ an an−1 . . . a0 ]). Portanto, tem que pegar a (n + 1)-ésima
linha da matriz dos coeficientes, espelhá-la, submeté-la a função roots e finalmente ordenar o resultado em
ordem ascendente. Ajuda: Para obter os coeficientes tn basta executar t=sort(roots(fliplr(C(n+1,1:n+1))));.
Guarde os coeficientes para cada grau em uma linha de uma matriz (como no caso dos coeficientes do polinômio
de Legendre).
1
Após a obtenção das abscissas tn o cálculo dos

1
1
1
 t1
t
t
2
3
 2
2
2
 t1
t
t
2
3

 ..
..
..
 .
.
.
 n−2 n−2
 t1
t2
t3n−2
tn−1
t2n−1 t3n−1
1
ou pelo método de Rybicki Ai =
2.2
2
(1−t2i )[L0n (ti )]2
pesos An pode ser feito pela resolução do sistema linear


 
2
...
1
A1
0+1
...
tn 

 
0


 A2  
2
...
t2n 



  A3   2+1 

=
..  
..

...
... 
.
. 





2



 An−1
. . . tn−2
(n−1)+1
n
An
0
. . . tn−1
n
já que a derivada do polinômio de Legendre é fácil de obter.
Cálculo da Integral
Finalmente, com a disponibilidade das tabelas das abscissas e coeficientes pode-se calcular a integral de uma função
através da técnica de integração de Gauss-Legendre. Faça uma função que recebe como parâmetros uma função e
o seu argumento x, os dois limites de integração a a b, o número de pontos + 1 n e as tabelas A e T , e calcula a
integral. Exemplo e ajuda:
function IGL = integralGaussLegendre( func, x, a, b, n, T, A )
... func(...);
endfunction
function f = myfunc( x )
f = exp(x) - sin(x);
endfunction
integralGaussLegendre( @myfunc, x, 0, 2, 1, T, A );
2.3
Erro de Integração
Finalmente crie um gráfico que mostra o erro de integração em função do número n de pontos usados. Para
determinar o erro, precisa calcular primeiro o valor exato da integral como F(b)-F(a), conhecendo a primitiva F(x)
de f(x). Use http://integrals.wolfram.com para integrar analiticamente funções da sua escolha.
Última atualização: 15 de novembro de 2008, 11:51 Bom trabalho!
2
Download