Método de Horner - Horner's method

Em matemática e ciência da computação , o método de Horner (ou esquema de Horner ) é um algoritmo para avaliação polinomial . Embora tenha o nome de William George Horner , este método é muito mais antigo, pois foi atribuído a Joseph-Louis Lagrange pelo próprio Horner, e pode remontar a muitas centenas de anos a matemáticos chineses e persas. Após a introdução dos computadores, esse algoritmo tornou-se fundamental para uma computação eficiente com polinômios.

O algoritmo é baseado na regra de Horner:

Isso permite a avaliação de um polinômio de grau n com apenas multiplicações e adições. Isso é ótimo, uma vez que existem polinômios de grau n que não podem ser avaliados com menos operações aritméticas

Alternativamente, o método de Horner também se refere a um método para aproximar as raízes de polinômios, descrito por Horner em 1819. É uma variante do método de Newton-Raphson tornado mais eficiente para cálculos manuais pela aplicação da regra de Horner. Foi amplamente utilizado até que os computadores se tornaram amplamente utilizados por volta de 1970.

Avaliação polinomial e divisão longa

Dado o polinômio

onde são coeficientes constantes, o problema é avaliar o polinômio em um valor específico de

Para isso, uma nova sequência de constantes é definida recursivamente da seguinte forma:

Então é o valor de .

Para ver por que isso funciona, o polinômio pode ser escrito na forma

Assim, ao substituir iterativamente o na expressão,

Agora, pode ser provado isso;

Esta expressão constitui a aplicação prática de Horner, pois oferece uma maneira muito rápida de determinar o resultado de;

com b 0 (que é igual ap (x 0 )) sendo o resto da divisão, como é demonstrado pelos exemplos abaixo. se x 0 é a raiz de p (x), então b 0 = 0 (significando que o resto é 0), o que significa que você pode fatorar p (x) com (xx 0 ).
Quanto a encontrar os valores de b consecutivos, você começa determinando b n , que é simplesmente igual a a n . Em seguida, você desce até os outros b's, usando a fórmula;

até você chegar em b 0 .

Exemplos

Avalie para

Usamos a divisão sintética da seguinte forma:

 x0x3    x2    x1    x0
 3 │   2    −6     2    −1
   │         6     0     6
   └────────────────────────
       2     0     2     5

As entradas na terceira linha são a soma das duas primeiras. Cada entrada na segunda linha é o produto do valor x (3 neste exemplo) com a entrada da terceira linha imediatamente à esquerda. As entradas na primeira linha são os coeficientes do polinômio a ser avaliado. Então, o resto da divisão por é 5.

Mas pelo teorema do resto polinomial , sabemos que o resto é . Assim

Neste exemplo, se podemos ver isso , as entradas na terceira linha. Portanto, a divisão sintética é baseada no método de Horner.

Como consequência do teorema do resto do polinômio, as entradas na terceira linha são os coeficientes do polinômio de segundo grau, o quociente de na divisão por . O restante é 5. Isso torna o método de Horner útil para a divisão longa polinomial .

Dividir por :

 2 │   1    −6    11    −6
   │         2    −8     6
   └────────────────────────
       1    −4     3     0

O quociente é .

Deixe e . Divida por usando o método de Horner.


  0.5 │ 4  -6   0   3  -5
      │     2  -2  -1   1
└───────────────────────
        2  -2  -1   1  -2


A terceira linha é a soma das duas primeiras linhas, dividida por 2. Cada entrada na segunda linha é o produto de 1 com a entrada da terceira linha à esquerda. A resposta é

Eficiência

A avaliação usando a forma monomial de um polinômio grau n requer no máximo n adições e ( n 2  +  n ) / 2 multiplicações, se as potências forem calculadas por multiplicação repetida e cada monômio for avaliado individualmente. (Isso pode ser reduzido a n adições e 2 n  - 1 multiplicações avaliando as potências de x iterativamente.) Se os dados numéricos são representados em termos de dígitos (ou bits), então o algoritmo ingênuo também envolve o armazenamento de aproximadamente 2 n vezes o número de bits de x (o polinômio avaliado tem magnitude aproximada x n , e deve-se também armazenar o próprio x n ). Em contraste, o método de Horner requer apenas n adições en multiplicações, e seus requisitos de armazenamento são apenas n vezes o número de bits de x . Alternativamente, o método de Horner pode ser calculado com n fundido multiplicação-adições . O método de Horner também pode ser estendido para avaliar as primeiras k derivadas do polinômio com acréscimos e multiplicações de kn .

O método de Horner é ótimo, no sentido de que qualquer algoritmo para avaliar um polinômio arbitrário deve usar pelo menos o mesmo número de operações. Alexander Ostrowski provou em 1954 que o número de acréscimos necessários é mínimo. Victor Pan provou em 1966 que o número de multiplicações é mínimo. No entanto, quando x é uma matriz, o método de Horner não é o ideal .

Isso pressupõe que o polinômio é avaliado na forma monomial e nenhum pré-condicionamento da representação é permitido, o que faz sentido se o polinômio for avaliado apenas uma vez. No entanto, se o pré-condicionamento for permitido e o polinômio for avaliado muitas vezes, algoritmos mais rápidos são possíveis . Eles envolvem uma transformação da representação do polinômio. Em geral, um polinômio grau n pode ser avaliado usando apenas n / 2 +2 multiplicações e n adições.

Avaliação paralela

Uma desvantagem da regra de Horner é que todas as operações são sequencialmente dependentes , portanto, não é possível tirar vantagem do paralelismo de nível de instrução em computadores modernos. Na maioria das aplicações onde a eficiência da avaliação polinomial é importante, muitos polinômios de baixa ordem são avaliados simultaneamente (para cada pixel ou polígono em computação gráfica, ou para cada quadrado de grade em uma simulação numérica), portanto, não é necessário encontrar paralelismo dentro de um avaliação de polinômio único.

Se, no entanto, alguém está avaliando um único polinômio de ordem muito alta, pode ser útil dividi-lo da seguinte forma:

De forma mais geral, o somatório pode ser dividido em k partes:

onde as somas internas podem ser avaliadas usando instâncias paralelas separadas do método de Horner. Isso requer um pouco mais de operações do que o método básico de Horner, mas permite a execução de SIMD k -way da maioria delas. Os compiladores modernos geralmente avaliam os polinômios dessa maneira quando vantajosos, embora para cálculos de ponto flutuante isso exija a habilitação da matemática reassociativa (não segura).

Aplicação para multiplicação e divisão de ponto flutuante

O método de Horner é um método rápido e com código eficiente para multiplicação e divisão de números binários em um microcontrolador sem multiplicador de hardware . Um dos números binários a ser multiplicado é representado como um polinômio trivial, onde (usando a notação acima) , e . Então, x (ou x elevado a alguma potência) é repetidamente fatorado. Neste sistema numérico binário (base 2) , então potências de 2 são repetidamente fatoradas.

Exemplo

Por exemplo, para localizar o produto de dois números (0.15625) e m :

Método

Para encontrar o produto de dois números binários d e m :

1. Um registrador contendo o resultado intermediário é inicializado em d .
2. Comece com o bit diferente de zero menos significativo (mais à direita) em m .
2b. Conte (à esquerda) o número de posições de bit até o próximo bit diferente de zero mais significativo. Se não houver mais bits significativos, tome o valor da posição do bit atual.
2c. Usando esse valor, execute uma operação de deslocamento para a esquerda por esse número de bits no registro que contém o resultado intermediário
3. Se todos os bits diferentes de zero foram contados, o registrador de resultado intermediário agora contém o resultado final. Caso contrário, adicione d ao resultado intermediário e continue na etapa 2 com o próximo bit mais significativo em m .

Derivação

Em geral, para um número binário com valores de bit ( ), o produto é

Nesta fase do algoritmo, é necessário que os termos com coeficientes de valor zero sejam descartados, de modo que apenas coeficientes binários iguais a um sejam contados, portanto, o problema de multiplicação ou divisão por zero não é um problema, apesar desta implicação no equação fatorada:

Todos os denominadores são iguais a um (ou o termo está ausente), então isso se reduz a

ou de forma equivalente (conforme consistente com o "método" descrito acima)

Em matemática binária (base 2), a multiplicação por uma potência de 2 é meramente uma operação de mudança de registro . Assim, a multiplicação por 2 é calculada na base 2 por um deslocamento aritmético . O fator (2 −1 ) é um deslocamento aritmético à direita , a (0) resulta em nenhuma operação (uma vez que 2 0 = 1 é o elemento de identidade multiplicativo ) e a (2 1 ) resulta em um deslocamento aritmético à esquerda. O produto da multiplicação agora pode ser calculado rapidamente usando apenas operações de deslocamento aritmético, adição e subtração.

O método é particularmente rápido em processadores que suportam um deslocamento-e-adição-acumulação de instrução única. Comparado a uma biblioteca de ponto flutuante C, o método de Horner sacrifica alguma precisão, no entanto, é nominalmente 13 vezes mais rápido (16 vezes mais rápido quando o formulário de " dígito sinalizado canônico " (CSD) é usado) e usa apenas 20% do espaço de código.

Outras aplicações

Método de Horner pode ser usado para converter entre diferentes posicionais sistemas numerais - no caso em que x é a base do sistema de números, e as de i coeficientes são os dígitos do base- x representação de um determinado número - e também pode ser usado se x é uma matriz , caso em que o ganho em eficiência computacional é ainda maior. No entanto, para tais casos, métodos mais rápidos são conhecidos.

Descoberta de raiz polinomial

Usando o algoritmo de divisão longa em combinação com o método de Newton , é possível aproximar as raízes reais de um polinômio. O algoritmo funciona da seguinte maneira. Dado um polinômio de grau com zeros, faça uma suposição inicial como essa . Agora repita as duas etapas a seguir:

  1. Usando o método de Newton , encontrar o maior de zero de usar o palpite .
  2. Usando o método de Horner, divida para obter . Retorne à etapa 1, mas use o polinômio e a estimativa inicial .

Essas duas etapas são repetidas até que todos os zeros reais sejam encontrados para o polinômio. Se os zeros aproximados não forem precisos o suficiente, os valores obtidos podem ser usados ​​como estimativas iniciais para o método de Newton, mas usando o polinômio completo em vez dos polinômios reduzidos.

Exemplo

Descoberta de raiz polinomial usando o método de Horner

Considere o polinômio

que pode ser expandido para

Do exposto, sabemos que a maior raiz desse polinômio é 7, então podemos fazer uma estimativa inicial de 8. Usando o método de Newton, o primeiro zero de 7 é encontrado como mostrado em preto na figura à direita. O próximo é dividido por para obter

que é desenhada em vermelho na figura à direita. O método de Newton é usado para encontrar o maior zero desse polinômio com uma estimativa inicial de 7. O maior zero desse polinômio que corresponde ao segundo maior zero do polinômio original é encontrado em 3 e é circulado em vermelho. O polinômio de grau 5 agora é dividido por para obter

que é mostrado em amarelo. O zero para este polinômio é encontrado em 2 novamente usando o método de Newton e é circulado em amarelo. O método de Horner agora é usado para obter

que é mostrado em verde e encontrado para ter um zero em -3. Este polinômio é ainda mais reduzido a

que é mostrado em azul e resulta em zero de −5. A raiz final do polinômio original pode ser encontrada usando o zero final como uma estimativa inicial para o método de Newton ou reduzindo e resolvendo a equação linear. Como pode ser visto, as raízes esperadas de −8, −5, −3, 2, 3 e 7 foram encontradas.

Diferença dividida de um polinômio

O método de Horner pode ser modificado para calcular a diferença dividida Dado o polinômio (como antes)

proceda da seguinte forma

Na conclusão, temos

Este cálculo da diferença dividida está sujeito a menos erros de arredondamento do que a avaliação e separadamente, especialmente quando . Substituir neste método dá , a derivada de .

História

O algoritmo de Qin Jiushao para resolver o resultado da equação polinomial quadrática : x = 840

O artigo de Horner, intitulado "Um novo método de resolver equações numéricas de todas as ordens, por aproximação contínua", foi lido perante a Royal Society of London, em sua reunião em 1 de julho de 1819, com uma sequência em 1823. Artigo de Horner na Parte II of Philosophical Transactions of the Royal Society of London para 1819 foi calorosamente e amplamente recebido por um revisor na edição de The Monthly Review: ou, Literary Journal de abril de 1820; em comparação, um artigo técnico de Charles Babbage é descartado secamente nesta revisão. A sequência de revisões em The Monthly Review de setembro de 1821 conclui que Holdred foi a primeira pessoa a descobrir uma solução prática direta e geral de equações numéricas. Fuller mostrou que o método no artigo de Horner de 1819 difere do que posteriormente ficou conhecido como "método de Horner" e que, em conseqüência, a prioridade desse método deveria ir para Holdred (1820).

Ao contrário de seus contemporâneos ingleses, Horner baseou-se na literatura continental, notadamente na obra de Arbogast . Horner também é conhecido por ter feito uma leitura atenta do livro de John Bonneycastle sobre álgebra, embora tenha negligenciado a obra de Paolo Ruffini .

Embora Horner seja creditado por tornar o método acessível e prático, ele já era conhecido muito antes de Horner. Em ordem cronológica inversa, o método de Horner já era conhecido por:

Qin Jiushao , em seu Shu Shu Jiu Zhang ( Tratado de Matemática em Nove Seções ; 1247), apresenta um portfólio de métodos do tipo Horner para resolver equações polinomiais, que foi baseado em trabalhos anteriores do matemático Jia Xian da dinastia Song do século XI ; por exemplo, um método é especificamente adequado para bi-quintics, do qual Qin dá um exemplo, de acordo com o costume chinês de estudos de caso. Yoshio Mikami em Desenvolvimento da Matemática na China e no Japão (Leipzig 1913) escreveu:

"... quem pode negar o fato de o processo ilustre de Horner ter sido usado na China pelo menos quase seis longos séculos antes do que na Europa ... É claro que não pretendemos de forma alguma atribuir a invenção de Horner a uma origem chinesa, mas o lapso de tempo torna não de todo impossível que os europeus pudessem conhecer o método chinês de forma direta ou indireta. "

Ulrich Libbrecht concluiu: É óbvio que este procedimento é uma invenção chinesa ... o método não era conhecido na Índia . Ele disse, Fibonacci provavelmente aprendeu com os árabes, que talvez tenham emprestado dos chineses. A extração de raízes quadradas e cúbicas ao longo de linhas semelhantes já foi discutida por Liu Hui em conexão com os Problemas IV.16 e 22 em Jiu Zhang Suan Shu , enquanto Wang Xiaotong no século 7 supõe que seus leitores podem resolver cúbicas por um método de aproximação descrito em seu livro Jigu Suanjing .

Veja também

Notas

Referências

links externos