• Nenhum resultado encontrado

Aproximação de funções de Bessel

N/A
N/A
Protected

Academic year: 2021

Share "Aproximação de funções de Bessel"

Copied!
5
0
0

Texto

(1)

Aproximação de funções de Bessel

Gonzalo Travieso 2013-04-05

Sumário

1 Integração numérica 1 1.1 Integral definida . . . 1 1.2 Regra do trapézio . . . 1 1.3 Número de intervalos . . . 2 1.4 Algoritmo . . . 3 2 Funções de Bessel 4 3 Trabalho a entregar 4

1

Integração numérica

1.1 Integral definida

Em diversas situações, a solução de um problema pode ser expressa através de uma integral definida

Z b

a

f (t)dt.

Em alguns casos, o integrando f (t) é suficientemente simples para que a in-tegral possa ser calculada analiticamente, e nesses casos temos um resultado exato.

Infelizmente, com frequência a forma de f (t) é suficientemente complexa para impedir o cálculo analítico do resultado. Nestes casos, precisamos ava-liar uma aproximação numérica.

(2)

1.2 Regra do trapézio

A integral definida pode ser expressa como um limite de uma somatória Z b a f (t)dt = lim ∆t→0 X f (a + i∆t)∆t

para valores de i inteiros tais que a ≤ a + i∆t ≤ b. Dois problemas aparecem imediatamente se tentarmos avaliar a integral através desse limite:

• No limite ∆t → 0, o número de pontos onde a função deve ser avaliada é infinito. Isto quer dizer que um programa não terminaria a sua execução.

• Quando ∆t é muito pequeno, f (t)∆t é muito pequeno, e a limitação de precisão na representação de números de ponto flutuante irá gerar erros no processo de acumulação dos valores na somatória.

Portanto, precisamos trabalhar com um valor de ∆t suficientemente pequeno, para termos uma boa aproximação, mas suficientemente grande, para evitar-mos erros de precisão e muita demora na execução. Para isso, é importante usar uma boa aproximação para o cálculo discreto da somatória.

Existem diversas formas de fazer isso (veja qualquer livro de cálculo nu-mérico). Aqui apresentamos apenas uma que é relativamente simples e efi-ciente, conhecida como regra do trapézio.

Em primeiro lugar, dividimos o intervalo [a, b] de integração em N peda-ços, cada um de tamanho h = (b−a)/N . Os N +1 valores de t que delimitam esses pedaços serão to = a, t1= a+h, t2= a+ 2h, . . . , ti= a+ih, . . . , tN = b.

Calculamos diretamente os valores de f nesses pontos e entre dois valores de i consecutivos, aproximamos f por uma reta. Com essa aproximação, o valor aproximado da integral entre ti e ti+1 é a área do trapézio formado

pelos pontos (ti, 0), (ti+1, 0), (ti+1, f (ti+1)), (ti, f (ti)) :

Z ti+1

ti

≈ h

2[f (ti) + f (ti+1)].

Para calcular a aproximação para o valor total da integral, basta então somar todos esses intervalos:

Z b a f (t)dt ≈ h 1 2f (t0) + f (t1) + f (t2) + · · · + f (tN −1) + 1 2f (tN)  .

(3)

1.3 Número de intervalos

Resta agora definir qual seria um valor apropriado de número de intevalos a usar. Não existe uma escolha válida sempre, pois o valor apropriado depende da função a integrar e do intervalo de integração. Felizmente, nos casos em que a avaliação do integrando f (t) não é muito custosa, isso pode ser decidido automaticamente aproveitando uma propriedade da regra do trapézio.

Note que, na regra do trapézio, deixando de lado os pontos extremos t0 e tN, todos os valores de f (t) têm o mesmo coeficiente, os ti para i par

são separados entre si por 2h, o mesmo acontecendo para os i ímpares. Isso quer dizer que, se temos uma aproximação com N intervalos de tamanho h, podemos construir uma nova aproximação com 2N intervalos de tamanho h/2 reaproveitando as avaliações de função já realizadas. Basta para isso realizar o cálculo de novos N valores a intervalos h, mas deslocados de h/2 em relação ao valores anteriores. Portanto, vamos sucessivamente dobrando o número de pontos até atingir uma aproximação adequada.

Quando parar de calcular novas aproximações? Suponha que y é o valor exato da integral. Queremos calcular uma valor aproximado ˜y que seja su-ficientemente próximo de y. O erro absoluto da aproximação é |y − ˜y|, mas muitas vezes estamos mais interessados no erro relativo |y − ˜y|/|y|. Podemos definir uma precisão desejada , que deve ser um valor real positivo pequeno, e estabelecer que o erro absoluto (ou relativo) deve ser menor que , o que nos leva à expressão |y − ˜y| <  (ou |y − ˜y| < |y| para o erro relativo). O único problema dessa expressão é que o valor de y é desconhecido, sendo justamente o que queremos calcular! A saída é usarmos o fato de que já temos uma aproximação para y, e estamos iterativamente calculando uma nova aproximação. Portanto, sendo ˜y a aproximação já calculada e ˜y0 a nova aproximação, considerando os novos pontos adicionados, queremos que |˜y − ˜y0| <  se estamos interessados no erro absoluto ou |˜y − ˜y0| < |˜y| se nos interessamos pelo erro relativo.

1.4 Algoritmo

Resumindo o apresentado anteriormente, ficamos com o seguinte algoritmo para o cálculo da integral:

1. Inicialize uma variável total, com o valor de (b − a)[f (a) + f (b)]/2. 2. Inicialize uma variável m em 1.

(4)

4. Calcule o tamanho atual do intervalo h = (b − a)/m.

5. Faça uma somatória de todos os valores de f (t) para os valores de t iguais a a + h/2, a + h/2 + h, a + h/2 + 2h, . . . que sejam menores que b. Seja o resultado disto s.

6. Atualize o valor de total para a média entre o total atual e sh. 7. Duplique o valor de m.

8. Repita os ítems 3 a 7 até que a diferença entre total e total_anterior seja compatível com a precisão desejada.

Para algumas funções mal comportadas, o processo acima pode não convergir para a precisão desejada, e o algoritmo entraria numa repetição infinita. Uma forma de evitar isso é contar o número de repetições realizadas e terminar depois de um limite máximo. Para todos os efeitos práticos, 30 repetições são já um número grande (lembre-se que a cada repetição dobramos o número de pontos avaliados).

2

Funções de Bessel

As funções de Bessel aparecem ao se procurar soluções para equações dife-renciais da forma x2d 2y dx2 + x dy dx + (x 2− n2)y = 0,

por exemplo na solução de equações de Laplace ou Helmholtz em coordena-das esféricas ou cilíndricas.

Para valores de n inteiros e não negativos, temos a n-ésima função J de Bessel definida como:

Jn(x) = 1 π Z π 0 cos(nt − x sin t) dt.

Essa integral não pode ser avaliada analiticamente, e precisamos uma aproximação numérica.

3

Trabalho a entregar

Juntamente com este texto, você recebeu alguns arquivos. Entre estes, existe o arquivo bessel.cpp. Nesse arquivo, você deve inserir código (no local indicado) para calcular a n-ésima função J de Bessel para um valor de x. O

(5)

primeiro parâmetro é o valor de n, o segundo parâmetro é o ponto x onde a função deve ser avaliada e o terceiro parâmetro é a precisão (erro relativo máximo)  desejada.

Use o método iterativo descrito acima, com a = 0, b = π e f (t) = cos(nt − x sin t) para calcular a integral, depois divida o resultado por π para ter o valor da função Jn(x), que deve ser retornado. Como os testes serão feitos com precisão de 10−8, será necessário realizar as operações usando double. Use erros absolutos para detectar o término (erros relativos geram problemas quando o valor da função é muito próximo de zero). Dica: Um valor de π com toda a precisão de um double pode ser encontrando na constante M_PI, definida no header <cmath>, que você também precisará incluir para usar sin e cos.

Quando você tiver algum código na função pode compilá-lo e testá-lo usando o comando make:

make make test

Se tudo estiver correto, será escrito após o make test Running 1 test case...

*** No errors detected

Se houver erros, pode haver a impressão de um grande número de men-sagens de erro.

Se você desejar desenvolver e testar o código em seu computador, lembre-se que você irá precisar de um compilador atual de C++ (recomendado: GCC versão 4.6 ou superior) e das bibliotecas Boost (http://boost.org). Nas dis-tribuições Linux, os sistemas de gerenciamento de pacotes (apt-get, emerge, etc.) dispõe de pacotes para a instalação (procure por boost, libboost ou libboost-all). Você também pode simplesmente usar os computadores do laboratório de ensino, diretamente na sala ou por acesso remoto.

Você deve entregar, pelo Moodle da disciplina, o arquivo bessel.cpp com sua implementação da função. Nenhum outro arquivo deve ser alterado ou entregue.

Referências

Documentos relacionados

A participação foi observada durante todas as fases do roadmap (Alinhamento, Prova de Conceito, Piloto e Expansão), promovendo a utilização do sistema implementado e a

O canabidiol é um composto presente na planta Cannabis sativa, que promove diversos benefícios à saúde humana, como por exemplo sobre as doenças neurológicas como epilepsia,

Neste capítulo, será apresentada a Gestão Pública no município de Telêmaco Borba e a Instituição Privada de Ensino, onde será descrito como ocorre à relação entre

Local de realização da avaliação: Centro de Aperfeiçoamento dos Profissionais da Educação - EAPE , endereço : SGAS 907 - Brasília/DF. Estamos à disposição

Ademais, apontando um tipo de unidade nos trabalhos coligidos, nota- se que praticamente todos tendem a afirmar, calcados em diferentes bases teóricas, que nas páginas de Abelaira

Este artigo está dividido em três partes: na primeira parte descrevo de forma sumária sobre a importância do museu como instrumento para construção do conhecimento, destaco

v) por conseguinte, desenvolveu-se uma aproximação semi-paramétrica decompondo o problema de estimação em três partes: (1) a transformação das vazões anuais em cada lo-

Silva e Márquez Romero, no prelo), seleccionei apenas os contextos com datas provenientes de amostras recolhidas no interior de fossos (dado que frequentemente não há garantia