• Nenhum resultado encontrado

3.2 O Algoritmo de Hermite

3.2.3 Versão Linear do Algoritmo de Hermite

Uma última variante do algoritmo de Hermite é fornecida a seguir e é devida a D. Mack [22]. Nela, não precisamos calcular nem a decomposição em frações parciais do integrando, nem, a priori a fatoração livre de quadrados de seu denominador (esta última sendo computada ao longo do processo).

Como estamos trabalhando sobre um corpo K, podemos supor que o denomi- nador � da função � é um polinômio primitivo. Como nos algoritmos de fatoração

livre de quadrados, calculamos �= mdc(�,�) e �* = �/�. Se grau(�) = 0,

então � é livre de quadrados, senão, como �= �⊗*⊗2 por2.5, �⊗′ = �⊗2 2 pela

Proposição 2.2.2, onde �2 é dado por (2.9) e �1 = �*/�⊗* pela Proposição 2.2.1,

temos *⊗′ ⊗ = *⊗2 2 ⊗ = *⊗2 2 ⊗*⊗2 = * ⊗*2 = �12 ∈ K[�]. (3.8)

Além disso, como consequência da Proposição2.2.1, mdc(�1,�) = 1, e mdc(�2,�⊗*) =

1 pela Proposição 2.2.2, o que implica que mdc ︃ *⊗′ ,� ⊗* ︃ = mdc(�12,�⊗*) = 1.

Portanto, podemos utilizar o algoritmo de Euclides estendido para encontrar

à,á ∈ K[�] tais que �= à ︃ ⊗ *⊗′ ⊗ ︃ + á�⊗*.

Dividindo-se ambos os lados por � = �*= �

1⊗*⊗, temos = ⊗ à�⊗′ ⊗2 + á 1.

Adicionando e subtraindo à/�do lado direito, temos

= ︃ à⊗ ⊗ à�⊗′ ⊗2 ︃ + á ⊗ �1à1.

Finalmente, integrando ambos os lados, temos

= à ⊗ + ︁ á ⊗ � 1à1. (3.9)

Como �1= (�12)�23≤ ≤ ≤ �mm⊗1, o integrando foi reduzido a um cujo denominador

possui fatoração livre de quadrados com no máximo �⊗1 expoentes diferentes, ao invés de � como no início do processo. Aplicando recursivamente o método para integral do lado direito da fórmula (3.9), terminamos o processo em no máximo

� ⊗ 1 passos, quando teremos um denominador livre de quadrados. Por causa

do algoritmo de Hermite.

Notamos que uma melhoria pode ser feita à versão linear do método de Hermite. Podemos calcular os parâmetros do próximo passo a partir dos atuais. Seja �/� o integrando atual, com

�= á ⊗ �1à= á ⊗ * ⊗*à ′ e �= �1= �1232≤ ≤ ≤ �m⊗1m . Temos que * = �1= �123≤ ≤ ≤ �m = �*,

ou seja �* permanece o mesmo ao longo da redução. Por outro lado,

= �324≤ ≤ ≤ �mm⊗2 = �⊗2,

o que, de maneira geral, significa que, no �-ésimo (caso todos os expoentes sejam positivos) �é substituído por sua �-ésima deflação.

Finalmente, observamos que todas as variantes do algoritmo de Hermite podem ser realizadas sobre um DFU, ao invés de um corpo, sendo o resultado expresso em seu corpo quociente. Neste caso, na variante linear, o denominador do integrando obrigatoriamente deve ser primitivo, ao contrário das demais variantes.

Nas subseções 5.4.1, 5.4.2e5.4.3, fornecemos pseudocódigos, juntamente com códigos para implementação no Maxima, respectivamente, das versões original, quadrática e linear do método de Hermite.

3.2.4

Exemplos

Aplicaremos as três versões do algoritmo de Hermite a uma mesma função.

Exemplo 3.2.1 (gerado com dados obtidos pelo código 5.4.1, versão original da redução de Hermite). Sejam � = 3�6

⊗�4⊗6 ∈ Q[�], � = �8⊗12�6+48�4 ⊗64�2 ∈ Q[�] e � = �/� ∈ Q(�), isto é, = 3� 6 ⊗ �4 ⊗ 6 8⊗ 12�6+ 48�4⊗ 64�2 ∈ Q(�).

Temos que a fatoração em fatores irredutíveis do denominador é � = �2(� ⊗

2)3(� + 2)3, enquanto que sua flq é � = �2(�2

⊗ 4)3 = �2233. A decomposição

em frações parciais de � sobre esta fatoração é

= 3

32�2 +

93�4+ 4�2⊗ 144

32(�2⊗ 4)3 .

Aplicando a versão original do algoritmo de Hermite sobre �, temos, nos termos da fórmula de recursão: �i 2 1 3/32 ⊗3/32 0 3 �2 ⊗ 4 2 (93�4+ 4�2⊗ 144)/32 ⊗85�/82 ⊗(93�2+ 36)/64 3 �2⊗ 4 1 (93�2+ 121)/32 ⊗493�/256 121/128 Portanto, ︁ 3�6⊗ �4⊗ 6 8⊗ 12�6+ 48�4⊗ 64�2 = ⊗ 493� 256(�2⊗ 4)85� 32(�2 ⊗ 4)2⊗ 3 32�+ ︁ 251 256(�2⊗ 4). Exemplo 3.2.2 (gerado com dados obtidos pelo código 5.4.2, versão quadrática da redução de Hermite). Com a versão quadrática, temos a seguinte tabela para �:

i V U j B C A 2 x D33 1 ⊗3/32 ⊗(93x5+ 4x3⊗ 144x)/32 (93x5+ 4x3⊗ 144x)/32 3 D3 x 2 ⊗85x/32 ⊗(93x3+ 36x)/64 (93x3+ 121x)/32 3 D3 x 1 ⊗493x/256 121x/128 251x/256 Portanto, ︁ 3�6⊗ �4⊗ 6 8⊗ 12�6+ 48�4⊗ 64�2 = ⊗ 493� 256(�2⊗ 4)85� 32(�2 ⊗ 4)2⊗ 3 32�+ ︁ 251 256(�2⊗ 4).

da mesma maneira que na versão linear, porém não necessitamos da decomposição em frações parciais.

Exemplo 3.2.3 (gerado com dados obtidos pelo código 5.4.3, versão linear de Mack da redução de Hermite). Mantendo a função �, temos:

1. � ⊂ 0; 2. �

⊂ mdc(�,��/��) = �5⊗ 8�3+ 16�; 3. �*

⊂ �/�= �3⊗ 4�;

4. Entramos no primeiro passo da redução:

⊗2 ⊂ mdc(�5⊗ 8�3+ 16�,5�4⊗ 24�2+ 16) = �2⊗ 4; 5. �⊗* ⊂ �/�⊗2 = �3⊗ 4�; 6. (�,�) ⊂ ExtendedEuclidean(⊗5�2+ 4,�3 ⊗ 4�,�) = ︃ ⊗73� 2 + 48 32 , 96�3⊗ 13� 32 ︃ ; 7. � ⊂ (96�3 ⊗ 13�)/32 + 146�/32 = (96�3+ 133�)/32; 8. � ⊂ � +⊗ = ⊗ 73�2+ 48 32(�5⊗ 8�3+ 16�) 9. �⊂ �⊗2 = �2⊗ 4

10. Entramos no segundo passo da redução:

⊗2 ⊂ mdc(�2+ 2,2�) = 1; 11. �⊗* ⊂ �/�⊗2 = �2⊗ 4; 12. (B,C) ⊂ ExtendedEuclidean(⊗2x2,x2⊗ 4,(96x3+ 133x)/32) = (⊗517x/256, ⊗133x/128) 13. � ⊂ � + = ⊗ 73� 2+ 48 32(�5⊗ 8�3+ 16�) ⊗ ⊗517� 256(�2⊗ 4) 14. �⊂ �⊗2 = 1.

Portanto, ︁ 3x6⊗ x4⊗ 6 x8⊗ 12x6+ 48x4⊗ 64x2 = ⊗ 73x2+ 48 32(x5⊗ 8x3+ 16x)⊗517x 256(x2⊗ 4) + ︁ 251x 256(x3⊗ 4x)

o que equivale ao que obtivemos nas duas outras versões do algoritmo de Hermite, mas precisamos de apenas dois passos de redução, ao invés de três.

3.3

O Algoritmo de Horowitz-Ostrogradsky

O algoritmo de Hermite nos permite obter

= + ︁ �, (3.10)

com �,�,�,� ∈ K[�], mdc(�,�) = mdc(�,�) = 1, �/� própria e � livre de quadrados. O algoritmo de Horowitz-Ostrogradsky é uma alternativa ao método de Hermite. Ao invés de uma redução, calcula diretamente os polinômios � e � na equação (3.10), e, a partir disso, obtém os polinômios � e � através da resolução de um sistema linear cujas incógnitas são os coeficientes destes dois últimos polinômios. Dispensa completamente os cálculos de frações parciais e fatoração livre de quadrados.

Teorema 3.3.1 ([11], Cap. 11, ğ4). Seja � = �/� ∈ K(�) uma função racional

reduzida e própria. Sejam � = �/� a parte racional de sua integral e ℎ = �/� o integrando aparecendo na parte transcendental, como encontramos pelo algoritmo de Hermite (note que � = 0). Então

�= �e � = �*. Além disso, grau(�) < grau(�) e grau(�) < grau(�). Demonstração. Seja = ki=1 ii

a fatoração livre de quadrados de �. A demonstração é bastante direta e consiste, basicamente, de observar a contribuição da integral de cada fração parcial do

integrando original para os denominadores da parte racional e do integrando da parte transcendental no algoritmo de Hermite. Em suma, na equação (3.10), encontramos que = ki=1 �i, �= ki=2 ii⊗1,

com grau(�) < grau(�) e grau(�) < grau(�). Ou seja,

�= �e � = �*.

O resultado acima é a base para o algoritmo de Horowitz-Ostrogradsky. Dife- renciando a equação (3.10) aplicada à fração reduzida e própria �/�, temos

= ��⊗ ��2 + �.

Multiplicando a equação acima por � = ��, temos

�= ��⊗ ��� + ��. (3.11) Seja � =k i=1 ii a flq de �. Observe que ��′ = ︃ ki=1 �i ︃⎛ ︁ ki=2 (� ⊗ 1)�i⊗2 i ki̸=j⊙2 �j⊗1j ︀ ︀= �1 ki=2 (� ⊗ 1)�i⊗1 i ki̸=j⊙2 �jj.

Portanto, ��é divisível por �, donde a equação (3.11) constitui uma identidade

polinomial. Definamos � = grau(�) e � = grau(�). Como os únicos polinômios que não conhecemos nesta identidade são � e �, e como os limites superiores de seus graus são, respectivamente, � ⊗ 1 = grau(�) ⊗ 1 e � ⊗ 1 = grau(�) ⊗ 1, esta identidade polinomial origina um sistema linear cujas variáveis são os coeficientes destes polinômios, os quais se escrevem, para efeitos de resolução deste sistema,

e

�= �n⊗1�n⊗1+ ... + �1�+ �0.

O grau do polinômio do lado esquerdo da equação (3.11) é

grau(�) ⊘ grau(�) ⊗ 1 = grau(�) + grau(�) ⊗ 1 = � + � ⊗ 1 enquanto no lado direito, o limitante para o grau é

max(� + � ⊗ 2,� + � ⊗ 2,� + � ⊗ 1) = � + � ⊗ 1.

Portanto, igualando os coeficientes dos dois lados da equação (3.11), obtemos um sistema linear determinado de � + � linhas e � + � incógnitas sobre K.

Observe que este método é uma alternativa ao algoritmo de Hermite e não requer o cálculo da fatoração livre de quadrados de � em momento algum.

Enquanto a complexidade deste método é muito boa para funções racionais, sua generalização não é tão simples quanto o método de Hermite para classes maiores de funções, de modo que o algoritmo para funções elementares acaba por utilizar a versão linear do algoritmo de Hermite [2, p. 46].

Na subseção 5.4.4, fornecemos um pseudocódigo, juntamente com código para implementação no Maxima do algoritmo de Horowitz-Ostrogradsky.

3.3.1

Exemplos

Continuamos utilizando a função � dos exemplos da seção anterior.

Exemplo 3.3.1 (gerado com dados obtidos pelo código 5.4.4, algoritmo de Ho- rowitz-Ostrogradsky). Seguindo os passos do algoritmo de Horowitz-Ostrogradsky, temos:

= �5⊗ 8�3+ 16�; * = �/�= �3⊗ 4�;

�= grau(�*) ⊗ 1 = 2, � = grau(�) ⊗ 1 = 4.

� ⊂ � ⊗ �* ︃ ni=0 �i�i ︃′ + ︃ ni=0 �i�i*⊗′ ⊗ � ⊗ ⎛ ︁ mj=0 �j�j ︀ ︀ = (⊗�2)�7+ (�4⊗ �1+ 3)�6+ (2�3⊗ �0+ 8�2)�5 + (3�2+ 12�4+ 8�1⊗ 1)�4+ 4(�1+ 2�3+ 2�0⊗ 4�2)�3 + (5�0+ 4�2⊗ 16�1)�2+ (⊗16�0)� + (⊗4�0⊗ 6)

Formamos o sistema onde cada coeficiente de � equivale a 0. A solução é (�0,�1,�2,�3,�4,�0,�1,�2) = ︂ ⊗32,0,371 64 ,0, ⊗ 517 256,0, ⊗ 251 256,0 ︂ . Portanto, ︁ 3x6⊗ x4⊗ 6 x8⊗ 12x6+ 48x4⊗ 64x2 = ⊗ 73x2+ 48 32(x5⊗ 8x3+ 16x)⊗517x 256(x2⊗ 4) + ︁ 251x 256(x3⊗ 4x) o que é coerente com a resposta dada pelo algoritmo de Hermite.

3.4

O Algoritmo de Rothstein-Trager

Terminado o algoritmo de Hermite (ou Horowitz-Ostrogradsky), resta-nos calcular a parte logarítmica da integral de � = �/�, a saber, ∫ ℎ = ∫ �/�, onde, como vimos,

�/� é uma fração reduzida e própria, cujo denominador é livre de quadrados. Se

considerarmos K o fecho algébrico de K, e se � =n

i=1

(� ⊗ Ði), temos que ℎ deve

ter a forma = ni=1 Òi � ⊗ Ði (3.12) onde Ò1, . . . ,Òn∈ K. Dessa forma,

= ni=1 Òilog(� ⊗ Ði). (3.13)

Uma vez que a soma de logaritmos é o logaritmo do produto de seus argumentos, quaisquer logaritmos sob um mesmo Òi na expressão acima podem ser unificados

num único logaritmo. Em outras palavras, queremos encontrar um método de encontrar os resíduos distintos entre os Òi necessários para expressar

sem

fatorar � completamente. Os Òi são os resíduos de ℎ que aparecem na expansão

de Laurent de desta função em torno de cada ponto � = Ði, i.e.

= Òi � ⊗ Ði

+ �0+ �1(� ⊗ Ði) + �2(� ⊗ Ði)2+ ≤ ≤ ≤ . (3.14)

Utilizando a equação (3.12), temos que

= ni=1 Òi � ⊗ Ði =︁n i=1 Òi nj̸=i (� ⊗ Ðj).

Portanto, para cada polo Ði

�(Ði) = Òi n

j̸=i

(Ði⊗ Ðj) = Òi�(Ði)

Assim, se Ð é um polo de ℎ para calcularmos o resíduo Ò deste polo, podemos usar a fórmula

Ò = �(Ð)

(Ð). (3.15)

Logo, encontrar todos os resíduos distintos equivale a resolver em Ò a equação (3.15) para cada polo Ð. Ou seja, equivale a resolver

(Ð) ⊗ Ò�(Ð) = 0 para todo Ð ♣ �(Ð) = 0.

Isto é o mesmo que encontrar todas as raízes distintas do polinômio

�(�) =

α♣b(α)=0

(�(Ð) ⊗ ��(Ð))

o que, pelo Lema 2.1.2 equivale a

Qualquer raiz repetida em (3.16) implicará em redução no número de logaritmos aparecendo em (3.13). Portanto, podemos escrever

= ki=1 �ilog(�i) (3.17)

onde os �i são as raízes distintas de (3.16) e os �i são mônicos, livres de quadrados

e dois a dois coprimos. O seguinte resultado mostra que as raízes �i são todas

necessárias e provê um mecanismo simples para calcular os �i.

Teorema 3.4.1 (Algoritmo de Rothstein-Trager, [11], Cap. 11, ğ5, [31,34]). Sejam

�,� ∈ K*[�] tais que mdc(�,�) = 1, com � livre de quadrados e �/� reduzida e própria. Suponha que, para K*, seja possível escrever

= ni=1 �ilog(�i) (3.18)

onde os �i ∈ K* são constantes não nulas distintas e os �i ∈ K*[�] são livres de

quadrados e dois a dois coprimos de grau positivo. Então os �i são todas as raízes

distintas do polinômio

�(�) = resx(� ⊗ ��,�) ∈ K*[�]

e os �i são os polinômios

�i = mdc(� ⊗ �i�,�) ∈ K*[�].

Demonstração. Diferenciando a equação (3.18), temos

= ni=1 �i i �i . (3.19) Seja �i = nj̸=i �j,1 ⊘ � ⊘ �.

Multiplicando ambos os lados de (3.19) por �n j=1 �j, temos nj=1 �j = � ni=1 �i�i�i. (3.20)

Mostraremos que, a menos de uma constante multiplicativa,

= ︁n

j=1

�j. (3.21)

Observe que mdc(�,�) = 1, donde (3.20) � ♣n

j=1

�j. Por outro lado, para cada �,

temos de (3.20) que �j ♣ � ni=1 �i�i�i.

Por definição, cada �j divide �i para � ̸= �. Isto quer dizer que

�j ♣ ��j�i.

Como os �i são supostos livres de quadrados, temos que mdc(�j,�j) = 1. Além

disso, mdc(�j,�j) = 1, pela definição de �j e pelo fato de que os �i são dois a dois

primos entre si. Resta, portanto, que �j ♣ � para 1 ⊘ � ⊘ �. Portanto, n

j=1

�j ♣ �,

donde verificamos (3.21).

As equações (3.20) e (3.21) combinadas implicam

=

n

i=1

�i�i�i.

A seguir, mostraremos que, para cada �,

Observe que, de (3.21), temos ′ = ni=1 i�i. Portanto, � ⊗ �j�′ = ni=1 �i�i�i⊗ �j ni=1 �i�i = ni=1 (�i⊗ �j)�i�i. (3.23)

No último somatório, para cada termo com � ̸= �, temos que �j ♣ �i, enquanto que

quando � = �, o termo desaparece. Portanto, verificamos (3.22). De (3.21) e (3.22) temos que �j é um divisor comum de � ⊗ �j�e � para cada �. Mostraremos que

se trata de um mdc. É suficiente mostrar que para � ̸= �, mdc(� ⊗ �j�,�k) = 1.

Para isto, utilizando (3.23), temos que mdc(� ⊗ �j�,�k) = mdc ︃ ni=1 (�i⊗ �j)�i�i,�k= mdc((�k⊗ �j)�k�k,�k). (3.24)

A última igualdade acima se verifica porque �k é um fator de cada �i, para

� ̸= �. Porém, para � ̸= �, o mdc acima é 1, pois �k ̸= �j, mdc(�k,�k′) = 1 e

mdc(�k,�k) = 1. Portanto, mostramos que

�j = mdc(� ⊗ �j�,�), 1 ⊘ � ⊘ �.

Logo, temos que resx(� ⊗ �j�,�) = 0, uma vez que �j é um fator comum não

trivial de � ⊗ �j�e �. Portanto, �j é uma raiz do polinômio �(�). Reciprocamente,

se � é uma raiz qualquer de �(�), com � ∈ K*

R (K*R é o corpo onde � se fatora

completamente), então resx(� ⊗ ��,�) = 0. Portanto,

mdc(� ⊗ ��,�) = �

para algum � com grau(�) > 0. Seja � um fator irredutível de �. Então, como

� ♣ � =

n

j=1

�j, existe apenas um �j para o qual � ♣ �j. Agora, temos que

implica, utilizando (3.23) que � ♣ ni=1 (�i⊗ �j)�i�i.

Porém, � ♣ �i para cada � ̸= �, uma vez que � ♣ �j. Portanto,

� ♣ (�j⊗ �)�j�j.

o que é verdade apenas se �j⊗� = 0. Portanto, � é uma das constantes aparecendo

em3.18. Mostramos, desta forma, que o polinômio �(�) ∈ K*[�] se fatora comple-

tamente sobre K*, isto é, K*

R = K*, sendo os �j todas as suas raízes distintas.

Completando o resultado anterior, o seguinte nos diz que os �i e os �i que

aparecem em (3.18) e que foram obtidos pelo método que encontramos pertencem à extensão de K(�) que possui o menor corpo de constantes possível.

Teorema 3.4.2 ([11], Cap. 11, ğ5, [31, 34]). Sejam �,� ∈ K[�] tais que � é livre

de quadrados, e �/� é reduzida e própria. Seja K* a menor extensão algébrica de

K tal que podemos escrever

= Ni=1 ˜�ilog(˜�i) (3.25) onde ˜�i ∈ K*,˜�i ∈ K*[�]. Então K* = K(� 1,. . . ,�n)

onde �i, 1 ⊘ � ⊘ � são as raízes distintas do polinômio

�(�) = resx(� ⊗ ��,�) ∈ K[�].

Ou seja, K* é o corpo sobre o qual �(�) ∈ K[�] se fatora completamente.

Além disso, o Teorema 3.4.1 pode ser usado para calcular a integral com um corpo constante minimal.

às condições do Teorema 3.4.1, então podemos reescrever a fórmula (3.25) de modo que passem a satisfazer. Primeiro, se algum ˜�i não é livre de quadrados,

então seja a sua fatoração livre de quadrados expressa por ˜�i =

k

j=1

jj

e usemos algumas propriedades algébricas dos logaritmos para obter log(˜�i) =

k

j=1

�log(�j).

Podemos realizar esta operação termo a termo até que todos os argumentos nos logaritmos sejam livres de quadrados. Desta forma, podemos assumir que os ˜�i

já são livres de quadrados e de grau positivo. Em seguida, se para algum para �,� temos mdc(˜�i,˜�j) = � com grau(� ) > 1 então podemos escrever

log(˜�i) = log(� ) + log

˜�

i

, log(˜�j) = log(� ) + log

˜�

j

.

Observe que os argumentos dos logaritmos permanecem em ˜K*. Utilizamos o

mesmo procedimento repetidas vezes de modo a agrupar em um único termo todos os argumentos idênticos dos logaritmos, até estes argumentos se tornem dois a dois relativamente primos. Os polinômios continuam livres de quadrados e de graus positivos. Finalmente, se para algum � ̸= � tivermos ˜�i = ˜�j, então

podemos escrever

˜�ilog(˜�i) + ˜�jlog(˜�j) = ˜�ilog(˜�i˜�j),

mais uma vez observando que as operações mantém a propriedade de que os argumentos dos logaritmos são livres de quadrados, dois a dois primos entre si e de grau positivo. Portanto mostramos que (3.25) pode ser reescrita em uma nova expressão, de modo que as hipóteses do Teorema 3.4.1 são satisfeitas.

Por outro lado, o Teorema 3.4.1 nos diz que os ˜�i são as raízes distintas do

polinômio resultante �(�) e os ˜�i são aqueles neste teorema. Segue que K* é o

Em resumo, o método de Rothstein-Trager simplifica o problema da integração da parte logarítmica da seguinte forma. Para aplicarmos o método de Bernoulli a um integrando com denominador livre de quadrados, é preciso conhecer fatoração completa deste denominador, isto é, obter todas as suas raízes antes de integrar, o que implica conhecer um número de extensões maior do que o necessário para se resolver o problema. Além disso, realizamos os cálculos de frações parciais sobre a fatoração completa do denominador e integramos parcela a parcela. Em seguida, opcionalmente, pode-se agrupar logaritmos com coeficientes iguais, para fins de simplificação da resposta. No método de Rothstein-Trager, substituímos a necessidade de se conhecer todas as raízes do denominador pelo conhecimento apenas das raízes distintas de �(�), as quais ocorrem em número menor ou igual ao das raízes do denominador do integrando original. Em seguida, como cada raiz �i corresponde a um resíduo distinto na decomposição em frações parciais do

integrando, cada �i agrupa automaticamente e de maneira direta todas as raízes

do denominador que se encontram sob o mesmo resíduo �i através, unicamente,

de operações de mdc.

Note que, conhecida a fatoração em fatores irredutíveis de � = � ≤ �e1 1 ≤ ≤ ≤ �

el

l ,

cada raiz c só pode ser raiz de um de seus fatores, digamos, �j. Calculamos,

portanto, �j(�,�) = mdc(�,� ⊗ ��) em K(�)[�]/⟨�j(�)⟩ e, então, encontramos

que � log(�j(�,�)) compõe a parte transcendental. Portanto, podemos dispensar

o conhecimento explícito das raízes de � na integral, obtendo, formalmente:

= li=1c♣Rj(c)=0 �log(�j(�,�)).

Assim, ∫ ℎ é determinado univocamente através dos �j e dos �j, sendo cada

�j(�,�) equivalente a algum �i(�), se � é raiz de �j. Isto também mostra que só

precisamos realizar os cálculos de mdc para cada fator irredutível de �, e não para cada raiz distinta, de modo que argumentos oriundos de raízes de um mesmo fator serão, formalmente, resultados de um mesmo cálculo de mdc.

Na subseção 5.5.2, fornecemos um pseudocódigo, juntamente com código para implementação no Maxima do algoritmo de Rothstein-Trager.

3.4.1

Exemplos

Exemplo 3.4.1 (extraído de [11], Cap. 11, ğ5). Retornemos à função � = �/�, com � = 1 e � = �3+ �. Como já vimos nos exemplos estudados na seção 3.1,

referente ao algoritmo de Bernoulli, a integral desta função só possui parte loga- rítmica. Vimos duas possíveis representações para esta integral: uma que requer uma extensão do corpo constante Q para o corpo Q(�), e outra que evita esta extensão. A segunda representação é aquela obtida pelo algoritmo de Rothstein- Trager, como veremos a seguir.

Calculamos o resultante de Rothstein-Trager, fazendo � = � e � = �:

�(�) = resx(� ⊗ ��,�) = resx((1 ⊗ �) ⊗ (3�)�2,�3+ �) = det ⎛ ︁ ︁ ︁ ︁ ︁ ︁ ︁ ︁ ︁ ︁ ⊗3� 0 1 ⊗ � 0 0 0 ⊗3� 0 1 ⊗ � 0 0 0 ⊗3� 0 1 ⊗ � 1 0 1 0 0 0 1 0 1 0 ︀ ︂ ︂ ︂ ︂ ︂ ︂ ︂ ︂ ︂ ︀ = ⊗4�3+ 3� + 1 ∈ Q[�].

Temos que �(�) se fatora completamente como ⊗4(� ⊗ 1)(� + 1/2)2

∈ Q[�]. Portanto, não é necessário realizar extensões algébricas sobre o corpo constante Q. As raízes distintas de �(�) são � = 1 e � = ⊗1/2. Os argumentos polinomiais dos logaritmos aparecendo na integral de � podem então ser calculados através de cálculos de mdc sobre Q[�]: 1 = mdc(� ⊗ 1�,�) = � ∈ Q[�], 2 = mdc(� ⊗ (⊗1/2)�,�) = �2+ 1 ∈ Q[�]. Logo, ︁ 1 3+ � = log(�) ⊗ 1 2log(�2 + 1).

Ou seja, ∫ � ∈ Q(�, log(�), log(�2 + 1)), em conformidade com o algoritmo de

Bernoulli.

Exemplo 3.4.2 (gerado com dados obtidos pelo código 5.5.2, algoritmo de Rothstein-Trager). Sejam � = 6�5 + 12�4 + 8�3

6+ 2�5 + 2�4⊗ 2�3⊗ 4�2+ 2 ∈ Q[�] e � = �/�, isto é = 6�5+ 12�4+ 8�3⊗ 12�2⊗ 8�

6+ 2�5+ 2�4⊗ 2�3⊗ 4�2+ 2 ∈Q(�).

Observe que � é livre de quadrados (além de ser irredutível sobre Q). Computa- mos a resultante de Rothstein-Trager:

�(�) = resx(�6+2�5+ 2�4⊗ 2�3⊗ 4�2+ 2,6�5+ 12�4+ 8�3 ⊗ 12�2⊗ 8�⊗

�(6�5+ 10�4+ 8�3⊗ 6�2⊗ 8�)) = 203008(�2⊗ 2� + 2)3 ∈ Q[�].

Neste caso, �(�) já se encontra fatorado em fatores irredutíveis sobre Q[�], mas não de maneira completa, de modo que não somos capazes de encontrar as raízes de

�(�) em Q. Precisamos adicionar números algébricos sobre o corpo de constantes.

Mais precisamente, �(�) se fatora completamente sobre Q(Ð), onde Ð é raiz de

2⊗ 2� + 2. Nesta extensão do corpo de constantes, a fatoração completa de �(�)

é

�(�) = (� ⊗ Ð)(� ⊗ (2 ⊗ Ð)) ∈ Q(Ð)[�].

As raízes distintas de �(�) são � = Ð e � = 2 ⊗ Ð. Computamos �1 através de

1 = mdc(� ⊗ Ð�,�) = ⊗(8Ð + 19)�3⊗ (35Ð ⊗ 16)�2+ 35Ð ⊗ 16Ð

= �3+ �2

⊗ Ð ∈ Q(Ð)[�]

e o cálculo de �2 é essencialmente o mesmo, uma vez que �2 é uma raiz conjugada

de �1 sobre os racionais. Dessa forma, não precisamos repetir as contas, bastando

realizar uma substituição, de modo a obter �2 = �3+ (2 ⊗ Ð)�2⊗ 2 + Ð. Portanto,

conseguimos expressar ︁ 6�5+ 12�4+ 8�3⊗ 12�2⊗ 8� 6 + 2�5+ 2�4 ⊗ 2�3⊗ 4�2+ 2 = Ð log(� 3+ Ð�2 ⊗ Ð) + (2 ⊗ Ð) log(�3+ (2 ⊗ Ð)�2 ⊗ 2 + Ð) donde ∫ � ∈ Q(Ð)(�, log(�1), log(�2)). Caso não fosse possível representar o nú-

mero algébrico Ð em termos de radicais, então esta seria a melhor solução em forma fechada possível. Porém, neste exemplo, conseguimos uma representação de Ð em termos de radicais. A saber,

Ð= 1 +√⊗1 = 1 + �. Portanto, ︁ 6�5 + 12�4+ 8�3⊗ 12�2⊗ 8� 6+ 2�5+ 2�4⊗ 2�3⊗ 4�2+ 2 = (1 + �) log(� 3+ (1 + �)�2 ⊗ 1 ⊗ �) + (1 ⊗ �) log(�3 + (1 ⊗ �)�2 ⊗ 1 + �) Ou seja, ∫ � ∈ Q(�)(�, log(�1), log(�2)), onde �1 = �3 + (1 + �)�2 ⊗ 1 ⊗ � e

2 = �3 + (1 ⊗ �)�2⊗ 1 + �.

Exemplo 3.4.3 (extraído de [11]). O exemplo a seguir mostra um caso em que o algoritmo de Bernoulli não é capaz de fornecer, sequer parcialmente, uma resposta explícita uma vez que o denominador do integrando não pode ser fatorado nem mesmo sobre os reais de maneira explícita, isto é, não há raízes que possam ser obtidas por fórmulas conhecidas. O problema foi proposto em [33], em 1967, para demonstrar a necessidade de se obter um algoritmo que calculasse o resultado final utilizando o menor número de extensões algébricas, e só viria a ser resolvido apropriadamente com o algoritmo de Rothstein-Trager, na década seguinte. Sejam � = 7�13+10�8+4�7

⊗7�6⊗4�3⊗4�2+3�+3, � = �14⊗2�8⊗2�7⊗2�4⊗ 4�3

⊗ �2 + � + 1 e � = �/�. Como � é própria, reduzida e possui denominador livre de quadrados, temos apenas parte logarítmica. Temos a seguinte fatoração completa para a resultante �(�) em Q[�]:

�(�) = ⊗23774396766245335552(�2⊗ � ⊗ 1/4)7.

Portanto, �(�) possui raízes irracionais. Se Ð é uma dessas raízes, a fatoração completa de �(�) sobre Q(Ð)[�] fica:

Assim, se Ð é raiz de �1 = �2⊗ � ⊗ 1/4, temos

1(Ð,�) = mdc(�,� ⊗ Ð�) = �7+ (1 ⊗ 2Ð)�2⊗ 2Ð� ⊗ 1 ∈ Q(Ð)[�].

Uma das raízes de �1 é Ð = (1 +

2)/2. A outra é 1 ⊗ Ð = (1 ⊗2)/2. Portanto, = ︁ α♣R1(α)=0 Ðlog(�7+ (1 ⊗ 2Ð)�2⊗ 2Ð� ⊗ 1) = 1 + √ 2 2 log(�7 ⊗ √ 2�2 ⊗ (1 +√2)� ⊗ 1) +1 ⊗ √ 2 2 log(� 7+2�2 ⊗ (1 ⊗√2)� ⊗ 1).

Isso mostra a importância do algoritmo de Rothstein-Trager. Algumas vezes é possível utilizar o algoritmo de Bernoulli e realizar simplificações para se chegar a uma resposta envolvendo o mínimo de extensões algébricas. Porém, isto não é possível neste exemplo: o algoritmo de Bernoulli requer que se conheça todas as extensões necessárias para se fatorar o denominador, pelo menos, sobre os reais, e este requerimento ocorre já na primeira etapa da integração, correspondente ao algoritmo de Hermite. O algoritmo de Rothstein-Trager, precedido pelo de Hermite, obtém o resultado final de maneira direta, utilizando o mínimo de extensões algébricas, sem passar por cálculos que seriam realizados pelo algoritmo de Bernoulli, os quais envolveriam mais extensões que o necessário para a forma final mínima da integral.

3.5

O Algoritmo de Lazard-Rioboo-Trager

No método de Rothstein-Trager, além de ser necessário o conhecimento da fatora- ção em fatores irredutíveis de �(�) = resx(�,� ⊗ ��′), os cálculos de mdc para se

obter os polinômios �j(�,�) = �i, para algum par �,� e raiz � de um fator irredu-

tível �j de �, que aparecem em (3.18), são realizados sobre extensões K(�). Em

geral, como consequência destas considerações temos um aumento significativo de complexidade [11, p. 504].

nos permite contornar este problema, evitando os cálculos de mdc realizados sobre extensões algébricas do corpo de coeficientes para determinação dos �j(�,�),

substituindo estes cálculos por computação de subresultantes. É baseado no seguinte resultado.

Teorema 3.5.1 ([2], Cap. 2, ğ6, [17,24]). Seja K o fecho algébrico de K, � uma

indeterminada sobre K(�) e �,�,� ∈ K[�] \ ¶0♢ tais que mdc(�,�) = mdc(�,�) = 1,

grau(�) < grau(�) e � livre de quadrados. Sejam

�(�) = resx(�,� ⊗ ��) ∈ K[�]

e (�0,�1, . . . ,�k ̸= 0,0, . . . ) a SRP das subresultante com relação a � de � e � ⊗ ��

se grau(�) < grau(�) ou � ⊗ �� e � se grau(�) ⊙ grau(�). Seja Ð ∈ K uma raiz de multiplicidade � > 0 de �(�). Então uma das seguintes ocorre:

1. � = grau(�), em qual caso

mdc(�,� ⊗ Ð�) = � ∈ K(Ð)[�].

2. � < grau(�), em qual caso, existe um único � ⊙ 1 tal que graux(�m) = � e

mdc(�,� ⊗ Ð�) = ppx(�m)(Ð,�) ∈ K(Ð)[�]

onde ppx(�m) é a parte primitiva de �m com relação a �.

Demonstração. Sejam � = resx(�,� ⊗ ��) e (�0,�1, . . . ,�k̸= 0,0, . . . ) a SRP subres-

tultante com respeito a � (ou seja, em K[�][�]) de � e � ⊗ ��, se grau(�) < grau(�), ou � ⊗ �� e �, se grau(�) ⊙ grau(�). Sejam ainda � = grau(�), � = grau(� ⊗ ��) e

Ò ∈ K \ ¶0♢ o coeficiente líder de � e � = Ò

q

i=1

(� ⊗ Ñi) a fatoração completa de �

sobre K. (Note que os Ñi são distintos, pois � é livre de quadrados). Temos, pelo

Lema 2.1.2, que �= Òp qi=1 (�(Ñi) ⊗ ��(Ñi)).

Logo, o coeficiente líder de � é ∘Òp q

i=1

�(Ñi), o qual é não nulo, uma vez que

�. Observe que o termo de menor grau de � é Òp

q

i=1

�(Ñi), o qual é não nulo,

uma vez que mdc(�,�) = 1. Assim, Ð ̸= 0. Como Ð possui multiplicidade �, há um subconjunto �α ⊖ ¶1, . . . �♢ de cardinalidade � tal que �(Ñi) ⊗ Ð�(Ñi) = 0

se e só se � ∈ �α. Então, �α =

i∈Iα

(� ⊗ Ñi) divide � ⊗ Ð� em K[�]. Por outro

lado, � ⊗ Ñi ∤ � ⊗ Ð� para � /∈ �α, donde �α = mdc(�,� ⊗ Ð�) ∈ K(Ð)[�]. Ou seja,

graux(�α) = � e, portanto, � ⊘ grau(�). Assim,

1. se � = grau(�), então �α divide � e tem o mesmo grau de �, donde �α = �;

2. se � < grau(�). Então � ⊗ Ð� ̸= 0, caso contrário, teríamos �α = mdc(�,� ⊗

Ð�) = mdc(�,0) = �, cujo grau é maior que �. Continuando, sejam �n

K[�][�] a �-ésima subresultante de � e �⊗�� com relação a �, à : K[�] ⊃ K(Ð) o homomorfismo de anéis que é a identidade sobre K e leva � em Ð e

à : K[�][�] ⊃ K(Ð)[�] induzido por à, isto é, à(Σ�j�j) = Σà(�j)�j. Como

�,�,� ∈ K[�] (isto é, não envolvem �), temos que à(�) = � e à(�⊗��) = �⊗Ð�,

donde grau(à(�)) = �, e a Proposição 2.1.2 nos permite escrever à(�n) =

Òr

n, onde � é um inteiro não negativo e �né a �-ésima subresultante de � e

� ⊗ Ð�. Seja (�0,�1, . . . ,�l̸= 0,0, . . . ) a SRP das subresultantes de � e � ⊗ ��

em K(Ð)[�], se grau(�) < grau(�), ou de � ⊗ Ð� e �, se grau(�) ⊙ grau(�). A Proposição 2.1.3 garante que �l = mdc(�,� ⊗ ��), donde graux(�l) =

�. Portanto, à(�n) é semelhante a �l pelo Teorema 2.1.1, o que significa

que à(�n) ̸= 0 e que também temos à(�n) = mdc(�,� ⊗ Ð�), portanto

grau(à(�n)) = �. Como graux(�n) ⊘ � por definição e grau(à(�n)) ⊘

graux(�n), temos que graux(�n) = �. Pelo Teorema 2.1.1, �n é similar

a algum �m, para � ⊙ 0, o que significa que graux(�m) = �. Uma vez

que grau(�0) ⊙ grau(�) > �, temos que � ⊙ 1, o que implica que � é

único, pois grau(�i) > grau(�i+1) para � ⊙ 1 em qualquer SRP. Escrevamos

1�n = �2ppx(�m) com �1,�2 ∈ K[�] satisfazendo mdc(�1,�2) = 1. Então

à(�1)à(�n) = à(�2)à(ppx(�m)). Observe que à(�n) ̸= 0 e à(ppx(�m)) ̸= 0,

uma vez que ppx(�m) é primitivo. Além disso, não podemos ter à(�1) =

à(�2) = 0, já que mdc(�1,�2) = 1. Logo, à(�1) ̸= 0 e à(�2) ̸= 0, donde

Utilizamos o Teorema 3.5.1 para calcular de ∫ �/�, substituindo � por � e � por �. Calculamos �(�) através do algoritmo das subresultantes, como visto na

subseção 2.1.2, aplicado a � e � ⊗ ��(caso em que grau(�) < grau(�) no teorema

anterior). Se �α = mdc(�,� ⊗ Ð�), onde Ð é uma raiz de �(�), então �α = � se a

multiplicidade de Ð for grau(�), ou ppx(�m), se a multiplicidade de Ð for menor

que grau(�), em qual caso � ⊙ 1 é o único inteiro positivo tal que graux(�m)

equivale à multiplicidade de Ð. Portanto, contornamos completamente o cálculo de mdc sobre extensões do corpo de coeficientes. Cada argumento dos logaritmos é, na verdade, algum resto da SRP das subresultantes e a expressão da integral é colocada em termos de uma extensão minimal de K.

A seguir, alguns aspectos práticos do método. Ao implementarmos o algoritmo, calculamos a fatoração livre de quadrados de � =n

i=1

�ii, separando em �i as

raízes de multiplicidade � de �. Avaliar ppx(�m)(�,�), para � = Ð, onde Ð é uma

raiz de �i é o mesmo que reduzir cada coeficiente em relação a � de ppx(�m)

módulo �i. Não é preciso calcular de fato ppx(�m): em seu lugar, é necessário e

suficiente que se tome algum polinômio similar a �m tal que não seja levado em

0 pelo homomorfismo à no Teorema 3.5.1. A fonte [24] traz possibilidades para este polinômio e compara a eficiência do algoritmo de Lazard-Rioboo-Trager em relação à escolha. Na implementação deste algoritmo, no capítulo 5, utilizamos o polinômio �i(�,�) = �m/gcd(cl(�m),�i). Seus coeficientes (em �) não costumam

ser tão pequenos quanto os de ppx(�m), mas sua computação é mais rápida.

Observe que este é, de fato, um polinômio válido, pois, se Ð é raiz de �i, além

Documentos relacionados