Baixe o app para aproveitar ainda mais
Prévia do material em texto
Introdução ao GNUPLOT Prof. Ricardo Reis 16 de abril de 2014 1 Introdução Gnuplot é um software livre para desenho (plotagem) de funções em duas e três dimensões (2D e 3D). A última versão estável até a escrita deste documento é a 4.4.0. Versões em binário (pronto para instala- ção) e em código fonte (precisam ser compiladas e depois montadas no sistema) tanto para windows como para linux estão disponíveis no endereço, http://sourceforge.net/projects/gnuplot/files/ (na parte inferior do site é possível fazer o download da versão que condiz com seu sistema). 2 Prompt de Entrada Depois de instalado o gnuplot poderá ser executado. Se o sistema criar um ícone de atalho basta acioná-lo com o mouse. Do contrário uma ja- nela de terminal (modo de entrada onde as ações são dadas digitando- se comandos) deverá ser executada (no linux há atalhos nos menus do sistema – no Ubuntu utilize Aplicativos→Acessórios→Terminal – e no Windows use iniciar→executar e digite cmd depois OK). O gnuplot deverá ser executado digitando-se gnuplot no terminal aberto, como no exemplo (linux), $ gnuplot No Windows existe uma versão .zip que, após descompactada, está pronta para uso. Basta ir na subpasta binary e clicar em gnuplot.exe. Em qualquer caso uma janela de terminal abrirá e exibirá um conteúdo semelhante a, G N U P L O T Version 4.4 patchlevel 0 last modified March 2010 System: Linux 2.6.32-24-generic Copyright (C) 1986-1993, 1998, 2004, 2007-2010 Thomas Williams, Colin Kelley and many others 1 gnuplot home: http://www.gnuplot.info faq, bugs, etc: type "help seeking-assistance" immediate help: type "help" plot window: hit ’h’ Terminal type set to ’wxt’ gnuplot> A última linha, gnuplot>, é denominada prompt de entrada e aguarda por entrada do usuário. Quando uma entrada está completa pressiona- se <ENTER>, gnuplot executa a ação e volta para o prompt para aguar- dar nova entrada. Exemplo, gnuplot> plot sin(x) gnuplot> A entrada plot sin(x) é dada e depois de executada o gnuplot volta, na linha seguinte, para o prompt onde nova entrada será aguardada. Um terminal gráfico abrirá noutra janela e exibirá o gráfico ao lado. 3 Terminais Gráficos Chama-se terminal gráfico a janela auxiliar que o gnuplot abre para exibir um gráfico. Há tantos terminais gráficos disponíveis em sua máquina quanto forem instalados (o gnuplot instala alguns para você). Para visualizar uma lista completa de terminais gráficos digite, set term Isso exibirá uma lista dos terminais gráficos disponíveis. Normalmente o terminal gráfico padrão do gnuplot é o wxt. Esta informação é exibida quando você executa o gnuplot (veja na listagem anterior), Terminal type set to ’wxt’ Para saber detalhes do terminal ativo digite test e veja o que aparece na saída gráfica. 4 Plotando Gráficos em 2D O nome padrão da variável independente em gnuplot é x. Assim para plotar um gráfico a partir de uma função, deve-se usar um nome de função válida com argumento x. As principais funções matemáticas do gnuplot são listadas na tabela a seguir, 2 Função Retorna abs(x) valor absoluto de x acos(x) arco-cossenno de x asin(x) arco-sene de x atan(x) arco-tangente de x cos(x) cosseno de x, x em radianos. cosh(x) cosseno hiperbólico de x, x em radianos erf(x) funçao erro de x exp(x) exponencial de x, base e inverf(x) erro inverso de x invnorm(x) distribuição inversa normal de x log(x) log de x, base e log10(x) log de x, base 10 norm(x) distribuição normal Gaussiana de x rand(x) gerador de números pseudo-aleatórios sgn(x) 1 se x > 0, -1 se x < 0, 0 se x = 0 sin(x) seno de x, x em radianos sinh(x) seno hiperbólico de x, x em radianos sqrt(x) raiz quadrada de x tan(x) tangente de x, x em radianos tanh(x) tangente hiperbólica de x, x em radianos O comando gnuplot para plotagem 2D é plot. Por exemplo, para plotar a função seno usa-se, gnuplot> plot sin(x) gnuplot> -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 -10 -5 0 5 10 sin(x) isso desenhará no terminal gráfico a função seno. Para alterar o do- mínio de plotagem (intervalo nas abcissas onde deverá ser plotada a função), utiliza-se um par de colchetes contendo respectivamente os limites inferior e superior de abcissas, separados por dois-pontos. Para plotar, por exemplo, o seno entre 0 e pi faz-se, gnuplot> plot [0:pi] sin(x) gnuplot> 3 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 0 0.5 1 1.5 2 2.5 3 sin(x) onde pi é o valor de pi no gnuplot. A saída é mostrada na figura ao lado. Há algumas situações em que o intervalo nas ordenadas precisa tam- bém ser especificado. Neste caso utiliza-se outro par de colchetes se- guidos do p rimeiro utilizando a mesma sintaxe já apresentada. No exemplo, gnuplot> plot [-10:10] [-3:3] x*x gnuplot> -3 -2 -1 0 1 2 3 -10 -5 0 5 10 x*x o intervalo nas abcissas restringe-se entre -10 e 10 ao passo que nas ordenadas entre -3 e 3. Caso se deseje identificar apenas o intervalo nas ordenadas deve-se dispor também os colchetes referentes às abcis- sas, mas neste caso sem limites, como no exemplo, gnuplot> plot [:] [-3:3] x*x gnuplot> 4 -3 -2 -1 0 1 2 3 -10 -5 0 5 10 x*x Para desenhar mais de uma função em gnuplot, separe as funções por vírgula. Exemplo, gnuplot> plot [-10:10] x**2 + 5*x - 4, 9*x-11 gnuplot> -150 -100 -50 0 50 100 150 -10 -5 0 5 10 x**2 + 5*x - 4 9*x-11 onde ** é o operador de potência. São operadores aritméticos legais em gnuplot, Operador O Que Faz + Soma - Subtração * Multiplicação / Divisão % Resto de divisão de inteiros ** Potência O resultado do exemplo anterior será a plotagem das funções f(x) = x2 + 5x− 4 e g(x) = 9x− 11 e no intervalo de -10 a 10. 5 Estilos de Curvas Cada curva plotada em gnuplot possui um estilo. Um estilo é em geral formado por um conjunto de propriedades gráficas que incluem, para 5 o caso de curvas, cor, espessura, tamanho e forma dos pontos, padrão de linha e etc. Usando o comando test é possível ver, para o terminal vigente, os valores de espessura, padrões de linha, cores e formas de pontos disponíveis. Consideraremos neste artigo apenas a cor e a es- pessura das curvas. Para modificar a cor de uma curva use os modificadores linecolor (ou simplesmente lc) e rgb em sequencia seguidos de um valor de cor válida entre aspas duplas. Exemplo, gnuplot> plot [0:5] exp(x) lc rgb "red" 0 20 40 60 80 100 120 140 160 0 1 2 3 4 5 exp(x) A função é plotada com linha de cor vermelha. Para ver a lista de cores disponíveis no gnuplot use, gnuplot> show colornames Cada cor desta lista é apresentada com seu equivalente em hexadeci- mal (inicia com #) e podem ser utilizadas com mesmo efeito. O modificar de espessura de linha é linewidth (ou simplesmente lw). Ele é seguido do índice de espessura (não do valor!) oferecido pelo terminal gráfico (use o comando test e veja os valores de índice válidos). Por exemplo, para plotar a função no intervalo de 10 a 100, com cor azul e espessura de índice 4 use, gnuplot> plot [10:100] log(5*x-7) lc rgb "blue" lw 4 gnuplot> 6 3.5 4 4.5 5 5.5 6 6.5 10 20 30 40 50 60 70 80 90 100 log(5*x-7) Caso mais de um gráfico esteja presente, deve-se definir os estilos um a um. Se caso uma das funções listadas não especifique o estilo, o gnuplot utilizará o padrão. Veja o exemplo, gnuplot> plot [3:10] 1/(x**2-1) lc rgb "blue" lw 4, x/20 lc rgb "red" lw 3 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 3 4 5 6 7 8 9 10 1/(x**2-1) x/20 isto plota duas funções respectivamente com cores azul e vermelha e espessuras de índices 4 e 3. Caso se queira um estilo comum de linha para todas as curvas, existe a opção de definir um estilo próprio e depois aplicá-lo às curvas. Paradefinir um novo estilo de linha use o esquema geral, set style line <índice> <opções do estilo> o valor de índice é um número definido pelo usuário e é usado para invocar o estilo quando a plotagem for solicitada. As opções de estilo incluem espessura, cor, tamanho e forma de pontos, padrão de linha entre outras. A definição de um estilo passa a valer a partir do ponto que ele é definido. Para invocar um estilo novo, use linestyle (ou sim- plesmente ls) seguido do índice definido anteriormente. Exemplo, gnuplot> set style line 7 lw 3 lc rgb "blue" gnuplot> plot sin(x) ls 7, cos(x) ls 7 gnuplot> 7 -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 -10 -5 0 5 10 sin(x) cos(x) Isso define um estilo de linha de índice 7 e atribui a ele cor azul e espessura de índice 4. Os gráficos plotados logo em seguida invocam com ls 7 (cada um!) o estilo definido. 6 Configurando com set O comando set tem sido usado sem maiores explicações. De fato ele tem larga aplicação no gnuplot configurando estados do programa an- tes de realizar uma plotagem. Usando help set o gnuplot imprime uma lista de entidades que podem ser configuradas por set. Para des- fazer uma ação de set usa-se o comando unset. A seguir apresentamos a configuração de algumas entidades com set/unset. 6.1 set title, set xlabel, set ylabel Caso o gráfico precise de um título utiliza-se set title. No exemplo, gnuplot> set title "minha funcao" gnuplot> plot x**2-1 gnuplot> -10 0 10 20 30 40 50 60 70 80 90 100 -10 -5 0 5 10 minha funcao x**2-1 o título minha funcao é impresso no topo do gráfico. Similarmente rótulos podem ser definidos para os eixos coordenados x e y respecti- vamente utilizando set xlabel e set ylabel. No exemplo, 8 gnuplot> set title "crescimento de bacterias" gnuplot> set xlabel "t(s)" gnuplot> set ylabel "Q(g)" gnuplot> plot [0:6] 0.3*exp(x) gnuplot> 0 20 40 60 80 100 120 140 0 1 2 3 4 5 6 Q(g) t(s) crescimento de bacterias 0.3*exp(x) 6.2 set angles O padrão de ângulos em gnuplot é radianos. Para mudar para graus use set angles degrees. Para trazer de volta, use unset angles ou set angles radians. Veja o exemplo, gnuplot> set angles degrees gnuplot> print sin(90) 1.0 gnuplot> unset angles gnuplot> print sin(90) 0.893996663600558 gnuplot> print sin(pi/2) 1.0 gnuplot> onde print é um comando de impressão de qualquer valor numérico ou texto dentro do gnuplot (você expressa texto em gnuplot colocando- o entre aspas duplas. Exemplo, print “ola mundo”, imprimirá olá mundo). 6.3 set size As plotagens no terminal gráfico acontecem dentro de uma área restrita por um retângulo que contém marcas numéricas em duas de suas qua- tro bordas e que indicam valores nas abcissas e ordenadas das funções plotadas. A proporção entre a altura e a largura deste retângulo, conhe- cido como aspect-ratio, se mantém quando a janela é redimensionada impedindo a deformação do gráfico. O valor padrão de aspect-ratio é de 1 para 1 (aspect-raio = 1/1 = 1). O aspect-ratio pode entretanto ser mo- dificado utilizando set size. Utilize set size square para aplicar o 9 aspect-rato padrão (square, significa quadrado cuja a proporção de di- mensões é de 1 para 1). Para valores personalizados de aspect-ratio deve ser usada uma razão de proporção da altura pelo comprimento do retângulo que poderá ser fornecida de duas formas. Primeiro como fração onde o numerador e o denominador são fornecidos separados por vírgulas. Exemplo, gnuplot> set size 2, 5 gnuplot> Isso causará ao retângulo de plotagem proporção de 2 para 5 entre al- tura e largura. Na segunda forma usa-se o modificador ratio seguido do valor de razão direta. O caso anterior pode ser reescrito como, gnuplot> set size ratio 0.4 gnuplot> haja vista que 2/5 = 0.4. Chamar unset size tem mesmo efeito que set size square. 6.4 set key Gráficos em gnuplot mantêm uma legenda contendo referências para cada curva plotada. Cada referência é formada por uma linha horizon- tal na cor da linha referenciada acompanhada da equação da função. O comando set key configura legendas em gnuplot. Use help set key para ver todas as opções. Para desligar legendas use unset key ou set key off. Para reabilitá-las use set key on. 6.5 set multiplot Há situações em que gráficos distintos devem compartilhar a mesma janela ficando vizinhos uns dos outros. Para fazer isso utilize set multiplot. Este comando define um layout de células que conterão cada qual uma plotagem independente. A proporção que chamadas a plot vão sendo realizadas (após definição do layout), células vazias vão sendo preenchidas ate que a tela encha (novas chamadas a plot não têm mais onde plotar). Para limpar a tela deve-se encerrar o modo de multiplotagem usando unset multiplot e depois o comando clear. Para definir um layout de quantidade fixa de linhas e colunas use o modificador layout do comando multiplot seguindo a sintaxe, set multiplot layout <numero de linhas>, <numero de colunas> No exemplo, gnuplot> set multiplot layout 2, 2 multiplot> plot [-pi:pi] x**2 multiplot> plot [-pi:pi] sin(x) multiplot> plot [-1:1] [-5:5] 1/x multiplot> plot [-1:1] [-5:5] x**3 multiplot> unset multiplot gnuplot> 10 Inicializa o modo de multiplotagem com 2 linhas e 2 colunas (Observe que quando multiplot é chamado ocorre uma mudança do prompt gnuplot> para multiplot>). A saída obtida será, 0 1 2 3 4 5 6 7 8 9 10 -3 -2 -1 0 1 2 3 x**2 -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 -3 -2 -1 0 1 2 3 sin(x) -4 -2 0 2 4 -1 -0.5 0 0.5 1 1/x -4 -2 0 2 4 -1 -0.5 0 0.5 1 x**3 As chamadas seguintes, gnuplot> set multiplot layout 1, 2 multiplot> set style line 7 lw 3 lc rgb "blue" multiplot> plot [-pi:pi] x**2 ls 7, sin(x) ls 7 multiplot> plot [-1:1] [-5:5] 1/x ls 7, x**3 ls 7 -2 0 2 4 6 8 10 -3 -2 -1 0 1 2 3 x**2 sin(x) -4 -2 0 2 4 -1 -0.5 0 0.5 1 1/x x**3 apesar de plotarem quatro curvas, só usam duas células. Isso ocorre poque apenas duas chamadas a plot são realizadas. Cada uma das 11 duas células utilizadas conterá duas curvas. 6.6 set parametric Para habilitar o modo de uso de equações paramétricas use set parametric. Para desligá-lo use unset parametric. Neste modo a variável inde- pendente é t (não é mais x!) e cada curva precisa de uma par de equações (a primeira x(t) e a segunda y(t)). Por exemplo para plotar um círculo em gnuplot use, gnuplot> set parametric dummy variable is t for curves, u/v for surfaces gnuplot> plot sin(t), cos(t) gnuplot> -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 -1-0.8-0.6-0.4-0.200.20.40.60.81 sin(t), cos(t) A mensagem exibida pelo gnuplot após a configuração do modo para- métrico indica que a variável independente mudou de nome. Para plotar mais de uma curva em modo paramétrico deve-se formar pares de funções e formatar apenas a segunda de cada (caso um novo estilo seja necessário). Exemplo, gnuplot> plot [-pi:pi] sin(t), cos(t) lc rgb "black", t**2, t lc rgb "black" gnuplot> -4 -3 -2 -1 0 1 2 3 4 -2 0 2 4 6 8 10 sin(t), cos(t) t**2, t 12 6.7 set polar Para alternar para o modo polar use set polar. Para sair do modo polar use unset polar. No modo polar uma coordenada é marcada por uma valor de raio e um ângulo traçados a partir da origem. O raio é a variável dependente e o ângulo a independente (exemplo, r(θ) = sin(θ) denota uma função em coordenadas polares, onde r denota o raio e θ o ângulo). A variável independente em gnuplot no modo polar é t. Para plotar uma rosa de três pétalas use, gnuplot> set polar dummy variable is t for curves gnuplot> plot sin(3*t) 1 0.8 0.6 0.4 0.2 0 0.2 0.4 0.6 1 0.8 0.6 0.4 0.2 0 0.20.4 0.6 0.8 1 sin(3*t) 7 Definindo Variáveis e Funções Para definir uma variável em gnuplot basta atribuir um valor ao nome da nova variável. Exemplo, gnuplot> w = 45 gnuplot> a = 45 estas chamadas criam as variáveis w e a. Variáveis podem ser definidas também a partir do valor de outras variáveis já definidas. Exemplo, gnuplot> max = 56.0 gnuplot> min = 24.4 gnuplot> med = (max+min)/2 gnuplot> Para saber o conteúdo de uma variável já definida, use print. Exem- plo, gnuplot> print med 40.2 gnuplot> 13 Para definir uma função em gnuplot deve-se criar um identificador, pósfixá-lo de um par de parênteses contendo as variáveis independen- tes e por fim igualá-la a uma equação válida da varável independente definida. Exemplo, gnuplot> f(x) = sqrt(x**2 - 5) gnuplot> Isso define a função f(x) = √ x2 − 5. Para plotar essa função usamos, gnuplot> plot f(x) Outros recursos do gnuplot podem também ser utilizados, gnuplot> plot [-10:10] f(x) lc rgb "green" lw 2 0 1 2 3 4 5 6 7 8 9 10 -10 -5 0 5 10 f(x) Apesar de x ser o identificador padrão para a variável independente, a definição de uma função pode lidar com qualquer identificador, como em, gnuplot> f(a) = sqrt(a**2 - 5) gnuplot> Entretanto para plotar a função deve-se chamar plot f(x) o que fará x tomar o valor de a. Não esqueça que o gnuplot define x como variável independente e é ele quem deve estar presente na expressão final da função a ser plotada. Para definir uma função de mais de uma variável, liste-as entre os parênteses da definição da função separando-as por vírgulas. Exemplo, gnuplot> pot(a,b) = exp( b*log(a) ) gnuplot> Isso define a função pot. Para testar a nova função use, gnuplot> print pot(2, 3) 8.0 gnuplot> 14 Para construir um plot 2D com funções de mais de uma variável in- dependente deve-se naturalmente repassar o x para apenas um dos argumentos e os demais devem receber valores constantes. No exem- plo, gnuplot> pot(a,b) = exp(b*log(a)) gnuplot> set style line 9 lw 3 lc rgb "red" gnuplot> plot [0:8] pot(2, x) ls 9, pot(x, 2) ls 9 as funções plotadas são respectivamente 2x e x2. 0 50 100 150 200 250 300 0 1 2 3 4 5 6 7 8 pot(2, x) pot(x, 2) 8 Operador Ternário de Decisão O operador ternário ?: (a interrogação e os dois-pontos constituem este operador) no gnuplot permite construir estruturas condicionais. Ele forma uma expressão de três termos de modelo geral, <exp1> ? <exp2> : <exp3> Caso o resultado de exp1 (que deve sempre resultar em verdadeiro ou falso) seja verdadeiro, o resultado final da expressão como um todo será exp2 e do contrário exp3. No exemplo, gnuplot> w = 45 gnuplot> q = w>10 ? 9 : 11 gnuplot> print q 9 gnuplot> a expressão w>10 retorna verdadeiro pois w foi inicializado com 45. Daí q recebe 9 e não 11. O operador >(maior que) é denominado um opera- dor relacional e w>10 uma expressão relacional (porque vale verdadeiro ou falso). Os operadores relacionais do gnuplot são, 15 operador significado > maior que < menor que >= maior ou igual <= menor ou igual == igual != diferente O operador ?: também pode ser usado em definições de funções em partes. Para definir a função em parte, f(x) = { −x x < 0 x2 x ≥ 0 use, gnuplot> f(x) = x<0 ? -x : x**2 gnuplot> plot [-5:5] f(x) gnuplot> 0 5 10 15 20 25 -4 -2 0 2 4 f(x) isso plotará um gráfico que é parcialmente linha, parcialmente pará- bola. Se mais que duas equações comporem a função em partes, como em, f(x) = −10− 2x x < −5 25− x2 −5 ≤ x ≤ 5√ x− 5 x > 5 use associações do operador ?:. A função h(x) anterior é plotada usando, gnuplot> set key off gnuplot> h(x) = x<-5 ? -10-2*x: (x<=5 ? 25-x**2 : 8*sqrt(x-5)) gnuplot> plot [-10:10] [-10:30] h(x) lc rgb "black" lw 2 16 -10 -5 0 5 10 15 20 25 30 -10 -5 0 5 10 9 Usando Laços Considere a funçãoque deve ser plotada para oito valores de a distintos e equidistantes no intervalo {2, 25}. Estes oito valores podem ser obti- dos por a(i) = 2 + 3 i−17 , onde i é um inteiro no intervalo {1, 8}. Desta forma as oito curvas se distinguirão unicamente por um valor de i e poderão ser plotadas num laço de contagem. A estrutura de uma plo- tagem com laço de contagem em gnuplot tem formato geral, plot for [<contador>=<minimo>:<maximo>] <funcao_de_x_e_do_contador> Para plotar as oito curvas do modelo descrito anteriormente use, gnuplot> a(i) = 2.0 + 3.0*(i-1)/7 gnuplot> f(x,a) = a*x**2 - 5*x + 7 gnuplot> plot for [i=1:8] f(x, a(i) ) lc rgb "black" lw 2 gnuplot> 0 100 200 300 400 500 600 -10 -5 0 5 10 Apesar do identificador a ser usado na definição da função a(i) e no segundo argumento de f(), tratam-se de coisas diferentes. Na plotagem propriamente dita, de contador i e limites 1 e 8, a chamada à f() invoca internamente a(i) para repassar seu valor ao argumento a. Remode- lando as variáveistem-se, 17 gnuplot> a(i) = 2.0 + 3.0*(i-1)/7 gnuplot> f(u,c) = c*u**2 - 5*u + 7 gnuplot> plot for [i=1:8] f(x, a(i) ) lc rgb "black" lw 2 gnuplot> Cuja saída gráfica é a mesam da listagem anterior. 10 Utilizando Arquivo Texto Se um arquivo texto contiver dados formatados em linhas e colunas, então será possível ao gnuplot fazer curvas tomando quaisquer uma das colunas como dados de abcissa e outra como dados de ordenada. Cada par tomado de dados de uma linha do arquivo texto será consi- derado um ponto da curva. Seja por exemplo o seguinte código em C que gera um arquivo texto chamado saida.txt e contendo três colunas de dados numéricos ta- buladas corretamente, #include <stdio .h> #include <math.h> #define N 20 #define XMIN 0.0 #define XMAX 100.0 int main ( ) { FILE∗ fp = fopen ( " saida . txt " , "w" ) ; int k; for ( k=0; k<N; k++) { float x = XMIN + (XMAX−XMIN) ∗ k/(N−1); float y = sqrt ( x ) ; f p r in t f ( fp , "%.3f\t%.3f\t%.3f\n" , x , y , x∗y ) ; } fc lose ( fp ) ; } As dez primeiras linhas do arquivo saida.txt têm aspecto como segue, 0.000 0.000 0.000 5.263 2.294 12.075 10.526 3.244 34.152 15.789 3.974 62.741 21.053 4.588 96.596 26.316 5.130 134.997 31.579 5.620 177.458 36.842 6.070 223.623 42.105 6.489 273.215 47.368 6.882 326.012 ... Copie este aquivo para a pasta a partir de onde o gnuplot é execu- tado ou execute o gnuplot estando na pasta onde ele (saida.txt) foi 18 gerado. Isso dará ao gnuplot acesso direto a saida.txt. Para plotar uma curva que use abcissas da primeira coluna e como ordenadas a segunda coluna use, gnuplot> plot "saida.txt" using 1:2 gnuplot> 0 2 4 6 8 10 0 20 40 60 80 100 "saida.txt" using 1:2 + + + + + + + + + + + + + + + + + + + + + O nome do arquivo segue plot entre aspas e o modificador using in- dica as duas colunas (separadas por dois-pontos) que devem ser usa- das. Se houvesse ai using 2:3, seriam usadas respectivamente para abcissas e ordenadas, dados das colunas 2 e 3. Se apenas uma coluna é fornecida, como em using 2, ela será tomada como dados de orde- nada ao passo que as abcissas serão os inteiros naturais (0, 1, 2, 3, ...). Há situações em que os dados não bastam para criar as curvas sendo necessário ainda processá-los. Por exemplo, suponha que, utilizando o arquivo saida.txt, desejemos plotar o dobro de cada valor da primeira coluna pelo triplo da segunda. Neste caso deve-se transformar as co- lunas argumentos de using em expressões avaliativas que rendam os valores desejados. Uma expressão avaliativa está sempre entre parên- teses e manipula o valor de uma dada coluna pré fixando seu índice com $. O exemplo citado então fica, gnuplot> plot "saida.txt" using (2*$1):(3*$2) gnuplot> 0 5 10 15 20 25 30 0 50 100 150 200 "saida.txt" using (2*1) : (3∗2) + + ++ + + + + + + + + + + + + + + + + + 19 Não há restrições nas expressões avaliativas sendo inclusive possível operar entre colunas. No exemplo, gnuplot> plot "saida.txt" using ($1):( ($2+$3)/2 ) gnuplot> as abcissas são valores da primeira coluna ao passo que as ordena- das são os valores médios entre os dados da segunda e terceira co- luna. Naturalmente a expressão using 1:2 é equivalente a using ($1):($2). Assim a notação com parênteses e $ só é realmente in- teressante quando processamento adicional é requerido. O padrão de curvas com funções utiliza linhas ao passo que dados de arquivos são plotados com pontos (pequenas cruzes). É entretanto possível mudar estes padrões usando o modificador with. Por exemplo, para plotar uma curva em linha dos dados do arquivo saida.txt use, gnuplot> plot "saida.txt" using 1:3 with lines gnuplot> 0 200 400 600 800 1000 0 20 40 60 80 100 "saida.txt" using 1:3 De forma similar pode-se obrigar funções a usarem pontos como em, gnuplot> plot cos(x) with points gnuplot> -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 -10 -5 0 5 10 cos(x) + ++++ + + + + + + + + + + + ++ +++ + + + + + + + + + + + ++++ + + + + + + + + + + + ++ ++++ + + + + + + + + + + +++++ + + + + + + + + + + + +++++ + + + + + + + + + + +++++ + + 20 11 Usando Scripts O uso do gnuplot até este momento tem sido iterativo, ou seja, coman- dos são discrminados e executados individualmente logo após terem sido dados. Na prática é mais comum realizar o chamado processa- mento em lote (batch mode), ou seja, escrever um arquivo contendo instruções gnuplot e processá-lo de uma única vez . Um arquivo deste tipo é denominado script. De fato um arquivo de script é um arquivo de texto não sendo importante, por exemplo, sua extensão. Por con- venção usaremos a extensão .gp podendo o usuário escrever scripts com quaisquer extensão contanto que o conteúdo do arquivo seja ex- clusivamente código gnuplot. Seja um arquivo de exemplo denominado exemplo1.gp contendo ape- nas instruções gnuplot. Para processá-lo deve-se escrever na linha de comando, $ gnuplot exemplo1.gp Atente ao fato de o gnuplot precisar estar convenientemente configu- rado para estar visível na pasta corrente que contém exemplo1.gp. No linux isso é configurado pela própria instalação do gnuplot. No win- dows é necessário configurar a pasta binary interna a pasta principal do gnuplot. Para tanto deve-se adicionar o caminho completo desta pasta (o local corrente em disco onde ela está na sua máquina) para a variável de ambiente PATH (abra a janela propriedades de sistema e clique em variáveis de ambiente, procure e edite a variável PATH e, separando com ponto-e-vírgula, adicione o caminho de sua pasta). Scripts podem ser editados em quaisquer editores de texto simples. Po exemplo, para usuários linux que utilizam GNOME, podem usar o gedit. No Windows o bloco de notas (notepad) é suficiente. Abra seu editor de preferência e escreva o código gnuplot pretendido. por fim salve-o na pasta que está corrente na linha de comando e execute o script conforme já ilustrado. Uma peculiaridade do processamento em lote é que após a execução nenhum gráfico será exibido. De fato o gráfico é gerado, mas como a execução do script se encerra o gráfico vai embora com ela. Para revol- ver o problema deve-se redirecionar a saída gráfica para, por exemplo, um arquivo de imagem que poderá ser aberto e visualizado após o tér- mino do script. Para fazer isso deve-se modificar o tipo de terminal utilizado e definir um nome para o arquivo de imagem que conterá a saída. Usaremos aqui o terminal jpeg para ilustrar isso. Com este terminal ativo pode-se gerar imagens jpeg do gráfico construído. No exemplo, % Exemplo de script gnuplot set term jpeg set output "imagem1.jpg" plot [-10:10] x*x lw 3 A linha set term jpeg define o terminal jpeg ao passo que set output define o nome do arquivo de imagem de saída. Em scripts todo con- teúdo de uma linha adiante de um % é considerado um comentário e 21 não é processado (use isso para documentar o script como no exemplo anterior). Neste exemplo o arquivo de imagem imagem1.jpg é criado na mesma pasta onde está o arquivo de script (para mudar isso espe- cifique o diretório completo entre as aspas duplas do novo arquivo de imagem). 12 Ajuste de Curvas Ajustar uma curva ou obter a curva que ajusta pontos um modelo de função significa determinar os coeficientes da função-modelo de forma que ela passe o mais próximo dos pontos dados. Se a quantidade de pontos dada for determinística (capaz de definir uma única instância da função) então o ajuste será exato, ou seja, os pontos ajustados farão parte da função de ajuste. Por exemplo, considere o modelo de função, f(x) = ax2 + bx+ c e os pontos, x y 1.0 17 -3.0 85.0 8.0 129.0 O modelo é de uma função de segundo grau. Os coeficientes a se de- terminarem são a, b e c. O exemplo é determinístico pois três pontos não colineares definem uma única função de segundo grau. Em gnuplot utiliza-se o comado fit para efetuar ajustes de curva. Um receituário para a tarefa é descrito a seguir, 1. Salve os pontos num arquivo texto separando colunas com espa- ços ou tabulações e linhas com quebras de linhas. É comodo que este arquivo esteja na pasta corrente (de onde o gnuplot poderá acessá-lo sem necessitar de um caminho). No nosso exemplo cri- amos um arquivo ’pontos.dat’ cujo conteúdo fica com aspecto, 1.0 17.0 -3.0 85.0 8.0 129.0 2. Definimos um modelo no gnuplot da função. É exatamente como criar uma definição de uma função, mas neste caso usamos va- riáveis adicionais para definir os coeficientes. Para definir um modelo de equação de segundo grau em gnuplot escrevemos, gnuplot> f(x) = a*x**2 + b*x + c gnuplot> 3. Adicionalmente podemos dar valores iniciais aos coeficientes. Algo como, 22 gnuplot> a = 1.0 gnuplot> b = 1.0 gnuplot> c = 1.0 gnuplot> O sentido disso está no fato de o algoritmo utilizado para fazer o ajuste ser numérico-iterativo, ou seja, parte de estimativas ini- ciais para os coeficientes e reliza um número finito de iterações até que a resposta seja encontrada ou até descobrir que não pode encontrar os coeficientes. Diz-se neste último caso que houve di- vergência. Divergências podem ser evitadas se bons valores inici- ais forem dados. Bons valores iniciais dos coeficientes significam também poucas iterações. 4. Invocamos o comanfo fit no gnuplot com a seguinte sintaxe, fit [modelo] [arquivo de dados] using [colunas] via [coeficientes] As colunas, anunciadas pelo modificador using, devem ser sepa- radas com : indicando a numeração que as respectivas ocupam dentro do arquivo de dados. O modificador via anuncia os co- eficientes através dos quais ocorrerá o ajuste. Temos então em nosso exemplo, gnuplot> fit f(x) ’./pontos.dat’ using 1:2 via a,b,c indicando que um ajuste será realizado utilizando o modelo f(x) através dos pontos no arquivo ’pontos.dat’ aplicando a coluna 1 como abcissa e a coluna 2 como ordenada e registrando os resulta- dos nos coeficientes a, b e c. A execução de um ajuste em gnuplot gera como saída um relatório dos valores alcançados pelos coeficientes ao final de cada iteração. Um trecho dessas informações segue, Iteration 0 WSSR : 9416 delta(WSSR)/WSSR : 0 delta(WSSR) : 0 limit for stopping : 1e-05 lambda : 21.7435 initial set of free parameter values a = 1 b = 1 c = 1 / Iteration 1 WSSR : 4778.04 delta(WSSR)/WSSR : -0.970683 delta(WSSR) : -4637.96 limit for stopping : 1e-05 lambda : 2.17435 23 resultant parameter values a = 1.96851 b = 0.554314 c = 1.16605 / Iteration 2 ... No final do processo o gnuplot faz um relatório conclusivo indi- cado, por exemplo, o total de iteraçõesefetuadas. O relatório final do exemplo aborado é mostrado a seguir, ************************* After 7 iterations the fit converged. final sum of squares of residuals : 2.01948e-28 rel. change during last iteration : 0 Exactly as many data points as there are parameters. In this degenerate case, all errors are zero by definition. Final set of parameters ======================= a = 3 b = -11 c = 25 Note que os valores finais dos coeficientes são listados. Após a con- vergência o modelo, f(x), se converte na função ajustada, ou seja, f(x) = 3x2 − 11x+ 26. Assim a saída de, gnuplot> f(x) = 3*x**2 - 11*x + 25 gnuplot> plot [-4:9] f(x), ’./pontos.dat’ using 1:2 with points gnuplot> 0 20 40 60 80 100 120 140 160 180 -4 -2 0 2 4 6 8 f(x) ’./pontos.dat’ using 1:2 + + + + 24 Note que os pontos ficaram exatamente sobre a curva da parábola (mo- delo determinístico). Consideraremos um outro exemplo, desta vez não determinística. Seja ’dados.dat’ um arquivo contendo duas colunas (digamos, x e y) de 100 linhas com x na faixa 0..10 e y na faixa 0..20. Computando, g(x) = a*x + b a = 1.0 b = 0.0 fit g(x) ’./dados.dat’ using 1:2 via a, b plot [0:10] ’./dados.dat’ using 1:2 with points, g(x) obtemos, 13 Usando Ajuda do Gnuplot Para obter mais detalhes sobre os recursos apresentados neste artigo, e outras cetenas mais que não mencionamos aqui, use o comando help. Ele deve ser escrito acompanhado do comando que se deseja um maior detalhamento. Poe exemplo chamar, gnuplot> help set lista a ajuda de set e mostra todos os itens que ele pode configurar. Para detalhamento de algum deles basta digitá-lo ou chamar direta- mente no prompt, gnuplot> help set angles A maioria dos comandos aqui contém algum material de ajuda (help plot, help linecolor, help with, help using e etc). Um tutorial completo do gnuplot está disponível em inglês no endereço, http://www.gnuplot.info/docs/gnuplot.html 25
Compartilhar