Anterior
Índice

Cálculo Passo-a-Passo de uma Decomposição de Frações Parciais

Continuação


O cálculo que realizamos, fornece o resultado desejado, mas tem uma falha séria: As equações foram manualmente montadas. Isso é inconveniente e facilita a ocorrência de erros, e não conduz a uma generalização útil. Nessa seção  exploramos um melhor algorítmo para escolher as equações.

 r:  1/(x^2*(x^2 + 1));
       1
-----------
2 2
x (x + 1)

Agora, informamos as três frações elementares que podem ocorrer na decomposição em frações parciais daquela expressão:

p1: a/x;
     a
-
x
p2: b/x^2;
    b
--
2
x
p3: (c*x + d)/(x^2 + 1);
    c x + d
-------
2
x + 1

A decomposição em frações parciais é a adição dessas três frações:

p1 + p2 + p3;
      c x + d   a   b
------- + - + --
2 x 2
x + 1 x

Para comparar os coeficientes do numerador desconhecido com o numerador da expressão dada, temos que reescrever aquela adição sobre um denominador comum:

ratsimp(%);
               3            2
(c + a) x + (d + b) x + a x + b
---------------------------------
4 2
x + x

Agora, acessamos o numerador dessa fração:

n: num(%);
              3            2
(c + a) x + (d + b) x + a x + b

isso é uma adição, mas precisamos transformar suas parcelas em uma lista. Para reescrever uma adição como uma lista de suas parcelas, temos que usar a função maplist:

 parcelas: maplist (lambda ([item ], item), %);
             3           2
[(c + a) x , (d + b) x , a x, b]

A seguinte expressão transforma a lista de termos em uma lista de equações. Para cada termo em "parcelas", o termo coeficiente é igualado ao coeficiente correspondente em r

 map(lambda ([parcelas], coeff(parcelas, x, hipow(parcelas, x)) = coeff(r, x, hipow(parcelas, x))),
parcelas);
   [c + a = 0, d + b = 0, a = 0, b = 1]

Que corresponde a um sistema de equações lineares. Podemos resolvê-lo com solve:

 solve(%, [a, b, c, d]);
    [[a = 0, b = 1, C = 0, d = - 1]]
 at(p1 + p2 + p3, first(%));
   1      1
-- - ------
2 2
x x + 1

O que aprendemos:



Anterior