Gnuplot - VERSATIL FERRAMENTA CIENTÍFICA

Introdução

Alguém ja viu o linux de jaleco? Um dos "front" de batalha onde o linux sempre se saiu muito bem é a área de pesquisa, naturalmente restrito a comunidade científica, é incrivel a quantidade de programas que se pode encontrar voltado para as várias facetas da pesquisa científicas (humanas, exatas, biológicas), é nesse ambiente de tubos de ensaios ou simulações de fenômenos físicos que apresento o Gnuplot.

O gnuplot é um programa voltado para a área exata, e tendo várias ferramentas para a manipulacão de dados, com ele é possivel "plotar" gráficos de funções de uma ou duas variáveis (2D ou 3D), trabalhar com modelos numéricos entre outras. A intenção deste artigo é atiçar sua curiosidade, pois existe um farto material sobre gnuplot na internet, mostrando os principais comandos de forma simples e direta.

Instalando o Gnuplot

Para instalar o gnuplot voce pode pegar o seu código fonte no próprio site e seguir os passos tradicionais para a instalacao ou procurar por algum pacote correspondente a sua distro, para os usuários de Debian (como eu), Basta fazer o seguinte para instalar o pacote básico do Gnuplot:

#apt-get install gnuplot

Para instalar o pacotes que usa os recursos do X11 para gerar os gráficos:

#apt-get install gnuplot-x11

O Primeiro Contato

Digite no terminal o comando "gnuplot" sem as aspas para para executa-lo, feito isso o prompt do gnuplot aparecerá como mostra a figura abaixo:



Existe front-end para o mesmo, mas não vejo muita serventia, pois depois que se aprende alguns comando tudo fica simples de usar, o help pode ser acessado digitando "help" sem as aspas, não é muito interativo, mas por via das duvidas escolha um tutorial qualquer da internet para algo mais avançado, vamos então fazer alguma coisa com o prompt do gnuplot :D.

Considerações Prévias

Para declararmos as funções matematicas no terminal, devemos primeiro converter os simbolos matemáticos para caracteres para que possa ser inserido através do teclado e sendo assim devemos tomar um pouco de cuidado, veja os exemplos:

"raiz quadrada de x" em caracteres fica:

sqrt(x)

"x ao quadrado mais dois":

x**2+2

"cosseno de x"

cos(x)

"seno de x"

sin(x)

"x ao quadrado mais 1, dividido por raiz de x mais 4"

x**2+1/sqrt(x+4)

"modulo de x"

abs(x)

Isso não é só usado no gnuplot e sim em todos os programas em que é necessário declarar funções matemáticas ou coisas do gênero, a ainda há programas que aceitam "x quadrado" como "x^2", no caso do gnuplot não, vamos a alguns exemplos.

Gráficos no Plano (2D)

É muito facil fazer gráficos no plano usando o gnuplot, por exemplo, digamos que eu queira "plotar" o gráfico de uma função matemática de segundo grau do tipo "f(x)= x**2+2*x+2" (x ao quadrado, mais dois x's mais dois), basta: gnuplot > plot x**2+2*x+2

idem para seno de x:

gnuplot > plot sin(x)

para plotar o modulo de x

gnuplot > plot abs(x)

o gráfico de x ao cubo fica:

gnuplot > plot x**3

E para inserir intervalos basta usar os intervalos que voce quer entre cochetes separados por ":", exemplo [-3:3] ficando assim:

gnuplot > plot [-1:1][-0.5:0.5] x**3

Sendo que o argumento do primeiro par de conchetes pertence ao intervalo do eixo X e o segundo do eixo Y, mostrando somente a parte do gráfico da funcção de "x ao cubo" que está nestes intervalos.

É possivel ainda "plotar" vários gráficos na mesma janela, para isso basta roda logo em seguida um "replot" com a função desejada, veja um exemplo:

gnuplot > plot [-1:1][-0.5:0.5] x**3
gnuplot > replot x**2



Tente ainda plotar um gráfico usando pontos e linhas com pontos e outros simbolos: gnuplot > plot -x**2 with dots

gnuplot > plot -x**3 with points

gnuplot > plot sin(x) with linespoint

Lembrando que no caso de gráficos no plano podemos usar o recurso do mouse para verificar certas propriedade do mesmo. Para ver uma determinada área de um gráfico mais de perto, basta destacar a região do mesmo, com o botão da direito do mouse você inicia o retângulo com a área que irá ser ampliada, e com o mesmo botão você finaliza a retângulo. Com o botão do meio você coleta as coordenadas de alguns pontos no gráfico, tente descobrir o que mais pode ser feito com a plotagem de gráficos no plano.



Gráficos no Espaço(3D)

O meu favorito, os gráficos no plano são gerados por funções matemáticas de duas variáveis, do tipo "f(x,y)=x+y". Pela matemática formal temos um par de valores conhecido como domínio "(1,1)" que são os valores de X e Y, que quando jogados na função, no caso "f(x,y)=x+y" retorna o valor chamado de imagem, que correspondeao valor de Z, dessa forma você tem as coordenadas necessárias para gerar um ponto no espaço (1,1,2). Vamos ao gnuplot:

gráfico de um plano com angulo 45 graus:

gnuplot > splot x+y

gráfico de uma onda plana:

gnuplot > splot cos(x+y)

gráfico de natureza ondulatória:

splot cos(x)+sin(y)

gráfico de uma superfície ondulada:

gnuplot > splot x**3+y**3

E por ae vai...



É possivel ainda "plotar vários gráficos na mesma janela, para isso basta rodar novamente o "replot", exemplo:

gnuplot > reset
gnuplot > splot x**2+y**2
gnuplot > replot -x**2-y**2+200




continuando com o "replot" seguido da função você adiciona sucessivamente e indefinidamente.

Para aumentar a resolução do gráfico basta rodar o comando "set isosamples 50,50" antes do "splot", sendo que o "50,50" é resolução ou como queira, mais pontos plotados para a função escolhida, exemplo:

gnuplot > set isosamples 50,50
gnuplot > splot x**2+y**2
Para plotar a função juntamente com as curvas de contorno basta usar o "set contour base", exemplo:

gnuplot > set contour base
gnuplot > splot x**2+y**2
E não podemos esquecer que ainda podemos escolher como plotar o gráfico, se com pontos ou linhas ou ainda outras frescuras, segue abaixo:

gnuplot > splot x**2+y**2 with dots

gnuplot > splot cos(x+y) with dots



E por ai vai.....

O mouse no gráfico 3D, tem muito mais recursos. Com o botão da esquerda você pode rotacionar o gráfico gerado livremente, com o botão do meio pressionado, se efetua um zoom para maior, se o mouse for para a direita, indo para esquerda o gráfico se afasta (zoom para menor), para cima e para baixo temos uma variação do eixo Z, ou uma variação na amplitude do gráfico. Estou levando em consideração o meu mouse de três botões, mas acredito que você pode ter o mesmo efeito clicando os dois botões no mouse de dois botões que é equivalente ao terceiro botão.

Uma aplicação (importando dados)

Digamos que em vez de eu "plotar" os gráficos eu queira cria-lo através de um programa simples escrito em C, vejamos como fica o programa:



#include <stdio.h>
#include <math.h>
main(){
        float x,y,z;
        for(x=-20;x<=20;x+=0.3) //contadores
        for(y=-20;y<=20;y+=0.3)
        
 	       {
        z=sin(sqrt(pow(x,2)+pow(y,2))); //função matematica
                printf("%f  %f  %f\n",x,y,z); // saida na tela do resultado
        }
}





Perdoem a minha ignorância, mas não sou bom em C,estou aprendendo ainda. O programinha acima, gera os valores pra X e Y com os contadores, e joga na função declarada gerando uma saida no terminal via o "printf", para quem tem habilidade com C pode acrecentar o código necessário que gera um arquivo de saida sem precisar usar recursos do shell (por favor alguem faça para que eu possa aprender) com os valores, no meu caso redireciono a saida para um arquivo usando o próprio shell. Salve o código acima num arquivo e faça:

$gcc -o arquivo arquivo.c -lm

O "-lm" é para linkar biblioteca "math.h", com o executavel gerado "arquivo" o próximo passo é rodar o programa e direcionar a saida para um arquivo:

$./arquivo > dados.txt

Em seguida abra o Gnuplot e roda o seguinte comando:

gnuplot > splot 'dados.txt' u 1:2:3 with dots

Veja o resultado



O splot é para "plotar" funções tridimensionais, no caso os valores são do arquivo chamado "dados.txt" que foi gerado, "u 1:2:3" indentifica que eixos do plano cartesiano receberá os valores das colunas de dados gerado pelo programa, no caso será para X, Y e Z. A regra acima vale para "plotar" também funções para o plano, por exemplo:

gnuplot > plot 'dados.txt' u 1:2 with dots

Sendo que aqui declaramos apenas duas colunas "u 1:2" correspondente aos valores do eixo da ordenadas e abssiças.

Conclusão

As possibilidades com este programa simples são muitas, todas muito útil no meu ponto de vista, aqui só trabalhamos dados e gráficos no plano cartesiano, mas é possível gerar gráficos em coordenadas polares e coordenadas esféricas. A função deste artigo é despertar o interesse naqueles que gostam de se aventurar em pesquisas "caseiras" onde é necessário analizar gráficos. O gnuplot faz muito bem o seu serviço, relacionado com uma linguagem de programacao e um pouco de criatividade você coloca no chinelo softwares proprietários pagos e caros, como é o caso do matlab, maple e outros. Lembrando que o linux tem várias outras ferramentas apropriada e em pé de igualdade para competir com os software proprietários relacionados nesta conclusão, como é o caso do Scilab. Por enquanto é só fique a vontade com o gnuplot.



Franklin Anderson de Oliveira Souza <[email protected]> - Merovigiam

É garantida a permissão para copiar, distribuir e/ou modificar este documento sobre os termos da GNU Free Documentation Licence. 2004


Hosted by www.Geocities.ws

1