1.3.7 Raízes de Equações — Raízes de Polinômios — O Método de Jenkins-Traub

1. Introdução

O Método de Jenkins-Traub é um algoritmo para busca dos zeros de uma função polinomial que utiliza três estágios de estimativas para aproximar as raízes.

É um método de convergência rápida, uma vez que utiliza o Método de Newton implicitamente no terceiro estágio de aproximação. Sendo assim, é considerado praticamente um padrão na busca de raízes de polinômios[1]. Por ser um algoritmo já projetado para ser implementado computacionalmente, produz soluções gerais, não importando se elas sejam de natureza complexa ou real.

Este algoritmo inicia a busca checando a existência de raízes muito pequenas. Após encontrá-las, tende à buscar raízes muito grandes. Isto cria um intervalo onde as demais raízes provavelmente estarão.

No segundo estágio, o algoritmo reajusta as aproximações das raízes complexas reescalando as variáveis. Nesta fase de execução, as raízes são refinadas uma por vez, e então esta aproximação é aplicada na função polinomial dividida por um fator linear. Desta forma, a fatoração que observaríamos do polinômio em fatores lineares, dividido pela aproximação linear, já produz uma segunda aproximação. Este processo é semelhante ao desenvolvido no Método de Durand-Kerner.

2. Desenvolvimento do Método de Jenkins-Traub

Considere o polinômio
(eq1)


\( P(z) = z^n + a_{n-1}z^{n-1} + \cdots + a_1z + a_0 = \prod_{j=1}^p (z = \alpha_j)^{m_j} \)

onde os termos \(a_i \) são números complexos com \(a_0 \neq 0 \) e onde a raiz \(\alpha_j \) de \(P(z) \) têm multiplicidade \(m_j \) , com \(j=1,\ldots, p \) , então temos que \(\sum_{j=1}^p = n \) . Assim, teremos que
(eq2)

\( P'(z) = \sum_{j=1}^{p} m_j P_j(z) \)

onde
(eq3)

\( P_j(z) = \dfrac{P(z)}{z-\alpha_j} \)

onde \(j \) , sabemos que itera sobre o intervalo \([1,p] \) .

O algoritmo de Jenkins-Traub gera uma sequência de polinômios \(H^{(\lambda)}(z) \) iniciando com \(H^{(0)}(z) = P'(z) \) , onde cada outro polinômio para \(\lambda > 0 \) , tendo a forma
(eq4)


\( H^{(\lambda)}(z) = \sum_{j=1}^{p} c_j^{(\lambda)} P_j(z) \)

com \(c_j^{(0)} = m_j \) . Se escolhermos uma sequência tal que \(H^{(\lambda)}(z) \rightarrow c_1^{\lambda} P_1(z) \) , isto é, que possua as taxas
(eq5)

\( d_j^{(\lambda)} = \dfrac{c_j^{(\lambda)}}{c_1^{(\lambda)}} \)

com \(j=2,\ldots,p \) , então poderemos encontrar a sequência \(t_{\lambda} \) das aproximações de \(\alpha_1 \) , utilizando a fórmula
(eq6)

\( t_{\lambda + 1} = s_{\lambda} – \dfrac{P(s_{\lambda})}{U^{(\lambda+1)}(s_{\lambda}} \)

onde \(U \) é uma normalização de \(H \) do tipo
(eq7)

\( U^{(\lambda)} = \dfrac{H^{(\lambda)}(z)}{\sum_{j=1}^{p}c_j^{(\lambda)}} \)

A partir dessas funções, o algoritmo utiliza três estágios de aproximação de novos polinômios para aplicar à interação de Newton.

2.1. Primeiro estágio: processo sem deslocamento

Para \(\lambda – 0, 1, \ldots, M-1 \) , utilizamos \(s_{\lambda} = 0 \) . No caso, \(M \) é uma variável escolhida como um polinômio de grau de aproximação
razoável.

2.2. Segundo estágio: processo com deslocamento fixo

Esta etapa da execução que determina as aproximações gerais das menores raízes dos polinômios. Isto é é feito, estimando-se \(s \) aleatoriamente dentro de um círculo com centro no zero do plano complexo. Ou seja,
(eq8)


\( s = e^{i\theta}\beta \)

onde \(\beta \) é o raio que espera-se conter as menores raízes do polinômio. Esta etapa, normalmente é escolhida entre para o intervalo \(M, \ldots, L – 1 \) .

2.3. Terceiro estágio: processo com deslocamento variável (adaptativo)

O polinômio \(H^{(\lambda + 1)}(x) \) agora é gerado utilizando-se a variável de deslocamento \(s_{\lambda} \) para os demais polinômios e será obtido utilizando-se a Equação 6.

3. Implementação

O algoritmo de Jenkins-Traub, pela sua complexidade, possui um código um pouco mais elaborado, além de ser extenso demais para ser publicado neste artigo. Por questão de conveniência, ele não está presente aqui, estando disponível em


http://www.sawp.com.br/code/rootfind/jenkinstraub.tar.gz.

 

4. Copyright

Este documento é disponível sob a licença Creative Commons. As regras dos direitos de cópia deste conteúdo estão acessíveis em http://creativecommons.org/licenses/by-nc-nd/2.5/br/.

References


[1] http://en.wikipedia.org/wiki/Jenkins-Traub_algorithm
[2] Jenkins, M. A. and Traub, J. F. A Three-Stage Variables-Shift Iteration for Polynomial Zeros and Its Relation to Generalized Rayleigh Iteration. http://www.springerlink.com/content/q6w17w30035r2152/p=ae17d723839045be82d270b45363625f&pi=1 (1970), number. 14, 252-263.
[3] Jenkins, M. A. and Traub, J. F. A Three-Stage Algorithm for Real Polynomials Using Quadratic Iteration. SIAM Journal, Vol 7, Num 4 (1970), 545-566.
[4] Ralston, Anthony and Rabinowitz, Philip, A First Course in Numerical Analysis.,(2nd ed.) McGraw-Hill and Dover, (2001), 380.