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:
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:
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