Articulo de referencia

Algoritmo de Jenkins-Traub

El algoritmo de Jenkins-Traub para la búsqueda de raíces de polinomios es un método iterativo rápido y globalmente convergente para la búsqueda de raíces de polinomios, publicad...

El algoritmo de Jenkins-Traub para la búsqueda de raíces de polinomios es un método iterativo rápido y globalmente convergente para la búsqueda de raíces de polinomios, publicado en 1970 por Michael A. Jenkins y Joseph F. Traub . Presentaron dos variantes: una para polinomios generales con coeficientes complejos, conocida comúnmente como el algoritmo "CPOLY", y una variante más compleja para el caso especial de polinomios con coeficientes reales, conocida comúnmente como el algoritmo "RPOLY". Esta última es prácticamente un estándar en los algoritmos de búsqueda de raíces de polinomios de caja negra. [ 1 ]

Este artículo describe la variante compleja. Dado un polinomio P , PAG(z)=i=0norteaiznortei,a0=1,anorte0{\displaystyle P(z)=\sum _{i=0}^{n}a_{i}z^{ni},\quad a_{0}=1,\quad a_{n}\neq 0} Con coeficientes complejos, calcula aproximaciones a los n ceros.α1,α2,,αnorte{\displaystyle \alpha _{1},\alpha _{2},\dots ,\alpha _{n}}de P ( z ), una a una en orden de magnitud aproximadamente creciente. Después de calcular cada raíz, se elimina su factor lineal del polinomio. El uso de esta deflación garantiza que cada raíz se calcule solo una vez y que se encuentren todas.

La variante real sigue el mismo patrón, pero calcula dos raíces a la vez: dos raíces reales o un par de raíces complejas conjugadas. Al evitar la aritmética compleja, la variante real puede ser cuatro veces más rápida que la variante compleja. El algoritmo de Jenkins-Traub ha impulsado una considerable investigación sobre la teoría y el software para métodos de este tipo.

Descripción general

El algoritmo de Jenkins-Traub calcula todas las raíces de un polinomio con coeficientes complejos. El algoritmo comienza comprobando si el polinomio tiene raíces muy grandes o muy pequeñas. Si es necesario, los coeficientes se reescalan mediante un reescalado de la variable. En el algoritmo, las raíces propias se encuentran una a una y, generalmente, en orden creciente. Después de encontrar cada raíz, el polinomio se reduce dividiendo por el factor lineal correspondiente. De hecho, la factorización del polinomio en el factor lineal y el polinomio reducido restante es ya un resultado del procedimiento de búsqueda de raíces. El procedimiento de búsqueda de raíces tiene tres etapas que corresponden a diferentes variantes de la iteración de potencia inversa . Véase Jenkins y Traub . [ 2 ] También se puede encontrar una descripción en Ralston y Rabinowitz [ 3 ] pág.  383. El algoritmo es similar en esencia al algoritmo de dos etapas estudiado por Traub. [ 4 ]

Procedimiento de localización de raíces

Partiendo del polinomio actual P ( X ) de grado n , el objetivo es calcular la raíz más pequeña.α{\displaystyle \alpha }de P(x) . El polinomio se puede entonces dividir en un factor lineal y el factor polinómico restante.PAG(incógnita)=(incógnitaα)H¯(incógnita){\displaystyle P(X)=(X-\alpha ){\bar {H}}(X)}Otros métodos de búsqueda de raíces se centran principalmente en mejorar la raíz y, por lo tanto, el primer factor. La idea principal del método Jenkins-Traub es mejorar gradualmente el segundo factor.

Para ello, se construye una secuencia de los llamados polinomios H. Estos polinomios son todos de grado n 1 y se supone que convergen al factor  H¯(incógnita){\displaystyle {\bar {H}}(X)}de P ( X ) que contiene (los factores lineales de) todas las raíces restantes. La secuencia de polinomios H aparece en dos variantes, una variante no normalizada que permite una comprensión teórica sencilla y una variante normalizada deH¯{\displaystyle {\bar {H}}}polinomios que mantienen los coeficientes en un rango numéricamente razonable. La construcción de los polinomios H(H(λ)(z))λ=0,1,2,{\displaystyle \left(H^{(\lambda )}(z)\right)_{\lambda =0,1,2,\dots }}está guiado por una secuencia de números complejos(sλ)λ=0,1,2,{\displaystyle (s_{\lambda })_{\lambda =0,1,2,\dots }}denominados desplazamientos. Estos desplazamientos dependen, al menos en la tercera etapa, de los polinomios H anteriores. Los polinomios H se definen como la solución a la recursión implícita. H(0)(z)=PAG(z){\displaystyle H^{(0)}(z)=P^{\prime }(z)}y(incógnitasλ)H(λ+1)(incógnita)H(λ)(incógnita)(modPAG(incógnita)) .{\displaystyle (X-s_{\lambda })\cdot H^{(\lambda +1)}(X)\equiv H^{(\lambda )}(X){\pmod {P(X)}}\ .} Una solución directa a esta ecuación implícita es H(λ+1)(incógnita)=1incógnitasλ(H(λ)(incógnita)H(λ)(sλ)PAG(sλ)PAG(incógnita)),{\displaystyle H^{(\lambda +1)}(X)={\frac {1}{X-s_{\lambda }}}\cdot \left(H^{(\lambda )}(X)-{\frac {H^{(\lambda )}(s_{\lambda })}{P(s_{\lambda })}}P(X)\right)\,,} donde la división polinómica es exacta.

Algorítmicamente, se usaría la división larga por el factor lineal como en el esquema de Horner o la regla de Ruffini para evaluar los polinomios ensλ{\displaystyle s_{\lambda }}y obtener los cocientes al mismo tiempo. Con los cocientes resultantes p ( X ) y h ( X ) como resultados intermedios , se obtiene el siguiente polinomio H comoPAG(incógnita)=pag(incógnita)(incógnitasλ)+PAG(sλ)H(λ)(incógnita)=h(incógnita)(incógnitasλ)+H(λ)(sλ)}H(λ+1)(z)=h(z)H(λ)(sλ)PAG(sλ)pag(z).{\displaystyle \left.{\begin{aligned}P(X)&=p(X)\cdot (X-s_{\lambda })+P(s_{\lambda })\\H^{(\lambda )}(X)&=h(X)\cdot (X-s_{\lambda })+H^{(\lambda )}(s_{\lambda })\\\end{aligned}}\right\}\implies H^{(\lambda +1)}(z)=h(z)-{\frac {H^{(\lambda )}(s_{\lambda })}{P(s_{\lambda })}}p(z).} Dado que el coeficiente de grado más alto se obtiene de P(X) , el coeficiente principal deH(λ+1)(incógnita){\displaystyle H^{(\lambda +1)}(X)}esH(λ)(sλ)PAG(sλ){\displaystyle -{\tfrac {H^{(\lambda )}(s_{\lambda })}{P(s_{\lambda })}}}. Si se divide esto, el polinomio H normalizado esH¯(λ+1)(incógnita)=1incógnitasλ(PAG(incógnita)PAG(sλ)H(λ)(sλ)H(λ)(incógnita))=1incógnitasλ(PAG(incógnita)PAG(sλ)H¯(λ)(sλ)H¯(λ)(incógnita)).{\displaystyle {\begin{aligned}{\bar {H}}^{(\lambda +1)}(X)&={\frac {1}{X-s_{\lambda }}}\cdot \left(P(X)-{\frac {P(s_{\lambda })}{H^{(\lambda )}(s_{\lambda })}}H^{(\lambda )}(X)\right)\\[1em]&={\frac {1}{X-s_{\lambda }}}\cdot \left(P(X)-{\frac {P(s_{\lambda })}{{\bar {H}}^{(\lambda )}(s_{\lambda })}}{\bar {H}}^{(\lambda )}(X)\right)\,.\end{aligned}}}

Etapa uno: proceso sin turnos

Paraλ=0,1,,METRO1{\displaystyle \lambda =0,1,\dots ,M-1}colocarsλ=0{\displaystyle s_{\lambda }=0}Generalmente, se elige M=5 para polinomios de grados moderados hasta n  = 50. Esta etapa no es necesaria solo por consideraciones teóricas, pero resulta útil en la práctica. En los polinomios H,  enfatiza el/los cofactor/es (del factor lineal) de la/s raíz/s más pequeña/s.

Segunda etapa: proceso de turno fijo

El desplazamiento para esta etapa se determina como un punto cercano a la raíz más pequeña del polinomio. Se ubica de forma casi aleatoria en el círculo con el radio de la raíz interior, que a su vez se estima como la solución positiva de la ecuación. Rnorte+|anorte1|Rnorte1++|a1|R=|a0|.{\displaystyle R^{n}+|a_{n-1}|\,R^{n-1}+\dots +|a_{1}|\,R=|a_{0}|\,.} Dado que el lado izquierdo es una función convexa y aumenta monótonamente de cero a infinito, esta ecuación es fácil de resolver, por ejemplo, mediante el método de Newton .

Ahora eliges=Rexp(iϕaleatorio){\displaystyle s=R\cdot \exp(i\,\phi _{\text{random}})}en el círculo de este radio. La sucesión de polinomiosH(λ+1)(z){\displaystyle H^{(\lambda +1)}(z)},λ=METRO,METRO+1,,L1{\displaystyle \lambda =M,M+1,\dots ,L-1}, se genera con el valor de desplazamiento fijosλ=s{\displaystyle s_{\lambda }=s}Esto crea una asimetría con respecto a la etapa anterior que aumenta la probabilidad de que el polinomio H se mueva hacia el cofactor de una sola raíz. Durante esta iteración, la aproximación actual para la raíz

tλ=sPAG(s)H¯(λ)(s){\displaystyle t_{\lambda }=s-{\frac {P(s)}{{\bar {H}}^{(\lambda )}(s)}}} se realiza el seguimiento. La segunda etapa se considera finalizada con éxito si se cumplen las condiciones. |tλ+1tλ|<12|tλ|{\displaystyle |t_{\lambda +1}-t_{\lambda }|<{\tfrac {1}{2}}\,|t_{\lambda }|}y|tλtλ1|<12|tλ1|{\displaystyle |t_{\lambda }-t_{\lambda -1}|<{\tfrac {1}{2}}\,|t_{\lambda -1}|} Se cumplen simultáneamente. Esto limita el tamaño relativo del paso de la iteración, asegurando que la secuencia de aproximación se mantenga dentro del rango de las raíces más pequeñas. Si no se obtiene éxito tras un cierto número de iteraciones, se prueba con un punto aleatorio diferente en el círculo. Normalmente se utilizan 9 iteraciones para polinomios de grado moderado, con una estrategia de duplicación en caso de múltiples fallos.

Tercera etapa: proceso de cambio variable

ElH(λ+1)(incógnita){\displaystyle H^{(\lambda +1)}(X)}Los polinomios ahora se generan utilizando los desplazamientos de variables.sλ,λ=L,L+1,{\displaystyle s_{\lambda },\quad \lambda =L,L+1,\dots }que son generados por sL=tL=sPAG(s)H¯(L)(s){\displaystyle s_{L}=t_{L}=s-{\frac {P(s)}{{\bar {H}}^{(L)}(s)}}} siendo la última estimación de raíz de la segunda etapa y sλ+1=sλPAG(sλ)H¯(λ+1)(sλ),λ=L,L+1,,{\displaystyle s_{\lambda +1}=s_{\lambda }-{\frac {P(s_{\lambda })}{{\bar {H}}^{(\lambda +1)}(s_{\lambda })}},\quad \lambda =L,L+1,\dots ,} dóndeH¯(λ+1)(z){\displaystyle {\bar {H}}^{(\lambda +1)}(z)}es el polinomio H normalizado , es decirH(λ)(z){\displaystyle H^{(\lambda )}(z)}dividido por su coeficiente principal.

Si el tamaño del paso en la tercera etapa no disminuye lo suficientemente rápido hasta cero, la segunda etapa se reinicia utilizando un punto aleatorio diferente. Si esto no tiene éxito después de varios reinicios, el número de pasos en la segunda etapa se duplica.

Convergencia

Se puede demostrar que, siempre que L se elija suficientemente grande, s λ siempre converge a una raíz de P.

El algoritmo converge para cualquier distribución de raíces, pero puede fallar al encontrar todas las raíces del polinomio. Además, la convergencia es ligeramente más rápida que la convergencia cuadrática del método de Newton-Raphson; sin embargo, utiliza una vez y media menos operaciones por paso: dos evaluaciones del polinomio para Newton frente a tres evaluaciones en la tercera etapa.

¿Qué es lo que le da poder al algoritmo?

Comparar con la iteración de Newton-Raphsonzi+1=ziPAG(zi)PAG(zi).{\displaystyle z_{i+1}=z_{i}-{\frac {P(z_{i})}{P^{\prime }(z_{i})}}.}

La iteración utiliza el P dado yPAG{\displaystyle \scriptstyle P^{\prime }}. Por el contrario, la tercera etapa de Jenkins-Traub sλ+1=sλPAG(sλ)H¯λ+1(sλ)=sλWλ(sλ)(Wλ)(sλ){\displaystyle s_{\lambda +1}=s_{\lambda }-{\frac {P(s_{\lambda })}{{\bar {H}}^{\lambda +1}(s_{\lambda })}}=s_{\lambda }-{\frac {W^{\lambda }(s_{\lambda })}{(W^{\lambda })'(s_{\lambda })}}}

es precisamente una iteración de Newton-Raphson realizada sobre ciertas funciones racionales . Más precisamente, el método de Newton-Raphson se realiza sobre una secuencia de funciones racionales. Wλ(z)=PAG(z)Hλ(z).{\displaystyle W^{\lambda }(z)={\frac {P(z)}{H^{\lambda }(z)}}.}

Paraλ{\displaystyle \lambda }suficientemente grande, PAG(z)H¯λ(z)=Wλ(z)Ldo(Hλ){\displaystyle {\frac {P(z)}{{\bar {H}}^{\lambda }(z)}}=W^{\lambda }(z)\,LC(H^{\lambda })} es lo más cercano que se desea a un polinomio de primer grado. zα1,{\displaystyle z-\alpha _{1},\,} dóndeα1{\displaystyle \alpha _{1}}es uno de los ceros dePAG{\displaystyle P}Aunque la etapa 3 es precisamente una iteración de Newton-Raphson, no se realiza ninguna diferenciación.

Análisis de los polinomios H

Dejarα1,,αnorte{\displaystyle \alpha _{1},\dots ,\alpha _{n}}sean las raíces de P ( X ). Los llamados factores de Lagrange de P(X) son los cofactores de estas raíces, PAGmetro(incógnita)=PAG(incógnita)PAG(αmetro)incógnitaαmetro.{\displaystyle P_{m}(X)={\frac {P(X)-P(\alpha _{m})}{X-\alpha _{m}}}.} Si todas las raíces son diferentes, entonces los factores de Lagrange forman una base del espacio de polinomios de grado como máximo n 1. Mediante el análisis del procedimiento de recursión se encuentra que los polinomios H tienen la representación de coordenadas   H(λ)(incógnita)=metro=1norte[κ=0λ1(αmetrosκ)]1PAGmetro(incógnita) .{\displaystyle H^{(\lambda )}(X)=\sum _{m=1}^{n}\left[\prod _{\kappa =0}^{\lambda -1}(\alpha _{m}-s_{\kappa })\right]^{-1}\,P_{m}(X)\ .} Cada factor de Lagrange tiene coeficiente principal 1, de modo que el coeficiente principal de los polinomios H es la suma de los coeficientes. Los polinomios H normalizados son, por lo tanto, H¯(λ)(incógnita)=metro=1norte[κ=0λ1(αmetrosκ)]1PAGmetro(incógnita)metro=1norte[κ=0λ1(αmetrosκ)]1=PAG1(incógnita)+metro=2norte[κ=0λ1α1sκαmetrosκ]PAGmetro(incógnita)1+metro=1norte[κ=0λ1α1sκαmetrosκ] .{\displaystyle {\bar {H}}^{(\lambda )}(X)={\frac {\sum _{m=1}^{n}\left[\prod _{\kappa =0}^{\lambda -1}(\alpha _{m}-s_{\kappa })\right]^{-1}\,P_{m}(X)}{\sum _{m=1}^{n}\left[\prod _{\kappa =0}^{\lambda -1}(\alpha _{m}-s_{\kappa })\right]^{-1}}}={\frac {P_{1}(X)+\sum _{m=2}^{n}\left[\prod _{\kappa =0}^{\lambda -1}{\frac {\alpha _{1}-s_{\kappa }}{\alpha _{m}-s_{\kappa }}}\right]\,P_{m}(X)}{1+\sum _{m=1}^{n}\left[\prod _{\kappa =0}^{\lambda -1}{\frac {\alpha _{1}-s_{\kappa }}{\alpha _{m}-s_{\kappa }}}\right]}}\ .}

Órdenes de convergencia

Si la condición|α1sκ|<minmetro=2,3,,norte|αmetrosκ|{\displaystyle |\alpha _{1}-s_{\kappa }|<\min {}_{m=2,3,\dots ,n}|\alpha _{m}-s_{\kappa }|}Se cumple para casi todas las iteraciones, los polinomios H normalizados convergerán al menos geométricamente haciaPAG1(incógnita){\displaystyle P_{1}(X)}.

Bajo la condición de que |α1|<|α2|=minmetro=2,3,,norte|αmetro|{\displaystyle |\alpha _{1}|<|\alpha _{2}|=\min {}_{m=2,3,\dots ,n}|\alpha _{m}|} uno obtiene las estimaciones asintóticas para

  • etapa 1:H(λ)(incógnita)=PAG1(incógnita)+O(|α1α2|λ).{\displaystyle H^{(\lambda )}(X)=P_{1}(X)+O\left(\left|{\frac {\alpha _{1}}{\alpha _{2}}}\right|^{\lambda }\right).}
  • para la etapa 2, si s está lo suficientemente cerca deα1{\displaystyle \alpha _{1}}:H(λ)(incógnita)=PAG1(incógnita)+O(|α1α2|METRO|α1sα2s|λMETRO){\displaystyle H^{(\lambda )}(X)=P_{1}(X)+O\left(\left|{\frac {\alpha _{1}}{\alpha _{2}}}\right|^{M}\cdot \left|{\frac {\alpha _{1}-s}{\alpha _{2}-s}}\right|^{\lambda -M}\right)}ysPAG(s)H¯(λ)(s)=α1+O(|α1s|).{\displaystyle s-{\frac {P(s)}{{\bar {H}}^{(\lambda )}(s)}}=\alpha _{1}+O\left(\ldots \cdot |\alpha _{1}-s|\right).}
  • y para la etapa 3:H(λ)(incógnita)=PAG1(incógnita)+O(κ=0λ1|α1sκα2sκ|){\displaystyle H^{(\lambda )}(X)=P_{1}(X)+O\left(\prod _{\kappa =0}^{\lambda -1}\left|{\frac {\alpha _{1}-s_{\kappa }}{\alpha _{2}-s_{\kappa }}}\right|\right)}ysλ+1=sλPAG(s)H¯(λ+1)(sλ)=α1+O(κ=0λ1|α1sκα2sκ||α1sλ|2|α2sλ|){\displaystyle s_{\lambda +1}=s_{\lambda }-{\frac {P(s)}{{\bar {H}}^{(\lambda +1)}(s_{\lambda })}}=\alpha _{1}+O\left(\prod _{\kappa =0}^{\lambda -1}\left|{\frac {\alpha _{1}-s_{\kappa }}{\alpha _{2}-s_{\kappa }}}\right|\cdot {\frac {|\alpha _{1}-s_{\lambda }|^{2}}{|\alpha _{2}-s_{\lambda }|}}\right)}dando lugar a un orden de convergencia superior al cuadrático deϕ2=1+ϕ2.618{\displaystyle \phi ^{2}=1+\phi \approx 2.618}, dóndeϕ=12(1+5){\displaystyle \phi ={\tfrac {1}{2}}(1+{\sqrt {5}})}es la proporción áurea .

Interpretación como iteración de potencia inversa

Todas las etapas del algoritmo complejo de Jenkins-Traub pueden representarse como el problema de álgebra lineal de determinar los valores propios de una matriz especial. Esta matriz es la representación de coordenadas de una aplicación lineal en el espacio n -dimensional de polinomios de grado n 1 o menor. La idea principal de esta aplicación es interpretar la factorización.   PAG(incógnita)=(incógnitaα1)PAG1(incógnita){\displaystyle P(X)=(X-\alpha _{1})\cdot P_{1}(X)} con una raízα1do{\displaystyle \alpha _{1}\in \mathbb {C} }yPAG1(incógnita)=PAG(incógnita)/(incógnitaα1){\displaystyle P_{1}(X)=P(X)/(X-\alpha _{1})}el factor restante de grado n 1 como la ecuación del vector propio para la multiplicación con la variable X , seguido del cálculo del resto con el divisor P ( X ),   METROincógnita(H)=(incógnitaH(incógnita))modPAG(incógnita).{\displaystyle M_{X}(H)=(X\cdot H(X)){\bmod {P}}(X)\,.} Esto transforma polinomios de grado como máximo n 1 en polinomios de grado como máximo n 1. Los valores propios de esta transformación son las raíces de P ( X ), ya que la ecuación del vector propio es:     0=(METROincógnitaαid)(H)=((incógnitaα)H)modPAG,{\displaystyle 0=(M_{X}-\alpha \cdot id)(H)=((X-\alpha )\cdot H){\bmod {P}}\,,} lo cual implica que(incógnitaα)H=doPAG(incógnita){\displaystyle (X-\alpha )\cdot H=C\cdot P(X)}, eso es,(incógnitaα){\displaystyle (X-\alpha )}es un factor lineal de P ( X ). En la base monomial, el mapeo linealMETROincógnita{\displaystyle M_{X}}está representada por una matriz compañera del polinomio P , como METROincógnita(H)=metro=0norte1Hmetroincógnitametro+1Hnorte1(incógnitanorte+metro=0norte1ametroincógnitametro)=metro=1norte1(Hmetro1ametroHnorte1)incógnitametroa0Hnorte1,{\displaystyle M_{X}(H)=\sum _{m=0}^{n-1}H_{m}X^{m+1}-H_{n-1}\left(X^{n}+\sum _{m=0}^{n-1}a_{m}X^{m}\right)=\sum _{m=1}^{n-1}(H_{m-1}-a_{m}H_{n-1})X^{m}-a_{0}H_{n-1}\,,}La matriz de transformación resultante es A=(000a0100a1010a2001anorte1).{\displaystyle A={\begin{pmatrix}0&0&\dots &0&-a_{0}\\1&0&\dots &0&-a_{1}\\0&1&\dots &0&-a_{2}\\\vdots &\vdots &\ddots &\vdots &\vdots \\0&0&\dots &1&-a_{n-1}\end{pmatrix}}\,.} A esta matriz se le aplica la iteración de potencia inversa en sus tres variantes: sin desplazamiento, desplazamiento constante y desplazamiento de Rayleigh generalizado, en las tres etapas del algoritmo. Resulta más eficiente realizar las operaciones de álgebra lineal mediante aritmética polinómica que mediante operaciones matriciales; sin embargo, las propiedades de la iteración de potencia inversa se mantienen.

Coeficientes reales

El algoritmo de Jenkins-Traub describió trabajos anteriores para polinomios con coeficientes complejos. Los mismos autores también crearon un algoritmo de tres etapas para polinomios con coeficientes reales. Véase Jenkins y Traub, « Un algoritmo de tres etapas para polinomios reales mediante iteración cuadrática» [ 5 ] . El algoritmo encuentra un factor lineal o cuadrático que opera completamente en aritmética real. Si se aplican los algoritmos para coeficientes complejos y reales al mismo polinomio real, el algoritmo para coeficientes reales es aproximadamente cuatro veces más rápido. El algoritmo para coeficientes reales siempre converge y su tasa de convergencia es superior a segundo orden.

Una conexión con el algoritmo QR desplazado

Existe una sorprendente conexión con el algoritmo QR desplazado para el cálculo de valores propios de matrices. Véase Dekker y Traub, El algoritmo QR desplazado para matrices hermíticas . [ 6 ] Nuevamente, los desplazamientos pueden considerarse como una iteración de Newton-Raphson sobre una secuencia de funciones racionales que convergen a un polinomio de primer grado.

Software y pruebas

El software para el algoritmo de Jenkins-Traub se publicó como Jenkins and Traub Algorithm 419: Zeros of a Complex Polynomial . [ 7 ] El software para el algoritmo real se publicó como Jenkins Algorithm 493: Zeros of a Real Polynomial . [ 8 ]

Estos métodos han sido ampliamente probados por numerosas personas. Tal como se predijo, presentan una convergencia más rápida que la cuadrática para todas las distribuciones de ceros.

Sin embargo, existen polinomios que pueden causar pérdida de precisión [ 9 ], como se ilustra en el siguiente ejemplo. El polinomio tiene todos sus ceros ubicados en dos semicírculos de radios diferentes. Wilkinson recomienda que, para una deflación estable, es conveniente calcular primero los ceros más pequeños. Los desplazamientos de la segunda etapa se eligen de manera que los ceros en el semicírculo más pequeño se encuentren primero. Después de la deflación, se sabe que el polinomio con los ceros en el semicírculo está mal condicionado si el grado es grande; véase Wilkinson, [ 10 ] pág.  64. El polinomio original era de grado 60 y sufrió una grave inestabilidad de deflación.

Referencias

  1. Press, WH, Teukolsky, SA, Vetterling, WT y Flannery, BP (2007), Numerical Recipes: The Art of Scientific Computing, 3.ª ed., Cambridge University Press, página 470.
  2. Jenkins, MA y Traub, JF (1970), Una iteración de desplazamiento de variables de tres etapas para ceros polinomiales y su relación con la iteración de Rayleigh generalizada , Numer. Math. 14, 252–263.
  3. Ralston, A. y Rabinowitz, P. (1978), Un primer curso de análisis numérico, 2.ª ed., McGraw-Hill, Nueva York.
  4. Traub, JF (1966), Una clase de funciones de iteración globalmente convergentes para la solución de ecuaciones polinomiales , Math. Comp., 20(93), 113–138.
  5. Jenkins, MA y Traub, JF (1970), Un algoritmo de tres etapas para polinomios reales mediante iteración cuadrática , SIAM J. Numer. Anal., 7(4), 545–566.
  6. Dekker, TJ y Traub, JF (1971), El algoritmo QR desplazado para matrices hermíticas , Lin. Algebra Appl., 4(2), 137–154.
  7. Jenkins, MA y Traub, JF (1972), Algoritmo 419: Ceros de un polinomio complejo , Comm. ACM, 15, 97–99.
  8. Jenkins, MA (1975), Algoritmo 493: Ceros de un polinomio real , ACM TOMS, 1, 178–189.
  9. "Entrevista de historia oral a William Kahan realizada por Thomas Haigh" . The History of Numerical Analysis and Scientific Computing . Filadelfia, PA. 8 de agosto de 2005. Consultado el 3 de diciembre de 2021 .
  10. Wilkinson, JH (1963), Errores de redondeo en procesos algebraicos, Prentice Hall, Englewood Cliffs, NJ
  • Aplicación gratuita para Windows que se puede descargar y que utiliza el método de Jenkins-Traub para polinomios con coeficientes reales y complejos.
  • RPoly++ Una implementación en C++ optimizada para SSE del algoritmo RPOLY.