En matemáticas y ciencias de la computación , el método de Horner (o esquema de Horner ) es un algoritmo para la evaluación de polinomios . Aunque lleva el nombre de William George Horner , este método es mucho más antiguo, ya que el propio Horner lo ha atribuido a Joseph-Louis Lagrange , y se remonta a muchos cientos de años atrás, a los matemáticos chinos y persas. [1] Después de la introducción de las computadoras, este algoritmo se volvió fundamental para calcular de manera eficiente con polinomios.
El algoritmo se basa en la regla de Horner , en la que un polinomio se escribe en forma anidada :
Esto permite la evaluación de un polinomio de grado n con solo multiplicaciones y sumas. Esto es óptimo, ya que hay polinomios de grado n que no se pueden evaluar con menos operaciones aritméticas. [2]
Alternativamente, el método de Horner yEl método de Horner-Ruffini también se refiere a un método para aproximar las raíces de polinomios, descrito por Horner en 1819. Es una variante delmétodo de Newton-Raphsonque se volvió más eficiente para el cálculo manual mediante la aplicación de la regla de Horner. Fue ampliamente utilizado hasta que las computadoras comenzaron a usarse de manera generalizada alrededor de 1970.
Dado el polinomio donde son coeficientes constantes, el problema es evaluar el polinomio en un valor específico de
Para ello se define recursivamente una nueva secuencia de constantes de la siguiente manera:
Entonces el valor de es .
Para ver por qué funciona esto, el polinomio se puede escribir en la forma
Así, sustituyendo iterativamente en la expresión,
Ahora bien, se puede demostrar que;
Esta expresión constituye la aplicación práctica de Horner, ya que ofrece una forma muy rápida de determinar el resultado de; donde (que es igual a ) es el resto de la división, como se demuestra con los ejemplos siguientes. Si es una raíz de , entonces (lo que significa que el resto es ), lo que significa que se puede factorizar como .
Para encontrar los valores consecutivos, se comienza determinando , que es simplemente igual a . Luego se trabaja recursivamente utilizando la fórmula: hasta llegar a .
Evaluar para .
Utilizamos la división sintética de la siguiente manera:
x0 │x3x2x1x0 3 │ 2 −6 2 −1 │ 6 0 6 └──────────────────────── 2 0 2 5
Las entradas de la tercera fila son la suma de las de las dos primeras. Cada entrada de la segunda fila es el producto del valor x (3 en este ejemplo) con la entrada de la tercera fila inmediatamente a la izquierda. Las entradas en la primera fila son los coeficientes del polinomio que se evaluará. Entonces, el resto de la división por es5 .
Pero por el teorema del resto polinomial , sabemos que el resto es . Por lo tanto, .
En este ejemplo, si podemos ver que , las entradas en la tercera fila. Por lo tanto, la división sintética (que en realidad fue inventada y publicada por Ruffini 10 años antes de la publicación de Horner) es más fácil de usar; se puede demostrar que es equivalente al método de Horner.
Como consecuencia del teorema del resto polinómico, las entradas en la tercera fila son los coeficientes del polinomio de segundo grado, el cociente de al dividir por . El resto es5. Esto hace que el método de Horner sea útil para la división larga de polinomios .
Dividir por :
2 │ 1 −6 11 −6 │ 2 −8 6 └──────────────────────── 1 −4 3 0
El cociente es .
Sea y . Dividamos utilizando el método de Horner.
0,5 │ 4 −6 0 3 −5 │ 2 −2 −1 1 └─────────────────────── 2 −2 −1 1 −4
La tercera fila es la suma de las dos primeras filas, dividida por2. Cada entrada en la segunda fila es el producto de1 con la entrada de la tercera fila a la izquierda. La respuesta es
La evaluación mediante la forma monomial de un polinomio de grado requiere, como máximo, sumas y multiplicaciones, si las potencias se calculan mediante multiplicaciones repetidas y cada monomio se evalúa individualmente. El costo se puede reducir a sumas y multiplicaciones evaluando las potencias de por iteración.
Si los datos numéricos se representan en términos de dígitos (o bits), entonces el algoritmo ingenuo también implica almacenar aproximadamente veces el número de bits de : el polinomio evaluado tiene una magnitud aproximada de , y uno también debe almacenarse a sí mismo. Por el contrario, el método de Horner requiere solo adiciones y multiplicaciones, y sus requisitos de almacenamiento son solo veces el número de bits de . Alternativamente, el método de Horner se puede calcular con multiplicaciones-sumas fusionadas . El método de Horner también se puede extender para evaluar las primeras derivadas del polinomio con adiciones y multiplicaciones. [3]
El método de Horner es óptimo, en el sentido de que cualquier algoritmo para evaluar un polinomio arbitrario debe utilizar al menos tantas operaciones como sea necesario. Alexander Ostrowski demostró en 1954 que el número de adiciones necesarias es mínimo. [4] Victor Pan demostró en 1966 que el número de multiplicaciones es mínimo. [5] Sin embargo, cuando es una matriz, el método de Horner no es óptimo .
Esto supone que el polinomio se evalúa en forma monomial y no se permite ningún preacondicionamiento de la representación, lo que tiene sentido si el polinomio se evalúa solo una vez. Sin embargo, si se permite el preacondicionamiento y el polinomio se evaluará muchas veces, entonces son posibles algoritmos más rápidos . Implican una transformación de la representación del polinomio. En general, un polinomio de grado 1 se puede evaluar utilizando solo ⌊ n /2 ⌋ +2 multiplicaciones y sumas. [6]
Una desventaja de la regla de Horner es que todas las operaciones dependen secuencialmente , por lo que no es posible aprovechar el paralelismo a nivel de instrucción en las computadoras modernas. En la mayoría de las aplicaciones donde importa la eficiencia de la evaluación de polinomios, se evalúan simultáneamente muchos polinomios de orden bajo (para cada píxel o polígono en gráficos de computadora, o para cada cuadrado de la cuadrícula en una simulación numérica), por lo que no es necesario encontrar paralelismo dentro de una sola evaluación de polinomios.
Sin embargo, si uno está evaluando un solo polinomio de orden muy alto, puede ser útil dividirlo de la siguiente manera:
En términos más generales, la suma se puede dividir en k partes: donde las sumas internas se pueden evaluar utilizando instancias paralelas separadas del método de Horner. Esto requiere un poco más de operaciones que el método básico de Horner, pero permite la ejecución SIMD de k vías de la mayoría de ellas. Los compiladores modernos generalmente evalúan polinomios de esta manera cuando es ventajoso, aunque para cálculos de punto flotante esto requiere habilitar matemáticas reasociativas (inseguras) [ cita requerida ] .
El método de Horner es un método rápido y eficiente en el uso del código para la multiplicación y división de números binarios en un microcontrolador sin multiplicador de hardware . Uno de los números binarios que se van a multiplicar se representa como un polinomio trivial, donde (usando la notación anterior) , y . Luego, x (o x elevado a alguna potencia) se factoriza repetidamente. En este sistema de numeración binario (base 2), , por lo que las potencias de 2 se factorizan repetidamente.
Por ejemplo, para encontrar el producto de dos números (0,15625) y m :
Para encontrar el producto de dos números binarios d y m :
En general, para un número binario con valores de bit ( ) el producto es En esta etapa del algoritmo, se requiere que se eliminen los términos con coeficientes de valor cero, de modo que solo se cuenten los coeficientes binarios iguales a uno, por lo que el problema de la multiplicación o división por cero no es un problema, a pesar de esta implicación en la ecuación factorizada:
Todos los denominadores son iguales a uno (o el término está ausente), por lo que esto se reduce a o de manera equivalente (como es consistente con el "método" descrito anteriormente)
En matemáticas binarias (base 2), la multiplicación por una potencia de 2 es simplemente una operación de desplazamiento de registro . Por lo tanto, la multiplicación por 2 se calcula en base 2 mediante un desplazamiento aritmético . El factor (2 −1 ) es un desplazamiento aritmético a la derecha , un (0) no da como resultado ninguna operación (ya que 2 0 = 1 es el elemento de identidad multiplicativo ) y un (2 1 ) da como resultado un desplazamiento aritmético a la izquierda. El producto de la multiplicación ahora se puede calcular rápidamente utilizando solo operaciones de desplazamiento aritmético, suma y resta.
El método es particularmente rápido en procesadores que admiten una instrucción única de desplazamiento y adición-acumulación. En comparación con una biblioteca de punto flotante de C, el método de Horner sacrifica algo de precisión, sin embargo, nominalmente es 13 veces más rápido (16 veces más rápido cuando se utiliza la forma de " dígito con signo canónico " (CSD)) y utiliza solo el 20% del espacio de código. [7]
El método de Horner se puede utilizar para convertir entre diferentes sistemas numéricos posicionales (en cuyo caso x es la base del sistema numérico y los coeficientes a i son los dígitos de la representación en base x de un número dado) y también se puede utilizar si x es una matriz , en cuyo caso la ganancia en eficiencia computacional es aún mayor. Sin embargo, para tales casos se conocen métodos más rápidos . [8]
Utilizando el algoritmo de división larga en combinación con el método de Newton , es posible aproximar las raíces reales de un polinomio. El algoritmo funciona de la siguiente manera. Dado un polinomio de grado cero, haga una estimación inicial tal que . Ahora repita los dos pasos siguientes:
Estos dos pasos se repiten hasta que se encuentran todos los ceros reales del polinomio. Si los ceros aproximados no son lo suficientemente precisos, los valores obtenidos se pueden utilizar como estimaciones iniciales para el método de Newton, pero utilizando el polinomio completo en lugar de los polinomios reducidos. [9]
Considere el polinomio que se puede expandir a
De lo anterior sabemos que la raíz más grande de este polinomio es 7, por lo que podemos hacer una estimación inicial de 8. Usando el método de Newton, el primer cero de 7 se encuentra como se muestra en negro en la figura de la derecha. Luego se divide por para obtener que se dibuja en rojo en la figura de la derecha. El método de Newton se usa para encontrar el cero más grande de este polinomio con una estimación inicial de 7. El cero más grande de este polinomio que corresponde al segundo cero más grande del polinomio original se encuentra en 3 y está rodeado en rojo. El polinomio de grado 5 ahora se divide por para obtener que se muestra en amarillo. El cero para este polinomio se encuentra en 2 nuevamente usando el método de Newton y está rodeado en amarillo. Ahora se usa el método de Horner para obtener que se muestra en verde y se encuentra que tiene un cero en −3. Este polinomio se reduce aún más a que se muestra en azul y produce un cero de −5. La raíz final del polinomio original se puede hallar utilizando el cero final como estimación inicial para el método de Newton o reduciendo y resolviendo la ecuación lineal . Como se puede observar, se hallaron las raíces esperadas de −8, −5, −3, 2, 3 y 7.
El método de Horner se puede modificar para calcular la diferencia dividida. Dado el polinomio (como antes), proceda de la siguiente manera [10]
Al finalizar, tenemos Este cálculo de la diferencia dividida está sujeto a un menor error de redondeo que evaluar y por separado, particularmente cuando . Sustituyendo en este método se obtiene , la derivada de .
El artículo de Horner, titulado "Un nuevo método para resolver ecuaciones numéricas de todos los órdenes, mediante aproximación continua", [12] fue leído ante la Royal Society de Londres, en su reunión del 1 de julio de 1819, con una secuela en 1823. [12] El artículo de Horner en la Parte II de Philosophical Transactions of the Royal Society of London de 1819 fue recibido calurosamente y expansivamente por un crítico [ enlace muerto permanente ] en el número de The Monthly Review: or, Literary Journal de abril de 1820; en comparación, un artículo técnico de Charles Babbage es rechazado bruscamente en esta reseña. La secuencia de reseñas en The Monthly Review de septiembre de 1821 concluye que Holdred fue la primera persona en descubrir una solución práctica directa y general de ecuaciones numéricas. Fuller [13] demostró que el método del artículo de Horner de 1819 difiere de lo que posteriormente se conoció como "método de Horner" y que, en consecuencia, la prioridad de este método debería recaer en Holdred (1820).
A diferencia de sus contemporáneos ingleses, Horner se basó en la literatura continental, en particular en la obra de Arbogast . También se sabe que Horner leyó atentamente el libro de álgebra de John Bonneycastle, aunque descuidó el trabajo de Paolo Ruffini .
Aunque a Horner se le atribuye haber hecho accesible y práctico el método, éste ya se conocía mucho antes que él. En orden cronológico inverso, el método de Horner ya se conocía por:
Qin Jiushao , en su Shu Shu Jiu Zhang ( Tratado matemático en nueve secciones ; 1247), presenta una serie de métodos de tipo Horner para resolver ecuaciones polinómicas, que se basaban en trabajos anteriores del matemático de la dinastía Song del siglo XI , Jia Xian ; por ejemplo, un método es específicamente adecuado para las biquinticas, de las que Qin da un ejemplo, de acuerdo con la costumbre china de entonces de los estudios de casos. Yoshio Mikami en Development of Mathematics in China and Japan (Leipzig 1913) escribió:
"... ¿Quién puede negar el hecho de que el ilustre proceso de Horner se utilizó en China al menos casi seis siglos antes que en Europa? ... Por supuesto, no tenemos la intención de atribuir la invención de Horner a un origen chino, pero el lapso de tiempo suficientemente largo hace que no sea del todo imposible que los europeos pudieran haber conocido el método chino de manera directa o indirecta". [20]
Ulrich Libbrecht concluyó: Es obvio que este procedimiento es una invención china... el método no era conocido en la India . Dijo que Fibonacci probablemente lo aprendió de los árabes, quienes tal vez lo tomaron prestado de los chinos. [21] La extracción de raíces cuadradas y cúbicas siguiendo líneas similares ya fue discutida por Liu Hui en conexión con los Problemas IV.16 y 22 en Jiu Zhang Suan Shu , mientras que Wang Xiaotong en el siglo VII supone que sus lectores pueden resolver ecuaciones cúbicas mediante un método de aproximación descrito en su libro Jigu Suanjing .
{{cite journal}}
: CS1 maint: numeric names: authors list (link){{cite book}}
: CS1 maint: location missing publisher (link)