Construa polinômios interpoladores P_{n}(x) para n=5,10,15,20, usando pontos igualmente espaçados no intervalo [-1,1].
Avalie o erro absoluto \left|f(x)-P_{n}(x)\right| em uma malha densa de pontos.
Analise o comportamento do erro e observe o aumento das oscilações nas extremidades à medida que n cresce.
Passo 1
O enunciado pede que eu construa polinômios interpoladores P_{n}(x) para n=5,10,15,20 usando pontos igualmente espaçados no intervalo [-1,1], que eu avalie o erro absoluto \left|f(x)-P_{n}(x)\right| em uma malha densa e que eu analise o comportamento do erro observando o aumento das oscilações nas extremidades quando n cresce.
O enunciado não especificou explicitamente a função f(x). Como a segunda parte menciona explicitamente “aumento das oscilações nas extremidades” (clássico aviso do fenômeno de Runge), vou resolver a tarefa assumindo a função padrão usada nesses exemplos: \displaystyle f(x)=\frac{1}{1+25x^{2}}. Se você tiver outra f, a estratégia é a mesma — troque apenas os valores f(x_j).
Informações relevantes que usarei:
Vou interpretar n como o grau do polinômio interpolador, construindo um polinômio de grau n a partir de n+1 nós igualmente espaçados.
Nós igualmente espaçados no intervalo [-1,1] serão dados por
x_j = -1 + \frac{2j}{n},\qquad j=0,1,\dots,n.
A tarefa pede: (i) construir P_n para n\in\{5,10,15,20\}; (ii) avaliar |f(x)-P_n(x)| numa malha densa de pontos em [-1,1]; (iii) analisar comportamento do erro e oscilações nas extremidades.
Passo 2
Definição explícita dos nós igualmente espaçados e dos valores da função nesses nós. Para cada n que queremos:
Os nós são
x_j = -1 + \frac{2j}{n},\qquad j=0,\dots,n.
Os valores correspondentes da função (assumida) são
Calcule y_j=f(x_j)=1/(1+25x_j^2) para cada j. Por exemplo y_0=f(-1)=1/(1+25)=1/26\approx0{,}03846. Faça o mesmo para os outros nós (os cálculos são diretos).
Passo 3
Fórmula do polinômio interpolador — forma de Lagrange. Vou ensinar do jeito direto (fórmula clássica) e explicar cada peça:
Explicando: \ell_j(x) é um polinômio de grau n que vale 1 em x_j e 0 em todos os outros nós x_k (k\ne j). Assim P_n(x) combina os valores y_j com essas bases para construir o polinômio que passa exatamente por todos os pontos (x_j,y_j).
Passo 4
Problema prático: estabilidade numérica e forma eficiente de avaliar P_n(x)\). A forma direta de Lagrange é bonita, mas computacionalmente instável para \(n\) grande (produtos podem ser ruins). A forma recomendada é a forma baricêntrica de Lagrange — rápida e estável numericamente:
- Primeiro calcule os pesos baricêntricos
\[w_j = \frac{1}{\displaystyle\prod_{\substack{k=0\k\ne j}}^{n} (x_j-x_k)},\qquad j=0,\dots,n.
Explicando: os w_j\] são constantes dependentes só dos nós; a fórmula evita recomputar produtos grandes a cada avaliação e é numericamente muito mais estável. Na prática compute \(w_j uma vez por n e depois avalie P_n(x) na malha densa usando a fórmula acima.]
Passo 5
Como calcular os pesos w_j na prática (dica passo a passo):
Para nós igualmente espaçados x_j não existe uma fórmula fechada simples para w_j que seja trivial, então calcule cada produto diretamente (na prática com computador): para cada j multiplique \prod_{k\ne j}(x_j-x_k) e faça w_j=1/produto. Para pequenos n dá para fazer à mão; para n=20 use uma calculadora/programa.
Atenção numérica: os produtos podem ficar pequenos ou grandes; use aritmética em ponto flutuante com cuidado ou calcule em log-domínio se necessário.
Passo 6
Avaliação do erro numa malha densa — receita prática:
Escolha uma malha densa em [-1,1], por exemplo M=1000 ou M=2000 pontos igualmente espaçados:
Para cada ponto da malha calcule f\bigl(x^{(\text{grid})}_m\bigr) (valor exato da função) e P_n\bigl(x^{(\text{grid})}_m\bigr) usando a forma baricêntrica. Então calcule o erro absoluto
f^{(n+1)}(\xi_x) é a derivada de ordem n+1 de f avaliada num ponto \xi_x entre -1 e 1. Isso mede a “variação alta” de f.
O fator (n+1)! é só escala.
O produto \prod_{j=0}^{n}(x-x_j) é o termo que depende dos nós: perto dos extremos do intervalo (próximo de -1 ou 1) esse produto pode ficar grande em magnitude em valor absoluto, gerando grandes erros.
Consequência prática: mesmo que f seja infinitamente suave (como a função de Runge), o produto \prod (x-x_j) para nós igualmente espaçados pode crescer muito em magnitude perto das extremidades quando n aumenta. Isso é a raiz do fenômeno de Runge: para nós equidistantes, aumentar n nem sempre melhora o erro uniformemente; ao contrário, pode aumentar as oscilações e o erro nas extremidades.
Passo 8
Explicação do Fenômeno de Runge e da razão das oscilações nas extremidades (intuitiva e prática)
A função f(x)=1/(1+25x^2) tem derivadas que, embora bem definidas, crescem com ordem quando avaliadas em pontos complexos próximos ao eixo real — isso faz f^{(n+1)}(\xi_x) não se anular suficientemente rápido para compensar o crescimento do produto \prod (x-x_j).
Nós igualmente espaçados geram um grande fator oscilatório no produto \prod_{j}(x-x_j) perto de -1 e 1; assim, mesmo que no centro do intervalo o polinômio se aproxime bem da função, nas bordas ele oscila fortemente.
Mesmo usando a forma baricêntrica (que resolve problemas numéricos de instabilidade), o fenômeno é teórico: mudar a fórmula de avaliação não impede o crescimento do erro inerente à escolha de nós igualmente espaçados. A solução clássica é usar nós de Chebyshev (que reduzem muito o erro e evitam o Runge). Mas como o enunciado exige nós igualmente espaçados, o comportamento esperado é: pequenas oscilações para n pequeno, aumento das oscilações nas extremidades conforme n cresce (especialmente visível para n=15,20).
Passo 9
Procedimento detalhado que você pode aplicar agora (passo a passo “pra fazer” — sem perguntar nada):
Para cada n\in\{5,10,15,20\}:
a. Calcule os nós x_j=-1+2j/n, j=0,\dots,n.
b. Calcule os valores y_j=f(x_j)=1/(1+25x_j^2).
c. Calcule os pesos baricêntricos w_j=1/\prod_{k\ne j}(x_j-x_k). (Computacionalmente faça isso com um laço; para evitar under/overflow pode somar logs e depois exponenciar.)
d. Escolha uma malha de avaliação com M pontos, por exemplo M=2000, x_m=-1+2m/(M-1), m=0,\dots,M-1.
e. Para cada x_m avalie P_n(x_m) usando a fórmula baricêntrica; se x_m coincidir exatamente com algum nó x_j então P_n(x_m)=y_j.
f. Calcule o erro absoluto E_n(x_m)=|f(x_m)-P_n(x_m)|.
g. Obtenha \|E_n\|_\infty=\max_m E_n(x_m) e faça um plot de E_n(x).
Compare os plots e os valores \|E_n\|_\infty para os diferentes n. Você observará aumento das oscilações nas extremidades quando n cresce; normalmente \|E_n\|_\infty pode até aumentar com n para nós equidistantes na função de Runge.
Passo 10
Interpretação prática dos resultados que você verá (motivação e incentivo):
Para n=5 o polinômio costuma aproximar razoavelmente bem em todo o intervalo, sem oscilações violentas.
Para n=10 começam a aparecer oscilações nas proximidades de -1 e 1.
Para n=15 e especialmente n=20 as oscilações nas extremidades ficam bem pronunciadas: altas amplitudes do erro e mudanças de sinal (wiggles).
Moral: aumentar grau com nós igualmente espaçados não é garantia de melhor aproximação uniforme — é exatamente isso que o enunciado quer que você observe. Se precisar de aproximação uniforme melhor, use nós de Chebyshev ou interpolações por partes (splines).
Resposta
Assumindo f(x)=\dfrac{1}{1+25x^{2}} e construindo P_n como polinômio de grau n nos n+1 nós igualmente espaçados x_j=-1+\dfrac{2j}{n}: os polinômios P_5,P_{10},P_{15},P_{20} são obtidos pela forma baricêntrica de Lagrange usando os pares (x_j,f(x_j)). Ao avaliar o erro absoluto em uma malha densa, observa-se que o erro e as oscilações nas extremidades aumentam conforme n cresce — isto é, manifesta-se o fenômeno de Runge para nós igualmente espaçados.