segunda-feira, 18 de novembro de 2019

Integração de Adam-Bashforth

Untitled

Integração por Adam BashForth

A ideia inicial desse documento é descrever todo o cálculo por trás da técnica de Adam-Bashforth. Inicialmente, o que a gente tem, considerando o caso de uma única dimenção, é algo da forma:
com
Para determinação da variável em questão em um determinando instante de tempo n + s, é algo da forma:
Até o presente momento a gente não fez nada demais. O que ocorre na integração de Adam-Bashforth é simplesmente aproximar a função por um polinômio de Lagrange.
Agora você deve ter falado "eita, caralho! eu nem sei que porra é essa". Então vamos direto ao ponto.
Seja um conjunto de s pontos, tais que:
  • ;
  • ;
  • ...; e
O polinômio de Lagrange é dado pela combinação linear:
em que:
Resultando numa expressão gigantesca:
De maneira mais direta, essa equação acima nada mais é do que a combinação linear de vários polinômios de graus s-1.
Dito isto, vamos voltar ao problema original, vamos aproximar o integrando por um polinômio de Lagrange. Sendo assim, tem-se que:
Trabalhando apenas com a integral monstruosa do lado direito da equação acima, tem-se que:
Ou seja, por transformações conseguimos transformar uma integral grande em dois grandes termos:
  1. ; e
Olhando essa nova integral agora, a gente pode deixar ela mais simplificada. O passo de integração entre e é h. Dito isto, a gente consegue reescrever a integral:
Vamos fazer uma alteração do integrando de forma a deixar o sistema mais simplificado possível. Seja
Com isso:
  • No integrando inferior, ou seja, quando , tem-se que: ;
  • No integrando superior, ou seja, quando , tem-se que: ; e
  • A derivação é tal que
Assim, reescrevendo a integral, tem-se que:
Em resumo, o que se tem ao final das contas é algo da forma:
Parece que ficou infinitamente pior. Mas vamos encontrar os termos dos produtórios para um caso da vida real.
Considere o caso em que s = 2, ou seja, serão tomados dois pontos apenas. Sendo assim, vamos por partes.
  1. Olhando o produtório dentro da integral e o termo com , tem-se que o vai variar de 0 até s-1 (que no caso é 2-1 = 1). Assim, tem-se que:
  • Para , não se tem o termo :
  • Integrando este sistema entre 0 e 1, tem-se que:
  • Olhando o seguinte produtório, tem-se que:
  • No caso em que , o único termo do somátorio que entra para a multiplicação é:
  • Assim, a primeira parcela a ser considerada no somatório dos valores é:
  • Para , não se temo termo :
  • Integrando este sistema entre 0 e 1, tem-se que:
  • Olhando o seguinte produtório, tem-se que:
  • No caso em que , o único termo do somátorio que entra para a multiplicação é:
  • Assim, a primeira parcela a ser considerada no somatório dos valores é:
Assim:
Resumindo, tem-se que:
O processo pode e deve ser utizado para a situação em que se deseja mais termos (por exemplo, ). Demadaria obviamente um maior número de operações matemáticas para se chegar, de forma resumida, em números que satisfaçam os parâmetros multiplicativos para os parâmetros de cálculo geral.
O programa abaixo serve para se encontrar os parâmetros multiplicativos do sistema para qualer ordem.
clear all; close all; clc;
% Variável a ser integrada.
syms gamma h
for s = 1:8;
% % Defino a ordem a ser integrada.
% s = 1;
% Análise apenas do produtório dentro da integral e respectiva integração.
% ========================================================================
for phi = 0:(s-1)
produto = 1;
for i = 0:(s-1)
if (i == phi)
else
produto = produto * h * ((s - 1 - i) + gamma);
end
end
INTEGRAL(phi + 1) = int(produto, gamma, [0 1]);
clear produto;
end
% Análise do produtório dos tempo.
% ================================
for phi = 0:(s-1)
produto = 1;
for i = 0:(s-1)
if (i == phi)
else
produto = produto * 1/(h*(phi - i));
end
end
PRODUTO_TEMPO(phi + 1) = produto;
clear produto;
end
% Encontrando os termos da para integração final.
% ===============================================
word = ['Termos multiplicadores p/ s = ', num2str(s)];
disp(word);
disp('-------------------------------');
disp(' ');
for phi = 0:(s-1)
numero = double(PRODUTO_TEMPO(phi+1) * INTEGRAL(phi+1));
palavra = ['f(x(t_n + ', num2str(phi), '), t_n + ',...
num2str(phi), ') = ', num2str(numero)];
disp(palavra);
end
disp(' ');
disp(' ');
clear PRODUTO_TEMPO
clear INTEGRAL
end
Termos multiplicadores p/ s = 1
-------------------------------
f(x(t_n + 0), t_n + 0) = 1
Termos multiplicadores p/ s = 2
-------------------------------
f(x(t_n + 0), t_n + 0) = -0.5
f(x(t_n + 1), t_n + 1) = 1.5
Termos multiplicadores p/ s = 3
-------------------------------
f(x(t_n + 0), t_n + 0) = 0.41667
f(x(t_n + 1), t_n + 1) = -1.3333
f(x(t_n + 2), t_n + 2) = 1.9167
Termos multiplicadores p/ s = 4
-------------------------------
f(x(t_n + 0), t_n + 0) = -0.375
f(x(t_n + 1), t_n + 1) = 1.5417
f(x(t_n + 2), t_n + 2) = -2.4583
f(x(t_n + 3), t_n + 3) = 2.2917
Termos multiplicadores p/ s = 5
-------------------------------
f(x(t_n + 0), t_n + 0) = 0.34861
f(x(t_n + 1), t_n + 1) = -1.7694
f(x(t_n + 2), t_n + 2) = 3.6333
f(x(t_n + 3), t_n + 3) = -3.8528
f(x(t_n + 4), t_n + 4) = 2.6403
Termos multiplicadores p/ s = 6
-------------------------------
f(x(t_n + 0), t_n + 0) = -0.32986
f(x(t_n + 1), t_n + 1) = 1.9979
f(x(t_n + 2), t_n + 2) = -5.0681
f(x(t_n + 3), t_n + 3) = 6.9319
f(x(t_n + 4), t_n + 4) = -5.5021
f(x(t_n + 5), t_n + 5) = 2.9701
Termos multiplicadores p/ s = 7
-------------------------------
f(x(t_n + 0), t_n + 0) = 0.31559
f(x(t_n + 1), t_n + 1) = -2.2234
f(x(t_n + 2), t_n + 2) = 6.7318
f(x(t_n + 3), t_n + 3) = -11.3799
f(x(t_n + 4), t_n + 4) = 11.6658
f(x(t_n + 5), t_n + 5) = -7.3956
f(x(t_n + 6), t_n + 6) = 3.2857
Termos multiplicadores p/ s = 8
-------------------------------
f(x(t_n + 0), t_n + 0) = -0.30422
f(x(t_n + 1), t_n + 1) = 2.4452
f(x(t_n + 2), t_n + 2) = -8.6121
f(x(t_n + 3), t_n + 3) = 17.3797
f(x(t_n + 4), t_n + 4) = -22.0278
f(x(t_n + 5), t_n + 5) = 18.0545
f(x(t_n + 6), t_n + 6) = -9.5252
f(x(t_n + 7), t_n + 7) = 3.59