Interpolação Polinomial: Lagrange e Newton
Objetivos de Aprendizagem
- Provar que nós distintos determinam um único polinômio de grau no máximo , e explicar por que o sistema de Vandermonde é o jeito errado de calculá-lo.
- Construir o interpolador na forma de Lagrange, na forma baricêntrica e na forma de Newton com diferenças divididas, e acrescentar um nó à forma de Newton.
- Enunciar a fórmula do erro de interpolação com suas hipóteses e usá-la para limitar um erro.
- Medir o fenômeno de Runge e separar a divergência verdadeira do polinômio do arredondamento amplificado pela constante de Lebesgue.
- Dizer o que os nós de Chebyshev consertam e o que não consertam.
Contexto e Motivação
Um polinômio de Taylor coincide com a função em um ponto. Um interpolador coincide em vários, e taylor-and-maclaurin-series-with-error-bounds já mostrou a interpolação em nós de Chebyshev batendo o polinômio de Taylor de mesmo grau para por um fator de mais de 250. A interpolação também é a matéria-prima da quadratura em trapezoid-and-simpson-rules. A mesma fórmula de Lagrange roda sobre corpos finitos em códigos Reed-Solomon e no compartilhamento de segredos de Shamir, onde a aritmética é exata e nada do que esta lição diz sobre arredondamento se aplica.
Em ponto flutuante, três coisas podem dar errado mesmo com o polinômio sendo único: a base pode ser mal condicionada no sentido de the-matrix-condition-number, a posição dos nós pode fazer o próprio polinômio divergir, e o arredondamento dos dados pode ser amplificado. São falhas separadas, e esta lição mede cada uma.
Teoria Central
Existência e unicidade
Dados nós distintos e valores quaisquer , existe exatamente um polinômio de grau no máximo com . Unicidade: a diferença de dois desses polinômios tem grau no máximo e raízes, logo é zero. Existência: a forma de Lagrange abaixo o constrói. Os nós precisam ser distintos, já que um nó repetido com dois valores diferentes não admite função nenhuma.
Assim, o "polinômio de Lagrange" e o "polinômio de Newton" são um único polinômio escrito em duas bases. Só o comportamento numérico difere. Escrevê-lo na base de monômios significa resolver um sistema de Vandermonde , cujo número de condição cresce rápido: para 21 nós, vale com nós equiespaçados em e em .
Formas de Lagrange e baricêntrica
Os polinômios cardinais são , com igual a 1 quando e 0 caso contrário, então . Avaliado diretamente, isso custa por ponto. Com pesos e , temos . A função constante 1 é o próprio interpolador, então . Dividir cancela e dá a fórmula baricêntrica, para que não seja nó:
A preparação é e cada avaliação é . É isso que scipy.interpolate.BarycentricInterpolator calcula.
Forma de Newton e diferenças divididas
Escreva . Os coeficientes são as diferenças divididas , definidas por e
A tabela custa , e a multiplicação aninhada avalia em . Acrescentar um nó adiciona uma linha, com custo , e não muda nenhum anterior.
A fórmula do erro
Hipóteses. , os nós são pontos distintos de e . Conclusão. Existe , que depende de , com
Ela se lê como o resto de Taylor com trocado por . Dois fatores competem: a derivada pertence a , e pertence aos nós.
Nós e a constante de Lebesgue
Em , os nós de Chebyshev , , são os zeros de . Eles dão , o menor valor que qualquer escolha de nós consegue atingir. Nós equiespaçados deixam pequeno no meio e grande nas pontas: para , vale perto de e perto das pontas, contra um máximo de com Chebyshev ( em ). Em , mapeie por .
Os nós também fixam o condicionamento do mapa dos dados para o polinômio. Mudar os valores em no máximo muda em no máximo , onde é a constante de Lebesgue:
textn Lambda_n equiespaçados Lambda_n Chebyshev 10 2.99e+01 2.49 20 1.10e+04 2.90 40 4.69e+09 3.33 60 2.98e+15 3.58
Para analítica num intervalo aberto que contém , a interpolação em nós de Chebyshev converge geometricamente: o erro máximo é no máximo para certos , . Para nós equiespaçados não vale nada parecido.
Exemplos Resolvidos
Exemplo 1: um polinômio, três formas, um nó novo
Interpole . Os denominadores são , logo . Em as somas baricêntricas são
A tabela de diferenças divididas, com os coeficientes de Newton no topo de cada coluna:
textx f f[,] f[,,] f[,,,] 0 1 2 -3/2 7/12 1 3 -1 5/6 2 2 3/2 4 5
Logo , que expande para e dá de novo. A expansão simbólica da forma de Lagrange devolve a mesma cúbica, e BarycentricInterpolator e KroghInterpolator devolvem em .
Agora acrescente . Uma linha nova dá , , , , e ganha só o termo . Esse termo se anula nos quatro nós antigos e vale em , o que leva a .
Exemplo 2: conferindo a fórmula do erro
Para em com nós , a quarta derivada fica em . O cálculo dá , em . Assim, o erro máximo fica entre e . Medido numa grade de pontos, ele vale , perto de . Ali a fórmula dá , isto é, , dentro de como prometido.
Exemplo 3: o fenômeno de Runge
Tome em , que está em e parece inofensiva. Erros máximos numa grade de 20001 pontos, com o caso equiespaçado repetido em aritmética de 200 dígitos:
textn equiespaçado equiespaçado exato Chebyshev 5 4.33e-01 4.33e-01 5.56e-01 10 1.92e+00 1.92e+00 1.09e-01 20 5.98e+01 5.98e+01 1.53e-02 40 1.05e+05 1.05e+05 2.89e-04 60 1.64e+08 2.29e+08 5.42e-06 80 6.31e+14 5.46e+11 1.02e-07
As hipóteses da fórmula do erro valem; a fórmula só deixa de ajudar. Como tem tamanho , o fator pode crescer como , então a cota é inútil aqui e não consegue localizar o problema: em , numa região onde o método funciona. O que separa as regiões é o polo. Para esta o erro é exatamente com , então ele escala com , que em vale em e em . A coluna de aritmética exata prova que a divergência é real, e não arredondamento. O pior ponto caminha para a ponta, em e em , enquanto o meio converge: em o erro é , e em . O arredondamento entra no fim da tabela: em o valor em float64 é cerca de 1000 vezes o exato.
Com nós de Chebyshev, o fator observado por grau fica entre e de a , e o erro chega ao nível do arredondamento perto de . A análise complexa prevê a taxa a partir dos polos de em : . Repare na primeira linha: em , Chebyshev é pior.
Exemplo 4: quando o arredondamento é a história inteira
em não tem problema de Runge, já que e a fórmula força a convergência.
textn equiespaçado float64 equiespaçado exato Chebyshev float64 10 2.35e-10 2.35e-10 2.71e-11 20 2.12e-12 4.82e-24 2.22e-15 30 2.78e-09 1.02e-39 2.66e-15 40 2.34e-06 9.37e-57 2.66e-15 50 1.15e-03 7.98e-75 2.66e-15 60 9.66e-01 9.94e-94 3.11e-15
O polinômio verdadeiro em acerta 93 dígitos, e o float64 devolve lixo de tamanho 1. BarycentricInterpolator mostra o mesmo crescimento ( em ), então não é erro de código. Multiplique com : , e em , o tamanho dos erros observados. Aqui o erro de truncamento acabou, e o arredondamento dos dados, amplificado por , é tudo o que sobra.
Exemplo 5: o mesmo polinômio, cinco implementações
Nós de Chebyshev, do Exemplo 3, , float64. As cinco linhas calculam um único objeto matemático:
textmétodo erro máximo baricêntrico 5.42e-06 Newton, ordem de Leja 5.42e-06 Vandermonde, potências crescentes 4.33e-03 Newton, nós ordenados da esquerda à direita 1.43e+00 Vandermonde, potências decrescentes (padrão) 5.24e+01
A ordem de Leja escolhe cada próximo nó maximizando o produto das distâncias aos já escolhidos. A ordem dos nós é a única diferença entre as duas linhas de Newton, e em a distância é de contra . As linhas de Vandermonde têm , resolvem o sistema com numpy.linalg.solve e usam os nós na ordem . Seus valores são ruído de arredondamento: a ordem das colunas move o erro em quatro ordens de grandeza aqui, ordenar os nós dá e em vez disso, e os dígitos podem mudar entre máquinas. Para as mesmas matrizes dão com potências crescentes e com potências decrescentes, então limita o pior lado direito, e estes dados suaves não são esse caso. Uma implementação direta da fórmula baricêntrica coincide com BarycentricInterpolator até em e .
Exemplo 6: quando falta suavidade
é contínua, mas não tem derivada em , então a fórmula do erro não se aplica.
textn equiespaçado exato Chebyshev n * erro Chebyshev 10 6.64e-01 5.46e-02 0.55 20 9.52e+01 2.85e-02 0.57 40 1.47e+07 1.46e-02 0.58 80 2.45e+18 7.37e-03 0.59
A interpolação equiespaçada diverge. Chebyshev converge, mas só como : a taxa geométrica precisava de analiticidade. Continuidade sozinha não basta para nenhuma tabela fixa de nós: o teorema de Faber diz que toda tabela tem alguma função contínua cujos interpoladores divergem.
Equívocos Comuns e Armadilhas
- "Mais nós sempre dão um ajuste melhor." Os Exemplos 3, 4 e 6 mostram o erro crescendo com , por três razões diferentes.
- "O fenômeno de Runge é efeito de arredondamento." A coluna de aritmética exata do Exemplo 3 também diverge. O Exemplo 4 é o caso oposto: ali o polinômio exato está ótimo e só o arredondamento atrapalha.
- "Lagrange e Newton dão respostas diferentes." A unicidade faz deles um só polinômio. Diferem em custo e em arredondamento.
- "A forma de Newton é segura em qualquer ordem de nós." O Exemplo 5 mostra cinco ordens de grandeza de diferença só pela ordem em .
- "Nós de Chebyshev são sempre melhores." Perderam em no Exemplo 3, dão só para e exigem escolher onde amostrar. Para dados já amostrados numa grade fixa, veja
splineseleast-squares-curve-fitting. - "Livro vs hoje." A documentação do SciPy avisa que
scipy.interpolate.lagrangeé numericamente instável, diz para não esperar mais de cerca de 20 pontos e a marca como obsoleta desde a versão 1.18, em favor deBarycentricInterpolator.
Resumo
Existe um único polinômio de grau no máximo por nós distintos. A forma baricêntrica o avalia de modo estável em por ponto; a forma de Newton acrescenta nós barato, mas depende da ordem dos nós; a forma de monômios herda um número de condição de Vandermonde. O erro é para . Nós equiespaçados tornam e a constante de Lebesgue grandes perto das pontas, o que dá divergência verdadeira para ( em ) e explosão de arredondamento para (cerca de em ). Nós de Chebyshev mantêm abaixo de 4 nestas execuções e dão convergência geométrica para funções analíticas, numa taxa definida pelos polos ( por grau para ), mas só para .
Documentation Links
- Driscoll and Braun: Fundamentals of Numerical Computation, 9.1 Polynomial interpolation
- Driscoll and Braun: Fundamentals of Numerical Computation, 9.2 The barycentric formula
- Driscoll and Braun: Fundamentals of Numerical Computation, 9.3 Stability of polynomial interpolation
- Demanet (2012): MIT OpenCourseWare 18.330, Chapter 3: Interpolation
- SciPy documentation: BarycentricInterpolator
- SciPy documentation: KroghInterpolator
- SciPy documentation: scipy.interpolate.lagrange
- Wikipedia: Polynomial interpolation