Uma família importante de funções para aproximar uma tabela são os polinômios de grau menor ou igual a $n$. Vamos considerar, primeiro, uma tabela de pontos $T=\{(x_0,y_0),\dots ,(x_k,y_k)\}$ diremos que o conjunto $\{p_0(x),\dots, p_n(x)\}$ é uma família de polinômios ortogonais, em relação à tabela $T$ se
Note que estas condições só podem estar atendidas, no caso de $n\leq k$.
A família de polinômios ortogonais é de polinômios mônicos se $p_i = x^i + q_i(x)$ onde $q_i$ é um polinômios de grau menor ou igual a $i-1$.
Teorema: Uma família de polinômios mônicos $\{p_0(x),\dots, p_n(x)\}$ satisfaz a seguinte relação de recorrência de segunda ordem.
$$ p_{l+1}(x) = (x+A)p_{l}(x) + Bp_{l-1}(x) $$onde $$A=\frac{ -\langle p_l,xp_l \rangle}{\langle p_l , p_l \rangle } \text{ e }B= \frac{ -\langle p_l,xp_{l-1} \rangle}{\langle p_{l-1} , p_{l-1} \rangle }.$$
Prova $p_{l+1}(x) - xp_l(x)$ é um polinômio de grau menor ou igual a l. Então se escreve como $a_lp_l(x) + a_{l-1}p_{l-1}(x) + \cdots + a_0$. Cada componente $a_i$ satisfaz a fórmula:
$$ a_i = \frac{\langle p_{l+1} - xp_l, p_i \rangle}{\langle p_i , p_i \rangle} = \frac{ -\langle p_l,xp_i \rangle}{\langle p_i , p_i \rangle }$$Este último termo só é diferente de zero quando o grau de $xp_i$ for maior ou igual a $l$, ou seja, para $i=l-1$ e $i=l$. Assim $$ p_{l+1}(x) - xp_l(x) = Ap_l(x) + Bp_{l-1}(x) $$ daí segue o resultado.
import numpy as np
from numpy.polynomial import Polynomial
def PoliOrt(T):
''' devolve os polinômios mônicos ortogonais em relação à tabela T'''
u = Polynomial([0,1]) # polinomio p(x) = x
p0 = Polynomial([1]) # p0(x)=1
x=[a[0] for a in T]
p1 = Polynomial([- np.dot(x,p0(x))/np.dot(p0(x),p0(x)),1])
lista = [p0,p1]
while len(lista) < len(x):
q0=lista[-2] # penultimo elemento da lista
q1=lista[-1] # ultimo elemento da lista
q2 = (u - np.dot(q1(x),[i*q1(i) for i in x])/np.dot(q1(x),q1(x)))*q1 - (np.dot(q0(x),[i*q0(i) for i in x])/np.dot(q0(x),q0(x)))*q0
lista.append(q2)
return lista
Agora queremos mudar a escala da tabela $T$ que está definida no intervalo $[x_0,x_k]$ para o intervalo $[a,b]$ através de uma transformação $ u(x) = Ax+B $. Para encontrar $A$ e $B$ resolvemos as equações: $$ \begin{eqnarray} u_0= u(x_0)&= &a \\ u_k= u(x_k)&=& b \end{eqnarray}$$ Daí $A= \frac{b-a}{x_k-x_0}$ e $B =\frac{ax_k-bx_0}{x_k-x_0}$ A tabela com a mudança de variável ficará $T_u=\{(u_0,y_0),\dots,(u_k,y_k)\}$
Proposição: Se a familía $\{p_0(u),\dots,p_n(u)\}$ é uma família de polinômios ortogonais para a tabela $T_u$, então $\{q_0(x),\dots,q_n(x)\}$, com $q_i(x)=p_i(u(x))$, é uma família de polinômios ortogonais para a tabela $T$