Use o botão abaixo para reportar erros ou dar sugestões.

Cálculo Numérico - Versão Python

7.3 Aproximando problemas não lineares por problemas lineares


Eventualmente, problemas de ajuste de curvas podem recair em um sistema não linear. Por exemplo, para ajustar função y = Aebx ao conjunto de pontos (x1,y1), (x2,y2) e (x3,y3), temos que minimizar o resíduo2

R = (Aex1b - y 1)2 + (Aex2b - y 2)2 + (Aex3b - y 3)2 (7.46)

ou seja, resolver o sistema R A = 2(Aex1b - y 1)ex1b + 2(Aex2b - y 2)ex2b + 2(Aex3b - y 3)ex3b = 0 (7.47) R b = 2Ax1(Aex1b - y 1)ex1b + 2Ax 2(Aex2b - y 2)ex2b (7.48) + 2Ax3(Aex3b - y 3)ex3b = 0 (7.49)

que é não linear em A e b. Esse sistema pode ser resolvido pelo método de Newton-Raphson, o que pode se tornar custoso, ou mesmo inviável quando não dispomos de uma boa aproximação da solução para inicializar o método.

Felizmente, algumas famílias de curvas admitem uma transformação que nos leva a um problema linear. No caso da curva y = Aebx, observe que ln y = ln A + bx. Assim, em vez de ajustar a curva original y = Aebx a tabela de pontos, ajustamos a curva submetida a transformação logarítmica

:= a1 + a2x̃ = ln A + bx. (7.50)

Usamos os pontos (x̃j,j) := (xj, ln yj), j = 1,2,3 e resolvemos o sistema linear

V T V a1 a2 = V T 1 2 3 , (7.51)

onde

V = 1 x1 1 x2 1 x3 . (7.52)

Exemplo 7.3.1. Encontre uma curva da forma y = Aebx que melhor ajusta os pontos (1, 2), (2, 3) e (3, 5).

Solução. Aplicando o logaritmo natural de ambos os lados da equação y = Aebx, temos

ln y = ln A + bx. (7.53)

Então, denotando := ln y, a1 := ln A e a2 := b, o problema reduz-se a ajustar a reta = a1 + a2x aos pontos (1, ln 2), (2, ln 3) e (3, ln 5). Para tanto, resolvemos o sistema

1 1 1 2 1 3 V a1 a2 a = ln 2 ln 3 ln 5 (7.54)

por mínimos quadrados, isto é,

V T V a = V T a = V T V -1V T . (7.55)

A solução do sistema é, então, a1 = 0,217442 e a2 = 0,458145. Portanto, A = ea1 = 1,24289 e b = a2 = 0,458145.

Em Python, podemos resolver este problema com o seguinte código:

x = np.array([1,2,3])  
y = np.array([2,3,5])  
V = np.array([np.ones(3),x]).transpose()  
a = np.linalg.lstsq(V,np.log(y))[0]  
A = np.exp(a[0])  
b = a[1]

Observação 7.3.1. Os coeficientes obtidos a partir dessa linearização são aproximados, ou seja, são diferentes daqueles obtidos quando aplicamos mínimos quadrados não linear. Observe que estamos minimizando i[ln yi - ln(f(xi))]2 em vez de i[yi - f(xi)]2. No exemplo resolvido, a solução do sistema não linear original seria A = 1,19789 e b = 0,474348

Observação 7.3.2. Mesmo quando se deseja resolver o sistema não linear, a solução do problema linearizado pode ser usada para construir condições iniciais para o problema não linear.

A próxima tabela apresenta algumas curvas e transformações que linearizam o problema de ajuste.




Curva Transformação Problema Linearizado



y = aebx = ln y = ln a + bx
y = axb = ln y = ln a + b ln x
y = axbecx = ln y = ln a + b ln x + cx
y = ae(b+cx)2 = ln y = ln a + b2 + bcx + c2x2
y = a b + x = 1 y = b a + 1 ax
y = A cos(ωx + ϕ) - x- y = a cos(ωx) - b sen (ωx)
ωconhecido a = A cos(ϕ),b = A sen (ϕ)



Exemplo 7.3.2. Encontre a função f da forma y = f(x) = A cos(2πx + ϕ) que ajusta a tabela de pontos



xi yi


0,0 9,12
0,1 1,42
0,2 - 7,76
0,3 - 11,13
0,4 - 11,6
0,5 - 6,44
0,6 1,41
0,7 11,01
0,8 14,73
0,9 13,22
1,0 9,93


Solução. Usando o fato que y = A cos(2πx + ϕ) = a cos(2πx) - b sen (2πx), onde a = A cos(ϕ) e b = A sen (ϕ), z = [ a b ]T é solução do problema

BT Bz = BT y, (7.56)

onde

B = cos(2πx0) - sen (2πx0) cos(2πx1) - sen (2πx1) cos(2πx10) - sen (2πx10) = 1. 0. 0,8090170 - 0,5877853 0,3090170 - 0,9510565 - 0,3090170 - 0,9510565 - 0,8090170 - 0,5877853 - 1,0000000 0,0000000 - 0,8090170 0,5877853 - 0,3090170 0,9510565 0,3090170 0,9510565 0,8090170 0,5877853 1,0000000 0,0000000 . (7.57)

Assim, a = 7,9614704 e b = 11,405721 e obtemos o seguinte sistema:

A cos(ϕ) = 7,9614704 A sen (ϕ) = 11,405721 . (7.58)

Observe que

A2 = 7,96147042 + 11,4057212 (7.59)

e, escolhendo A > 0, A = 13,909546 e

sen (ϕ) = 11,405721 13,909546 = 0,8199923 (7.60)

Assim, como cos ϕ também é positivo, ϕ é um ângulo do primeiro quadrante:

ϕ = 0,9613976 (7.61)

Portanto f(x) = 13,909546 cos(2πx + 0,9613976). Observe que nesse exemplo a solução do problema linear é a mesma do problema não linear.

Exercícios resolvidos


ER 7.3.1. Encontre a função f da forma y = f(x) = a b+x que ajusta a seguinte tabela de pontos usando uma das transformações tabeladas.

i xi yi



1 0,0 101
2 0,2 85
3 0,4 75
4 0,6 66
5 0,8 60
6 1,0 55



Solução. Usando o fato que Y = 1 y = b a + 1 ax, z = [ b a 1 a ]T é solução do problema
AT Az = AT Y, (7.62)

onde

A = 1 x1 1 x2 1 x3 1 x4 1 x5 1 x6 = 1 0,0 1 0,2 1 0,4 1 0,6 1 0,8 1 1,0 (7.63)

e

Y = 1y1 1y2 1y3 1y4 1y5 1y6 = 0,0099010 0,0117647 0,0133333 0,0151515 0,0166667 0,0181818 (7.64)

Assim, 1 a = 0,0082755 e b a = 0,0100288 e, então, a = 120,83924 e b = 1,2118696, ou seja, f(x) = 120,83924 1,2118696+x.

Exercícios


Esta seção carece de exercícios. Clique em e inicie a editá-la agora mesmo. Veja outras formas de participar clicando aqui.

Creative Commons License Este texto é disponibilizado nos termos da licença Creative Commons Atribuição-CompartilhaIgual 3.0 Não Adaptada (CC-BY-SA 3.0). Página gerada em 15/5/2019 às 15:24:50.

Informe erros ou edite você mesmo!