Você está na página 1de 28

Laboratrio Nacional de Computao Cientfica

Minicurso: Introduo ao Octave Luiz Aquino Maro de 2010 aquino.luizclaudio@gmail.com.br

Introduo

O que Octave?

um programa para efetuar clculos numricos. Ele possui um extensivo conjunto de ferramentas para o clculo de problemas comuns como: clculo de autovalores e autovetores, soluo de sistema de equaes, manipulao de polinmios, determinar raiz de equaes no lineares, integrao numrica, soluo de equaes diferenciais ordinrias, etc. Em 1988, para auxiliar no desenho de reaes qumicas. Foi criado por James B. Rawlings da Universidade de Wisconsin-Madison e John G. Ekerdt da Universidade do Texas. Em 1993, foi liberada a verso 1.0 e passou a ser uma ferramenta mais abrangente. Atualmante, est na verso 3.2.4. Devido a sua linguagem simples e intuitiva, torna mais rpida a implementao da soluo de um problema. Alm disso, possui um grande conjunto de ferramentas numricas nativamente. distribuido sobre licena GPL (General Public License). Multiplataforma: Linux, Unix, Mac, Windows. Permite carregar mdulos escritos em outras linguagens (Ex.: C++, Fortran). Compatvel com outros programas da categoria (Ex.: MatLab). http://www.gnu.org/software/octave/

Quando surgiu?

Por que aprender?

Principais caractersticas.

Onde Obter?

Janela do Octave
O Octave originalmente no dispe de interface grfica. Ele deve ser executado no terminal (Linux) ou no MS-Dos (Windows) como ilustrado abaixo.

QtOctave: Interface grfica para o Octave.


Barra de Ferramentas

Navegador de Arquivos

Lista de Variveis e Funes

Histrico de Comandos

Disponvel em: http://qtoctave.wordpress.com/

QtOctave: Interface grfica para o Octave.

Sada do Terminal

Entrada do Terminal
Disponvel em: http://qtoctave.wordpress.com/

Comandos Bsicos

cd : Muda o diretrio atual. pwd : Exibe diretrio atual. ls : Lista o contedo do diretrio atual. mkdir : Cria uma diretrio. rmdir : Remove um diretrio. delete : Remove um arquivo.

Nmeros, Matrizes e Textos

Nmeros Reais: Notao simples:

x = 1.981 x = 1981e-3

Notao cientfica: m e p m10 p

Nmeros Complexos: Notao: a + bi

z = 10 + 1.981i

Matrizes: Notao: A=[linha_1; linha_2; linha_n]

Exemplo: A=[1 2 3; 4 5 6; 7 8 9]

Textos: txt='Meu texto.' ou txt=Meu texto.

1 2 3 A= 4 5 6 7 8 9

[ ]

Operaes Aritmticas

Operadores Bsicos : Soma: +

Subtrao: Multiplicao: * Diviso: / Potenciao: ^ ou ** Transposto Complexo: '

Operadores termo termo (matriz) : .<Operador Bsico>

Exemplo: A .* B : produto termo termo.

[ ][ ][

1 2 5 6 5 12 . = 3 4 7 8 21 32

Operaes bsicas com matrizes

Acessar elemento: Notao: A(Linha, Coluna).

1 2 3 Exemplo: Se A=[1 2 3; 4 5 6; 7 8 9], ento A(2, 3)=6 A= 4 5 6 Obs: O primeiro ndice da linha ou da coluna 1. 7 8 9

[ ]

Acessar bloco: Notao: A(IncioLinha:FimLinha, IncioColuna:FimColuna)

Exemplo: Se A=[1 2 3; 4 5 6; 7 8 9], ento A(2:3, 1:2)=[4 5; 7 8] Obs: Caso nicio e Fim no sejam especificados, ser considerado o ndice 1 para nicio e a dimenso da matriz (linha ou coluna, conforme o caso) para Fim.

Exemplo: A(:, 1:2)=[1 2; 4 5; 7 8]

Funes bsicas: size(A) : retorna as dimenses (Linha x Coluna) da matriz A.

inv(A) : calcula a inversa da matriz A. eye(n) : cria uma matriz identidade de ordem n. zeros(n, m) : cria uma matriz nula de ordem n x m. ones(n, m) : cria uma matriz de ordem n x m com elementos iguais a 1.

Exemplo: Soluo de um Sistema Linear


Considere o sistema abaixo:

ab=5 ab=1

Na forma matricial, temos a equao Ax=y, sendo:


A=

1 1 , 1 1

x=

[]

a 5 , y= b 1

[]

Para derterminar a soluo desse sistema no Octave, podemos fazer: x=A\y Conceitualmente, isso equivalente x=A-1y, porm na implementao computacional no h o clculo da matriz inversa.

Plotar Grficos 2D
A funo bsica para plotar grficos bidimensionais plot. plot(y) : plotar os valores y sobre o eixo y considerando os ndices dos elementos como sendo a coordenada x.

plot(x, y) : plotar os pontos com coordenadas (x, y) plot(x, y, 'formato') : plotar os pontos com coordenadas (x, y) com o estilo 'formato'

'formato' pode conter: '<EstiloDoPonto><CorDoPonto>;<RtuloDoGrfico>;'.

<EstiloDoPonto>: -, +, *, o, x, ^, . <CorDoPonto>: k (preto), r (vermelho), g (verde), b (azul), m (magenta), c (ciano), w (branco). <RtuloDoGrfico>: texto indicativo do grfico. plot(x, y, 'formato', u, v, 'formato', ) : plotar mltiplos grficos sobre a mesma janela.

Observao: entre cada execuo da funo plot necessrio executar a funo figure caso voc queira gerar duas janelas grficas separadas. Se for necessrio 'segurar' a janela grfica atual para plotar grficos sobrepostos, deve-se usar o comando hold <on/off>.

Exemplo Simples de Grfico 2D


Considere que x est no intervalo [-, ]. Desse modo, a funo plot(x, sin(x), '^m;Seno;') plota o grfico abaixo.

Exemplo de Mltiplos Grficos 2D


Considere que x est no intervalo [-, ]. Desse modo, a funo plot(x, sin(x), '^m;Seno;', x, cos(x), 'og;Cosseno;') plota o grfico abaixo.

Formatao da Janela Grfica


Podemos formatar a janela grfica adicionando ttulo, rtulos, grade, alterando os limites e o aspecto dos eixos. title('Titulo do grafico') : altera o ttulo do grfico para 'Titulo do grafico'. grid <on/off> : exibe ou no a grade. xlabel('Rotulo do eixo x') : altera o rtulo do eixo x para 'Rotulo do eixo x'. ylabel('Rotulo do eixo y') : altera o rtulo do eixo x para 'Rotulo do eixo y'. axis([xmin, xmax, ymin, ymax, zmin, zmax], <propriedades>) : fixa os limites para os eixos e altera algumas propriedades do grfico. O campo <propriedades> pode ser: 'square', 'equal', 'normal', 'auto', 'manual', 'on', 'off', 'tic[xyz]', 'label[xyz]', 'nolabel', 'ij', 'xy'

Formatao da Janela Grfica


Considere que x est no intervalo [-, ]. Desse modo, a sequncia de funes plot(x, sin(x), 'm;Seno;') title('Grafico do Seno') xlabel('Eixo x') ylabel('Eixo y') grid on axis([-2*pi, 2*pi, -2, 2], 'normal') plota o grfico ao lado.

Salvar Janela Grfica

Podemos salvar a janela grfica atual atravs da funo print. print(<nome_do_arquivo>, <propriedades>) : salva a janela grfica atual no arquivo <nome_do_arquivo> com as propriedades <propriedades>. <propriedades>: '-P<impressora>': definir sada para <impressora>.

'-color', '-mono', '-solid', '-dashed', '-portrait', '-landscape' : propriedades gerais. '-d<tipo_do_arquivo>' : Tipo do arquivo, onde <tipo_do_arquivo> pode ser 'ps', 'ps2', 'psc', 'psc2', 'eps', 'eps2', 'epsc', 'epsc2', 'tex', 'epslatex', 'epslatexstandalone', 'pstex', 'pslatex', 'ill', 'aifm', 'cdr', 'dxf', 'emf', 'fig', 'hpgl', 'mf', 'png', 'jpg', jpeg', 'gif', 'pbm', 'svg', 'pdf'. '-S<TamanhoX>,<TamanhoY>' : tamanho do arquivo (em pixels) '-F<NomeDaFonte>:<Tamanho>' : nome e tamanho da fonte (disponvel para os formatos postscript, aifm, corel e fig).

Exemplo: print('meu_grafico.png', '-dpng', '-S800,600'). Observao: Caso o tipo do arquivo no seja especificado, o Octave tenta descobrir pela extenso dada. Caso o tamanho no seja especificado, o padro 640x480.

Arquivo de Funo

Um Arquivo de Funo contm uma funo principal e opicionalmente funes secundrias ou subfunes. A primeira linha til do arquivo deve conter obrigatoriamente a declarao da funo principal. Essa ser a funo executada inicialmente quando o arquivo for chamado. O arquivo deve ter a extenso .m e seu nome deve ser igual ao nome da funo principal. O Octave sensvel maisculas ou minsculas, portanto lembre-se que Funo.m e funo.m so arquivos diferentes. As subfunes so disponveis apenas dentro do arquivo onde elas esto declaradas, portanto no podem ser executadas externamente. A declarao de uma funo feita da seguinte maneira: function [retorno1, retorno2, , retornoj] = nome_da_funcao(arg1, arg2, , argn) % Corpo da funo % Os caracteres % ou # marcam comentrios. end Note que o Octave permite mltiplos retornos. No exemplo acima, temos j retornos e n argumentos. O nome do arquivo criado nesse exemplo dever ser nome_da_funcao.m Para executar a funo, basta entrar com seu nome no terminal do Octave. Vale lembrar que a funo deve estar salva no diretrio atual (ou nos diretrios de busca do sistema).

Exemplo de Aquivo de Funo


Vamos criar uma funo que receba o nome do usurio e d boas-vindas (um clssico! ;-)) Crie um arquivo com o nome 'boasVindas.m'. Edite esse arquivo como descrito abaixo: function boasVindas(usuario) %Descrio: Funo de boas vindas ao usurio. printf(Seja bem-vindo(a) usuario(a): %s\n, usuario); end Note que o Octave no utiliza identificadores de tipo de varivel! Isto , no foi necessrio declarar que 'usuario' do tipo string. Aps editar o arquivo, basta entrar com o nome da funo juntamente com seu argumento no terminal do Octave: octave:1> boasVindas('Francislene Aquino') octave:2> Seja bem-vinda(a) usuario(a): Francislene Aquino Vale lembrar que a pasta atual deve ser a mesma onde voc salvou o arquivo. Por exemplo, vamos supor que voc salvou o arquivo na pasta '/minicurso_octave/exemplos'. Ento, se essa ainda no a pasta atual, execute o comando 'cd /minicurso_octave/exemplos'. Em seguida, basta executar a funo.

Estrutura Condicional: if
Estrutura condicional segue a sintaxe: if Condio % Caso Condio seja verdadeira else % Caso Condio seja falsa end Vamos fazer uma funo que recebe dois nmeros e retorna o maior deles: function maior = maximo(num1, num2) %Descrio: Retorna o maior dentre dois nmeros. if num1 > num2 maior = num1; else maior = num2; end end

Operadores de Comparao e Operadores Lgicos


Os operadores de comparao so os seguintes: == : igualdade.

!= ou ~= : diferena. >, >= : maior e maior igual. <, <= : menor e menor igual.

Os operadores lgicos so os seguintes: && : conjuno (e).

|| : disjuno (ou). ! ou ~ : negao.

Estrutura Condicional: switch


Uma estrutura condicional switch segue a sintaxe: switch (x) case Opo1 % Instrues caso seja a Opo1 case Opon % Instrues caso seja a Opon otherwise % Instrues caso no seja nenhuma das anteriores

end As opes tambm podem ser uma lista de valores. Por exemplo: case {1, 2, 3} As opes podem ser strings. Diferente da linguagem C/C++, os casos so exclusivos, portanto no h necessidade do comando break em cada bloco.

Exemplo de Estrutura Condicional switch


function x=miniCalc(op1, operador, op2) %Descrio: Calcula o resultado de: (op1 operador op2) %Se ocorrer algum erro, a funo retorna o valor x="erro". x="erro"; switch (operador) case "+" x=op1+op2; case "-" x=op1-op2; case "*" x=op1*op2; case "/" if op2 != 0.0 x=op1/op2; else disp("Erro: Diviso por zero!"); end case {"^", "**"} disp("Operao no implementada."); otherwise disp("Operao invlida! Use: \"+\", \"-\", \"*\" ou \"/\""); end end

Estrutura de repetio: for


Uma estrutura de repetio for segue a sintaxe: for i = <Incio>:<Incremento>:<Fim> %Instrues a serem repetidas end Observao: se <Incremento> no especificado, ento ele considerado igual a 1. Vamos criar uma funo que recebe um vetor de nmeros e calcula a mdia entre seus elementos. function m=media(v) %Descrio: recebe um vetor v e calcula a mdia entre seus elementos. n=length(v); %Retorna o nmero de elementos do vetor v. m=0.0; for i = 1:n m=m+v(i); %Poderiamos usar m+=v(i), como na linguagem C/C++ end m=m/n; %Poderiamos usar m/=n, como na linguagem C/C++ end

Estrutura de repetio: while


Uma estrutura de repetio while segue a sintaxe: while Condio %Instrues a serem repetidas end Vamos criar uma funo que calcula os n primeiros elementos da sequncia de Fibonacci. function fib = fibonacci(n) %Descrio: Clcula os n termos da sequncia de Fibonacci. fib=ones(1, n); i = 3; while (i <= n) fib(i) = fib(i-1) + fib(i-2); i=i+1;%Poderiamos usar i++, como na linguagem C/C++ end end

Estrutura de repetio: do-until


Uma estrutura de repetio do-until segue a sintaxe: do %Instrues a serem repetidas until Condio Vamos criar uma funo que calcula os n primeiros elementos da sequncia de Fibonacci. function fib = fibonacci(n) %Descrio: Clcula os n termos da sequncia de Fibonacci. fib=ones(1, n); if n>2 i = 2; do i++; fib(i) = fib(i-1) + fib(i-2); until (i == n) end end

Dicas e truques

Concatenar string: [texto1 , texto2] : produz o texto texto 1 texto 2. Criar variveis com valores em um intervalo: <Incio>:<Incremento>:<Fim> : x=[1:0.25:2] cria o vetor x=[1.0 1.25 1.5 1.75 2.0] Variveis globais: Para declarar uma varivel global use o identificador global. Por exemplo, na funo principal escreva global minha_variavel e atribua o valor desejado minha_variavel. Em seguida, para usar essa varivel nas subfunes, voc deve export-la usando a mesma sintaxe anterior. Funes teis: close all : fecha todas as janelas abertas.

clear all : limpa as variveis do ambiente. min(v) : retorna o menor valor em v e a posio onde ele ocorre. max(v) : retorna o maior valor em v e a posio onde ele ocorre. sum(v) : retorna o somatrio dos valores contidos em v. prod(v) : retorna o produtrio dos valores contidos em v. spy(M) : plota uma representao grfica da esparsidade da matriz M. eval(expresso) : avalia a expresso definida por expresso.

Obtendo ajuda
H um vasto material sobre o Octave na Internet! Com uma rpida pesquisa em um site de busca voc encontrar milhares de pginas. Um manual on-line do Octave pode ser encontrado na pgina: http://www.gnu.org/software/octave/doc/interpreter/ Um comando muito til no Octave o help. Com ele voc pode encontrar a referncia de todas as funes disponveis no Octave, bem como informaes sobre palavras reservadas e constantes. Nas funes criadas pelo usurio, as primeiras linhas comentadas logo aps a declarao da mesma, servem como referncia para o comando help. Isto , o comando help nome_de_sua_funo retorna tudo que est escrito nos comentrios iniciais de sua funo.

Agradecimento
Obrigado pela ateno! Espero que o Octave seja muito til para todos vocs! Luiz Aquino aquino.luizclaudio@gmail.com.br

Você também pode gostar