Escolar Documentos
Profissional Documentos
Cultura Documentos
Paulo J. S. Silva
12 de setembro de 2017
1 Introdução
Um dos temas principais de problemas numéricos é a obtenção de funções, ou leis, que ajustem dados expe-
rimentais. Por exemplo, imagine que temos dados experimentais de um fenômeno que pode ser explicado
por um polinômio do segundo grau. Mesmo que o fenômeno seja perfeitamente explicável por esse tipo de
função os erros de medidas nunca vão nos permitir observar exatamente o gráfico da verdadeira função.
Vamos simular isso no código abaixo.
In [ ]: using PyPlot
p ( x ) = a2 x 2 + a1 x + a0 ,
para coeficientes a2 , a1 , a0 que não conhecemos. Desejamos descobrir os valores dos seus coeficientes a2 , a1
e a0 . A informação que temos disponível são medidas ( xi , yi ), i = 1, . . . , m e que yi = p( xi ) mais algum
tipo de ruído aleatório. Note que se não houvesse o ruído aleatório, isso é se tivéssemos o valor exato
do polinômio desejado a solução seria simples. Bastaria pegar três pontos do plano e encontrar o (único)
polinômio do segundo grau que passa por eles. Veremos como fazer esse isso na próxima parte do curso.
Note que quaisquer que fosse os três pontos escolhidos iríamos obter o mesmo polinômio.
No caso de erros de medidas na função fica impossível usar a ideia acima já que o polinômio iria mudar
um pouco dependendo de quais três pontos fossem escolhidos. Nesse caso, uma ideia razoável nesse caso
é procurar qual o polinômio do segundo grau que melhor se "encaixa"a todos os dados ao mesmo tempo.
Como fazer isso matematicamente?
Dado um i = 1, . . . , m, o erro de uma função p com respeito ao valor medido em um único ponto xi é
| p ( x i ) − y i |.
1
Para levar em consideração todos os pontos, os erros em todos eles devem ser combinados de alguma
forma. Uma maneira natural é pensar em dois vetores do Rm . O primeiro representa os valores medidos
y = (y1 , y2 , . . . , ym ) e o segundo a função p nos respectivos pontos p = ( p( x1 ), p( x2 ), . . . , p( xm )). O que
gostaríamos é que y = p mas devido aos erros isso é impossível. Podemos então buscar os coeficientes
a2 , a1 e a0 que minimizem a distância entre y e p, já que isso leva em conta todas as coordenadas. Ou seja
queremos encontrar os coeficientes para os quais
∥ p − y ∥2
é o menor possível. Uma coisa interessante é que minimizar a norma euclidiana ou o seu quadrado dá a
mesma resposta. Já a norma euclidiana ao quadrado tem a vantagem de ser diferenciável o que poderemos
explorar ao resolver o problema.
Chegamos finalmente ao seguinte problema:
Encontre coeficientes a2 , a1 , a0 de modo que ao definirmos a função p( x ) = a2 x2 + a1 x + a0 o valor de
m
∑ ( p ( x i ) − y i )2 = ∥ p − y ∥2 (1)
i =1
seja o menor possível.
ϕ( x ) = c1 ϕ1 ( x ) + c2 ϕ2 ( x ) + . . . + cn ϕn ( x )
2
seja o menor possível.
Para sermos capaz de realizar essa tarefa temos que entender como a expressão acima varia com os
coeficientes no vetor c. Para isso vamos usar um pouco de notação matricial. Se olharmos a segunda
fórmula acima e tentarmos entender o que ela diz colocando c em destaque temos:
ϕ ( x1 ) ϕ1 ( x1 ) ϕ2 ( x1 ) . . . ϕn ( x1 ) c1
ϕ( x2 ) ϕ1 ( x2 ) ϕ2 ( x2 ) . . . ϕn ( x2 ) c2
ϕ= .. = .. .. .. .. .. . (3)
. . . . . .
ϕ( xm ) ϕ1 ( xm ) ϕ2 ( xm ) . . . ϕn ( xm ) cn
| {z } | {z } | {z }
ϕ Φ c
Como sugerido acima, podemos definir a matriz Φ como a matriz acima, ou seja a matriz que contém
na primeira coluna a função ϕ1 avaliada nos pontos x1 , x2 , . . . , xm , depois na segunda coluna a função ϕ2
avaliada nos mesmos pontos e assim sucessivamente. Com isso podemos escrever essa última expressão
na forma compacta
ϕ = Φc.
Assim, a função que queremos minimizar pode ser escrita tornando explícita sua dependência no vertor de
coeficientes como
f (c) = ∥Φc − y∥2 = (Φc − y)t (Φc − y) = ct Φt Φc − 2ct Φt y − yt y.
Como desejamos minimizar a função f : Rn → R podemos usar os nossos conhecimentos de cálculo.
Em primeiro lugar, observe que a função cresce de forma quadrática com c, logo para c grande ela passará
a crescer até infinito se a norma de c crescer indefinidamente. Logo ela atinge mínimo. Agora, sabemos de
cálculo que os candidatos a ponto de mínimo devem obedecer à esquação
∇ f (c) = 0.
Precismos descobrir como calcular a derivada de f . Para isso observe as seguintes regras de derivação que
são facilmente demonstradas a partir das respectivas fórmulas.
1. Se g(c) = ct Ac, para alguma matriz quadrada A, então ∇ g(c) = 2Ac.
2. Se h(c) = ct b = bt c, para algum vetor b, então ∇h(c) = b, um vetor constante.
3
In [ ]: # Constroi uma matriz concatenando uma coluna de 1's de dimensão adequada, o vetor x e depois o
= [ones(n_pontos) x x.^2];
In [13]: # Resolve a equação normal ' c = ' medida, usando o operador \ de Julia
c = ('*) \ ('*medida)
Veja como os valores se aproximam dos valores originais que eram 1.73 para o termos constante, 2 para
o coeficiente de x e π para o coeficiente associado a x2 . Outra coisa interessante de fazer é mostrar o gráfico
da função final obtida e mostrar como ele se ajusta bem nos pontos medidos.
In [27]: # Define a função a partir dos coeficientes calculados e das funções originais 1, x, e x^2.
phi(x) = c[1].*1 + c[2].*x + c[3].*x.^2
4
In [ ]:
In [ ]: