Links

    Universidade de São Paulo

    Instituto de Matemática e Estatística

    LEÔNIDAS DE OLIVEIRA BRANDÃO
    DCC / IME / USP

    http://www.ime.usp.br/~leo

    Como calcular a forma fechada de qualquer série, desde que polinomial!

    Uma técnica muito simples (desconsiderando a dificuldade de se resolver um sistema linear) para se computar ``formas fechadas'' polinomiais de séries, é montar (e resolver) um sistema linear associado à série, de modo que o valor do polinômio no ponto k coincida com a série calculada até o inteiro k.

    [ Isto pode ser generalizado usando funções quaisquer (além das funções polinomiais xk). Por exemplo, se sabemos que a ``formas fechadas'' da série até o inteiro k é   a0 + a1ek + a2 seno(k) + ... + aL k cos( k ),   podemos escrever L+1 equações igualando a série e sua suposta ``formas fechadas''.]

    Vamos examinar com um pouco mais de cuidado esta técnica, apenas no caso de ``formas fechadas'' polinomiais. Seja

    , onde f(k)=alguma função com domínio nos naturais.

    Se


    para computarmos os coeficientes de P(.), basta escrevermos L+1 equações, impondo identidades do tipo . Por razões de simplicidade, tomaremos estas L+1 equações a partir de 0, ou seja, faremos, , para k entre 0 e L. Como, neste exemplo, P(0)=a0=0, devemos procurar apenas os valores para os coeficientes a0, a1 até aL.

    Observação: Se desconhecemos o valor L, devemos superestimá-lo, isto é tentar com valores grandes para L, de modo que os coeficientes de potência maior que o grau do polinômio efetivo serão 0.

    Passo 0 Compute , para (L é qualquer ``chute grande'')

    Passo 1 Resolva o sistema linear, (aqui vale a0=0 sempre)



    Para se resolver este sistema, pode-se usar qualquer programa computacional adequado, em particular, poderíamos nos utilizarmos de PARI-GP. A seguir são apresentados dois exemplos de utilização deste pacote, que deverão ser bem entendidos para se poder fazer o exercício proposto ao final.

    Matrizes no Pari-GP: Digite o exemplo abaixo no diretório C:\TRAB com o nome sist-l.txt.

    \\ --------------------------------------------------------------------\\
    \\ EXEMPLO: uso de matrizes, vetores e resolucao de sistemas lineares no
    \\          PARI-GP
    \\ Modo de usar este programa (sist-l.txt no diretorio C:\TRAB):
    \\      F:\LABMAT\GP\> gp < c:\trab\sist-l.txt
    \\ --------------------------------------------------------------------\\
    
    \\ define matriz A e matriz coluna b
    A=[1,-1,3; 0,1,2; 2,3,7];
    b=[6;0;3];
    
    print( Gauss(A,b) );
    \\ define vetor solucao, e confere resultado!
    x=Gauss( A,b );
    print("A x = b ?");
    print("A x = ",A*x);
    print("b =",b);
    \q

    Sistemas Lineares no PARI-GP: Digite o exemplo abaixo no diretório C:\TRAB com o nome pol2.txt.

    \\ --------------------------------------------------------------------\\
    \\ EXEMPLO: como listar os valores de um polinômio aplicado aos primeiros
    \\          naturais no PARI-GP
    \\ Modo de usar este programa (pol2.txt no diretorio C:\TRAB):
    \\      F:\LABMAT\GP\> gp < c:\trab\pol2.txt
    \\ --------------------------------------------------------------------\\
    
    Ng=4;
    x=[0,0,0,0,1];
    for (j=1,10, aux=0;for(k=0,Ng,aux=aux+x[k+1]*j^k);print("p(",j,")=",aux));
    \q

    Exercício: Tente obter as ``formas fechadas'' para as séries abaixo apresentadas, fazendo quatro arquivos .txt (um para cada série), com comando PARI-GP (vide os exemplos), que façam:

    • compute os coeficientes do polinômio;
    • imprima a verificação da solução do sistema linear (como no primeiro exemplo, o ...confere resultado!)
    • imprima a verificação de corretude do polinômio PARA A SÉRIE, considerando os 15 primeiros naturais (como equematizado abaixo)

          for( j=0,15, calcule_série_até_j_para_S; calcule_pol_em_j_para_aux;
               print1(j," Serie=",S,"P(",j,")=",aux))
          

    As séries são:



    Observação: Se chegou a conclusão que alguma das séries não pode ser escrita como um polinômio, apresente um CONTRA-EXEMPLO, isto é, SE o polinômio foi computado corretamente (para valores muito grande de L - indique o último que computou) e existe algum ponto , ,   apresente estes valores.

    Solução:  

    \\ Exemplo de program Pari-GP: 25/08/1997
    \\ --------------------------------------
    \\ Encontra "formas fechadas" para series que tenham "solucao" polinomial
    \\ Usa sistemas lineares
    \\  Se         S(k):=f(0)+f(1)+ ... +f(k)  e 
    \\   existem   L  e  P(j):=a_0 + a_1 j + a_2 j^2 +...+ a_L j^L, 
    \\   tais que  S(j)=P(j), para todo j natural
    \\                 
    \\  Entao       A x = b, onde x[i]=a_i,  b[i]=S(i)  e
    \\              _              _   _   _     _   _
    \\             |1 0 0   ... 0   | | a_0 |   | b_0 |
    \\             |1 1 1   ... 1   | | a_1 |   | b_1 |
    \\             |1 2 2^2 ... 2^L | | a_2 | = | b_2 |
    \\             |. . .           | | ... |   | ... |
    \\             |1 L L^2 ... L^L | | a_L |   | b_L |
    \\              -              -   -   -     -    -
    
    \\ Define a serie S(k)
       [ f(n) = n^2 ]:
     
    \\ "Chute" para o valor L => constroe matriz A[.,.]
       L = 10
    
       \\print(A):
       \\ No GP:  0^0=1
       \\ A=[ 1,0,0,  ...,0  ;
       \\     1,1,1,  ...,1  ; 
       \\     1,2,2^2,...,2^L; 
       \\     ...
       \\     1,L,L^2,...,L^L]:
    
    \\ Constroe vetor b => b[i] = f(0) + f(1) + ... + f(i)
       b = vector( L+1, x, sum(0, n=0, x-1, f(n) ) ):
       \\print(b):
    
    \\ Encontra os coeficientes do polinomio P(.)
       x=gauss(A,b): print():
       print("Coeficientes:",x):
    
    \\ Confere se a solucao encontrada coincide com os valores da serie
       print("Para conferir Resultado: Serie efetiva  x  Pol. Calculado "):
       print("       Serie  Polinomio"):
       s=0:
    
       for(j=1,10,
             s=s+f(j):
             print1("j=",j," | S=",s,"     "):
             aux=0:
             for(k=1,L+1,
                   aux=0:
                   for(k=1,L+1,
                         aux=aux+x[k]*j^(k-1)
                      ):
                   print(aux)
                 )
           ):
    
    \q