segunda-feira, 7 de outubro de 2019

Calculando uma integral com inttrap e intsplin


Muitos problemas requerem o cálculo de integrais definidas em um intervalo definido $(a,b)$. Algumas vezes esse cálculo é bem simples, em outros uma solução analítica não é possível. Se a função for contínua poderemos usar os comandos inttrap e intsplin do Scilab. O inttrap usa a regra dos trapézios repetida e é computacionalmente mais simples e menos preciso que o intsplin.

Vejamos um exemplo simples. A integral da função $y(t) = sin( \pi t)$ no intervalo $(0, 1)$ resulta no valor $\frac{2}{\pi}$. Temos que definir o passo do tempo $t$. Podemos, por exemplo, fazer o passo igual a $1/10$: t = 0:0.1:1, código Scilab é:

clc;
t = 0:0.1:1;
y = sin(%pi * t);
Inty1 = inttrap(t,y);
Inty2 = intsplin(t,y);
Intt = 2/%pi;
erro1 = 100*abs(Inty1 - Intt)/Intt;
erro2 = 100*abs(Inty2 - Intt)/Intt;
disp([Inty1, erro1, Inty2, erro2]);

Resultando em:
 0.6313752    0.8238231    0.6366199    0.0000138 

Claramente, o resultado que obtemos com o comando intsplin é muito superior. Naturalmente, se o passo que adotamos para o "tempo" for reduzido (ex: 0,05), os erros serão ainda menores. Um desafio -  calcular a integral abaixo:
\[ \int_0^{\infty} \frac{sin(\pi t)}{\pi t} dt\]
Obs: existem dois problemas no cálculo numérico acima: a divisão por zero e o "infinito" na integral. Como contornar esses problemas?

Nenhum comentário:

Postar um comentário