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