MSPC - Informações Técnicas
. . . | Início | Mapa | Uso etc | Pesquisar | Fim pág | Voltar |
Gnuplot: ajustando curvas
Índice do grupo | Página anterior | Próxima página |
Para quem não conhece, Gnuplot é um eficiente programa para traçado de curvas de funções matemáticas contínuas ou discretas. A interface com o usuário pode não parecer amigável porque funciona pela linha de comando, mas os recursos de que dispõe compensam esse aspecto. É de livre distribuição e há versões para quase todos os sistemas operacionais. Mais informações no site do programa (em inglês).
Esta página não tem o propósito de dar informações sobre o uso do programa, que são bastante extensas e podem ser vistas no site mencionado e em outros. Ela mostra apenas o recurso, muitas vezes bastante útil, do ajuste de curvas (curve fitting, em inglês).
O assunto é dado com um exemplo prático: a tabela abaixo contém os índices de inflação no Brasil, acumulados de junho de 1996 a dezembro de 2007.
1 1.0000
2 1.0133
3 1.0255
4 1.0306
5 1.0308
6 1.0347
7 1.0382
8 1.0417
9 1.0501
10 1.0548
11 1.0620
12 1.0684
13 1.0695
14 1.0733
15 1.0752
16 1.0749
17 1.0760
18 1.0791
19 1.0807
20 1.0869
21 1.0961
22 1.1020
23 1.1074
24 1.1124
25 1.1204
26 1.1221
27 1.1190
28 1.1135
29 1.1100
30 1.1112
|
31 1.1092
32 1.1139
33 1.1211
34 1.1356
35 1.1501
36 1.1555
37 1.1561
38 1.1569
39 1.1655
40 1.1719
41 1.1765
42 1.1878
43 1.1989
44 1.2078
45 1.2152
46 1.2158
47 1.2174
48 1.2185
49 1.2178
50 1.2215
51 1.2385
52 1.2535
53 1.2588
54 1.2609
55 1.2645
56 1.2715
57 1.2813
58 1.2875
59 1.2937
60 1.3046
|
61 1.3120
62 1.3199
63 1.3346
64 1.3451
65 1.3510
66 1.3637
67 1.3813
68 1.3915
69 1.4064
70 1.4108
71 1.4195
72 1.4292
73 1.4305
74 1.4392
75 1.4557
76 1.4683
77 1.4804
78 1.5037
79 1.5547
80 1.5966
81 1.6361
82 1.6600
83 1.6827
84 1.7059
85 1.7228
86 1.7218
87 1.7225
88 1.7256
89 1.7397
90 1.7465
|
91 1.7530
92 1.7624
93 1.7771
94 1.7840
95 1.7942
96 1.8015
97 1.8087
98 1.8178
99 1.8310
100 1.8402
101 1.8433
102 1.8464
103 1.8546
104 1.8705
105 1.8812
106 1.8895
107 1.9033
108 1.9206
109 1.9340
110 1.9319
111 1.9325
112 1.9325
113 1.9354
114 1.9466
115 1.9571
116 1.9649
117 1.9724
118 1.9769
119 1.9823
120 1.9847
|
121 1.9872
122 1.9858
123 1.9880
124 1.9876
125 1.9908
126 1.9994
127 2.0078
128 2.0202
129 2.0301
130 2.0386
131 2.0476
132 2.0529
133 2.0583
134 2.0647
135 2.0713
136 2.0835
137 2.0887
138 2.0950
139 2.1040
|
Por questão de espaço, os dados estão divididos em 5 colunas. Em cada coluna, os números à esquerda são os meses (1 equivale a jun/1996) e os da direita são os índices de inflação acumulados segundo INPC do IBGE (base 1.0000 em junho de 1996).

Fig 01
Para uso com o programa Gnuplot, esses dados devem estar em um arquivo de texto puro, que aqui será denominado gnu_10.dat (naturalmente, em seqüência de apenas duas colunas, meses e índices separados por tabulação. Não podem ser as cinco colunas da tabela anterior. Se os dados estiverem em uma planilha de cálculo, o arquivo pode ser obtido pelas simples operações de copiar e colar para um editor de texto puro, como Bloco de Notas do Windows ou KWrite do Linux. Na planilha, devem estar em colunas vizinhas. Usar ponto como separador decimal).
O gráfico da Figura 01 foi obtido com o script abaixo.
set terminal svg
set output "gnu_10.svg"
set decimalsign ","
set xtics nomirror
set ytics nomirror
set border 3
set size 0.76,0.76
set size ratio 0.5
set yrange [1.0:2.5]
set xrange [1.0:150]
set xtics rotate ("06/96" 1, "06/97" 13, "06/98" 25, "06/99" 37,
"06/00" 49, "06/01" 61, "06/02" 73, "06/03" 85, "06/04" 97, "06/05" 109,
"06/06" 121, "06/07" 133, "06/08" 145)
set grid
set label "Mês / Ano" at 144, 1.1 right
set label "Índice acumulado" at 3,2.5 left
plot 'gnu_10.dat' using 1:2 notitle with lines lt 1 lc rgb 'blue'
pause -1
O objetivo agora é determinar uma função polinomial que represente uma aproximação da curva anterior. Seja a função:
y = a (x − 1)5 + b (x − 1)4 + c (x − 1)3 + d (x − 1)2 + e (x − 1) + 1.
Foi escolhida dessa forma porque, para x = 1, o valor y é exatamente 1, em conformidade com os dados da tabela anterior. Naturalmente, a aproximação melhora com maior ordem do polinômio. Isso pode ser feito por tentativas. Neste caso, escolheu-se 5. E o script para determinar os coeficientes a, b, c, d é dado a seguir.
f(x) = a * (x - 1)**5 + b * (x - 1)**4 + c * (x - 1)**3 + d * (x - 1)**2 + e * (x - 1) + 1
fit f(x) 'gnu_10.dat' using 1:2 via a,b,c,d,e
O resultado desse script é dado abaixo.
Final set of parameters Asymptotic Standard Error
======================= ==========================
a = 2.94234e-10 +/- 2.773e-11 (9.424%)
b = -1.09622e-07 +/- 9.262e-09 (8.449%)
c = 1.36743e-05 +/- 1.091e-06 (7.977%)
d = -0.000606089 +/- 5.296e-05 (8.737%)
e = 0.0125261 +/- 0.0008876 (7.086%)
correlation matrix of the fit parameters:
a b c d e
a 1.000
b -0.995 1.000
c 0.975 -0.992 1.000
d -0.927 0.958 -0.986 1.000
e 0.821 -0.866 0.917 -0.968 1.000

Fig 02
Uma vez determinados os coeficientes a, b, c , d e e, eles podem ser substituídos na fórmula anterior, que representará uma função contínua aproximada para os índices de inflação conforme tabela anterior.
O gráfico da Figura 02 é uma comparação da função contínua com a curva discreta anterior. É possível notar uma boa aproximação, inclusive nos pontos extremos.
O script para gerar esse gráfico é similar ao anterior, com a inclusão da curva para a função contínua.
set terminal svg
set output "gnu_16.svg"
a = 2.94232e-10
b = -1.09622e-07
c = 1.36743e-05
d = -0.000606089
e = 0.0125261
f(x) = a * (x - 1)**5 + b * (x - 1)**4 + c * (x - 1)**3 + d * (x - 1)**2 + e * (x - 1) + 1
set decimalsign ","
set xtics nomirror
set ytics nomirror
set border 3
set size 0.76,0.76
set size ratio 0.5
set yrange [1.0:2.5]
set xrange [1.0:139]
set xtics rotate ("06/96" 1, "06/97" 13, "06/98" 25, "06/99" 37,
"06/00" 49, "06/01" 61, "06/02" 73, "06/03" 85, "06/04" 97, "06/05" 109,
"06/06" 121, "06/07" 133, "06/08" 145)
set grid
set label "Mês / Ano" at 144, 1.1 right
set label "Índice acumulado" at 3,2.5 left
plot f(x), 'gnu_10.dat' using 1:2 notitle with lines lt 1 lc rgb 'blue'
Topo | Página anterior | Próxima página | Última revisão ou atualização: Dez/2009