Use o botão abaixo para reportar erros ou dar sugestões.
Cálculo Numérico - Versão Python
7.2 Ajuste linear geral
O problema geral de ajuste linear consiste em dada uma família
gerada pelo
conjunto de
funções e
um conjunto de
pares ordenados ,
,
,
, calcular os
coeficientes ,
,
,
tais
que a função dada por
(7.21)
minimiza o resíduo
(7.22)
Aqui, a minimização é feita por todas as possíveis escolhas dos coeficientes
,
,
,
.
Com o objetivo de tornar a desenvolvimento mais claro, vamos escrever
como
a soma dos resíduos parciais:
(7.23)
Do fato que ,
temos que cada resíduo pode ser escrito como
(7.24)
A fim de encontrar o ponto de mínimo, resolvemos o sistema
oriundo de igualar a zero cada uma das derivadas parciais de
em relação
aos
coeficientes ,
isto é, devemos resolver:
Dividindo cada equação por 2 e escrevendo na forma matricial, obtemos
, onde
a matriz
é dada por:
E os vetores
e
são dados por:
Agora, observamos que
e , onde
a matriz
é dada por:
(7.31)
e é o
vetor coluna .
Assim, o problema de ajuste se reduz a resolver o sistema linear
, ou
.
Este sistema linear tem solução única se a matriz
for
inversível. O teorema a seguir mostra que isto acontece sempre a matriz
possui
posto ,
ou seja, o número de linhas linearmente independentes for igual ao número de
colunas.1
Teorema 7.2.1.A matriz équadrada de ordem e éinversível sempre que o posto da matriz éigual a número de colunas .
Demonstração. Para provar que
é inversível, precisamos
mostrar que se é
um vetor de ordem
e , então
. Suponha, então,
que , isto é,
. Tomando o produto
interno da expressão
com ,
temos:
(7.32)
Portanto implica
obrigatoriamente . Como
o posto de é igual ao
número de colunas,
precisar ser o vetor nulo.
Observação 7.2.1.Este problema é equivalente a resolver pelo métodos
dos mínimos quadrados o seguinte sistema linear:
(7.33)
Observação 7.2.2.O caso de ajuste de um reta para um conjunto de
pontos é um caso particular de ajuste linear.
Figura 7.2: Gráfico da solução do problema apresentado no
Exemplo 7.2.1.
Exemplo 7.2.1. Encontre a reta que melhor se ajusta aos pontos dados na
seguinte tabela:
Solução. O problema consiste em ajustar uma função da forma
no conjunto de pontos
dados. Notamos que
é uma função da família gerada pelo conjunto de funções
.
Então, aplicando o procedimento acima, temos que o vetor dos coeficientes
é solução por mínimos quadrados do sistema linear
,
onde:
(7.34)
Ou seja, é a solução do sistema
dado
por
(7.35)
A solução desse sistema é
e . A
Figura 7.2, apresenta um gráfico dos pontos e da reta ajustada.
Figura 7.3: Gráfico da solução do problema apresentado no
Exemplo 7.2.2.
Exemplo 7.2.2. Encontre a função
que
melhor se ajusta pelo critérios dos mínimos quadrados aos seguintes pontos
dados
Solução. Pelo procedimento visto nesta seção, temos que os coeficientes
e
são
dados pela solução por mínimos quadrados do seguinte sistema linear
(7.36)
cuja matriz de coeficientes
é:
(7.37)
Então, a solução por mínimos quadrados é
(7.38)
Ou seja,
é a função ajustada ao conjunto de pontos dados. A Figura 7.3 apresenta o gráfica
de e
dos pontos dados.
Em Python, podemos computar os coeficientes da função
da
seguinte forma:
>>> xi = np.array([0,0.25,0.5,0.75,1])
>>> yi = np.array([-153,64,242,284,175])
>>> V = np.array([np.sin(np.pi*xi),np.cos(np.pi*xi)]).transpose()
>>> a = ((np.linalg.inv((V.transpose()).dot(V))).dot(V.transpose())).dot(yi)
Observação 7.2.3.Em Python, quando resolvemos um sistema
usando
>>> x = np.linalg.inv(A).dot(b)
estamos computando a inversa da matriz
e multiplicando
por .
Dde forma mais eficiente, podemos usar a função numpy.linalg.solve,
digitando:
>>> x = np.linalg.solve(A,b)
Isto requer que a matriz
seja quadrada e de posto completo. Alternativamente, para obtermos a solução
por mínimos quadrados, podemos usar a função numpy.linalg.lstsq. Neste
caso, digitamos:
>>> np.linalg.lstsq(A,b)
7.2.1 Ajuste polinomial
O ajuste polinomial é o caso particular do ajuste linear para funçõespolinomiais, isto é, funções do tipo
(7.39)
Neste caso, a matriz
associada ao ajuste dos pontos ,
,
,
,
é
dada por:
(7.40)
Então, os coeficientes ,
, são dados pela solução
do sistema linear :
(7.41)
Figura 7.4: Gráfico da solução do problema apresentado no
Exemplo 7.2.3.
Exemplo 7.2.3. Entre o polinômio de grau 2 que melhor se ajusta aos pontos
dados na seguinte tabela:
Solução. Um polinômio de grau 2 pode ser escrito na seguinte forma:
(7.42)
Assim, o problema se resume em encontrarmos a solução por mínimos
quadrados do seguinte sistema linear:
(7.43)
Ou, escrita na forma matricial, ,
onde:
(7.44)
A solução por mínimos quadrados é, então:
(7.45)
Ou seja, o polinômio de grau 2 que melhor ajusta os pontos dados no sentido de mínimos
quadrados é .
A Figura 7.4 mostra o gráfico do polinômio ajustado e os pontos dados.
Em Python, podemos computar os coeficientes do polinômio
da
seguinte forma:
>>> xi = np.array([0,0.25,0.5,0.75,1])
>>> yi = np.array([-153,64,242,284,175])
>>> V = np.array([xi**2,xi**1,xi**0]).transpose()
>>> a = ((np.linalg.inv((V.transpose()).dot(V))).dot(V.transpose())).dot(yi)
Para fazermos o gráfico do polinômio e dos pontos, digitamos:
>>> xx = np.linspace(-0.25,1.25)
>>> plt.plot(xi,yi,’ro’,xx,np.polyval(a,xx),’b-’)
>>> plt.grid();plt.show()
Exercícios
E 7.2.1.Encontre o polinômio
que melhor se ajusta no sentido de mínimos quadrados aos pontos:
Resposta. ,
,
.
E 7.2.2.Encontrar a parábola
que melhor aproxima o seguinte conjunto de dados:
Resposta. .
E 7.2.3.Dado o seguinte conjunto de dados
a)
Encontre a função do tipo
que melhor aproxima os valores dados.
b)
Encontre a função do tipo
que melhor aproxima os valores dados.