Vous êtes sur la page 1sur 28

Laboratório Nacional de

Computação Científica

Minicurso: Introdução ao Octave

Luiz Aquino
Março de 2010
aquino.luizclaudio@gmail.com.br
Introdução
 O que é Octave?
 É um programa para efetuar cálculos numéricos.
 Ele possui um extensivo conjunto de ferramentas para o cálculo de problemas comuns como: cálculo
de autovalores e autovetores, solução de sistema de equações, manipulação de polinômios,
determinar raiz de equações não lineares, integração numérica, solução de equações diferenciais
ordinárias, etc.
 Quando surgiu?
 Em 1988, para auxiliar no desenho de reações químicas. Foi criado por James B. Rawlings da
Universidade de Wisconsin-Madison e John G. Ekerdt da Universidade do Texas. Em 1993, foi liberada
a versão 1.0 e passou a ser uma ferramenta mais abrangente. Atualmante, está na versão 3.2.4.
 Por que aprender?
 Devido a sua linguagem simples e intuitiva, torna mais rápida a implementação da solução de um
problema. Além disso, possui um grande conjunto de ferramentas numéricas nativamente.
 Principais características.
 É distribuido sobre licença GPL (General Public License).
 Multiplataforma: Linux, Unix, Mac, Windows.
 Permite carregar módulos escritos em outras linguagens (Ex.: C++, Fortran).
 Compatível com outros programas da categoria (Ex.: MatLab).
 Onde Obter?
 http://www.gnu.org/software/octave/
Janela do Octave

O Octave originalmente não dispõe de interface gráfica. Ele deve ser executado no terminal
(Linux) ou no MS-Dos (Windows) como ilustrado abaixo.
QtOctave: Interface gráfica para o
Octave.
Barra de Ferramentas

Navegador de Arquivos

Lista de Variáveis e Funções

Histórico de Comandos

Disponível em: http://qtoctave.wordpress.com/


QtOctave: Interface gráfica para o
Octave.

Saída do Terminal

Entrada do Terminal

Disponível em: http://qtoctave.wordpress.com/


Comandos Básicos

 cd : Muda o diretório atual.


 pwd : Exibe diretório atual.
 ls : Lista o conteúdo do diretório atual.
 mkdir : Cria uma diretório.
 rmdir : Remove um diretório.
 delete : Remove um arquivo.
Números, Matrizes e Textos
 Números Reais:
 Notação simples:
 x = 1.981
 Notação científica: m e± p ⇔ m⋅10± p
 x = 1981e-3
 Números Complexos:
 Notação: a + bi
 z = 10 + 1.981i
 Matrizes:
 Notação: A=[linha_1; linha_2; linha_n]

[ ]
1 2 3
 Exemplo: A=[1 2 3; 4 5 6; 7 8 9] A= 4 5 6
 Textos: 7 8 9
 txt='Meu texto.' ou txt=”Meu texto.”
Operações Aritméticas

 Operadores Básicos :
 Soma: +
 Subtração: -
 Multiplicação: *
 Divisão: /
 Potenciação: ^ ou **
 Transposto Complexo: '
 Operadores termo à termo (matriz) :
 .<Operador Básico>
 Exemplo: A .* B : produto termo à termo.

[ ][ ][
1 2
3 4
.∗
5 6
7 8
=
5 12
21 32 ]
Operações básicas com matrizes
 Acessar elemento:
 Notação: A(Linha, Coluna).

[ ]
1 2 3
 Exemplo: Se A=[1 2 3; 4 5 6; 7 8 9], então A(2, 3)=6 A=
4 5 6
 Obs: O primeiro índice da linha ou da coluna é 1. 7 8 9
 Acessar bloco:
 Notação: A(InícioLinha:FimLinha, InícioColuna:FimColuna)
 Exemplo: Se A=[1 2 3; 4 5 6; 7 8 9], então A(2:3, 1:2)=[4 5; 7 8]
 Obs: Caso ”Ínicio” e ”Fim” não sejam especificados, será
considerado o índice 1 para ”Ínicio” e a dimensão da matriz
(linha ou coluna, conforme o caso) para ”Fim”.
 Exemplo: A(:, 1:2)=[1 2; 4 5; 7 8]
 Funções básicas:
 size(A) : retorna as dimensões (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: Solução de um Sistema
Linear
Considere o sistema abaixo:

{
ab=5
a−b=1

Na forma matricial, temos a equação Ax=y, sendo:

A= [ 1 1
1 −1], []
x=
a
b
, y=[]
5
1

Para derterminar a solução desse sistema no Octave, podemos fazer:

x=A\y

Conceitualmente, isso é equivalente à x=A-1y, porém na implementação


computacional não há o cálculo da matriz inversa.
Plotar Gráficos 2D
A função básica para plotar gráficos 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>;<RótuloDoGráfico>;'.
 <EstiloDoPonto>: -, +, *, o, x, ^, .
 <CorDoPonto>: k (preto), r (vermelho), g (verde), b (azul), m (magenta),
c (ciano), w (branco).
 <RótuloDoGráfico>: texto indicativo do gráfico.
 plot(x, y, 'formato', u, v, 'formato', …) : plotar múltiplos gráficos sobre a mesma
janela.
Observação: entre cada execução da função plot é necessário executar a função
figure caso você queira gerar duas janelas gráficas separadas. Se for necessário
'segurar' a janela gráfica atual para plotar gráficos sobrepostos, deve-se usar o
comando hold <on/off>.
Exemplo Simples de Gráfico 2D
Considere que x está no intervalo [-π, π]. Desse modo, a função
plot(x, sin(x), '^m;Seno;')
plota o gráfico abaixo.
Exemplo de Múltiplos Gráficos 2D
Considere que x está no intervalo [-π, π]. Desse modo, a função
plot(x, sin(x), '^m;Seno;', x, cos(x), 'og;Cosseno;')
plota o gráfico abaixo.
Formatação da Janela Gráfica
Podemos formatar a janela gráfica adicionando título, rótulos, grade, alterando
os limites e o aspecto dos eixos.

 title('Titulo do grafico') : altera o título do gráfico para 'Titulo do grafico'.


 grid <on/off> : exibe ou não a grade.
 xlabel('Rotulo do eixo x') : altera o rótulo do eixo x para 'Rotulo do eixo x'.
 ylabel('Rotulo do eixo y') : altera o rótulo 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 gráfico. O campo
<propriedades> pode ser: 'square', 'equal', 'normal', 'auto', 'manual', 'on', 'off',
'tic[xyz]', 'label[xyz]', 'nolabel', 'ij', 'xy'
Formatação da Janela Gráfica

Considere que x está no intervalo


[-π, π]. Desse modo, a sequência
de funções
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 gráfico ao lado.
Salvar Janela Gráfica

Podemos salvar a janela gráfica atual através da função print.


 print(<nome_do_arquivo>, <propriedades>) : salva a janela gráfica atual no arquivo
<nome_do_arquivo> com as propriedades <propriedades>.
 <propriedades>:
 '-P<impressora>': definir saída 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 (disponível para os
formatos postscript, aifm, corel e fig).
 Exemplo: print('meu_grafico.png', '-dpng', '-S800,600').
 Observação: Caso o tipo do arquivo não seja especificado, o Octave tenta descobrir
pela extensão dada. Caso o tamanho não seja especificado, o padrão é 640x480.
Arquivo de Função
 Um Arquivo de Função contém uma função principal e opicionalmente funções
secundárias ou ”subfunções”.
 A primeira linha útil do arquivo deve conter obrigatoriamente a declaração da função
principal. Essa será a função executada inicialmente quando o arquivo for chamado.
 O arquivo deve ter a extensão ”.m” e seu nome deve ser igual ao nome da função
principal. O Octave é sensível à maiúsculas ou minúsculas, portanto lembre-se que
”Função.m” e ”função.m” são arquivos diferentes.
 As ”subfunções” são disponíveis apenas dentro do arquivo onde elas estão
declaradas, portanto não podem ser executadas externamente.
 A declaração de uma função é feita da seguinte maneira:
function [retorno1, retorno2, …, retornoj] = nome_da_funcao(arg1, arg2, …, argn)
% Corpo da função
% Os caracteres % ou # marcam comentários.
end
 Note que o Octave permite múltiplos 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 função, basta entrar com seu nome no terminal do Octave. Vale
lembrar que a função deve estar salva no diretório atual (ou nos diretórios de busca
do sistema).
Exemplo de Aquivo de Função
Vamos criar uma função que receba o nome do usuário e dê boas-vindas (um
clássico! ;-))
Crie um arquivo com o nome 'boasVindas.m'. Edite esse arquivo como descrito
abaixo:
function boasVindas(usuario)
%Descrição: Função de boas vindas ao usuário.
printf(”Seja bem-vindo(a) usuario(a): %s\n”, usuario);
end
Note que o Octave não utiliza identificadores de tipo de variável! Isto é, não foi
necessário declarar que 'usuario' é do tipo string.
Após editar o arquivo, basta entrar com o nome da função 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'. Então, se essa ainda não é a pasta atual, execute o
comando 'cd /minicurso_octave/exemplos'. Em seguida, basta executar a função.
Estrutura Condicional: if
Estrutura condicional segue a sintaxe:
if Condição
% Caso Condição seja verdadeira
else
% Caso Condição seja falsa
end

Vamos fazer uma função que recebe dois números e retorna o maior deles:
function maior = maximo(num1, num2)
%Descrição: Retorna o maior dentre dois números.
if num1 > num2
maior = num1;
else
maior = num2;
end
end
Operadores de Comparação e
Operadores Lógicos
Os operadores de comparação são os seguintes:
 == : igualdade.
 != ou ~= : diferença.
 >, >= : maior e maior igual.
 <, <= : menor e menor igual.

Os operadores lógicos são os seguintes:


 && : conjunção (e).
 || : disjunção (ou).
 ! ou ~ : negação.
Estrutura Condicional: switch
Uma estrutura condicional switch segue a sintaxe:
switch (x)
case Opção1
% Instruções caso seja a Opção1

case Opçãon
% Instruções caso seja a Opçãon
otherwise
% Instruções caso não seja nenhuma das anteriores
end
 As opções também podem ser uma lista de valores. Por exemplo: case {1, 2, 3}
 As opções podem ser strings.
 Diferente da linguagem C/C++, os casos são exclusivos, portanto não há
necessidade do comando break em cada bloco.
Exemplo de Estrutura
Condicional switch
function x=miniCalc(op1, operador, op2)
%Descrição: Calcula o resultado de: (op1 operador op2)
%Se ocorrer algum erro, a função 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: Divisão por zero!");
end
case {"^", "**"}
disp("Operação não implementada.");
otherwise
disp("Operação inválida! Use: \"+\", \"-\", \"*\" ou \"/\"");
end
end
Estrutura de repetição: for
Uma estrutura de repetição for segue a sintaxe:
for i = <Início>:<Incremento>:<Fim>
%Instruções a serem repetidas
end
Observação: se <Incremento> não é especificado, então ele é considerado igual a 1.
Vamos criar uma função que recebe um vetor de números e calcula a média entre
seus elementos.
function m=media(v)
%Descrição: recebe um vetor v e calcula a média entre seus elementos.
n=length(v); %Retorna o número 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 repetição: while
Uma estrutura de repetição while segue a sintaxe:
while Condição
%Instruções a serem repetidas
end

Vamos criar uma função que calcula os n primeiros elementos da sequência de


Fibonacci.
function fib = fibonacci(n)
%Descrição: Cálcula os n termos da sequência 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 repetição: do-until
Uma estrutura de repetição do-until segue a sintaxe:
do
%Instruções a serem repetidas
until Condição
Vamos criar uma função que calcula os n primeiros elementos da sequência de
Fibonacci.
function fib = fibonacci(n)
%Descrição: Cálcula os n termos da sequência 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 variáveis com valores em um intervalo:
 <Início>:<Incremento>:<Fim> : x=[1:0.25:2] cria o vetor x=[1.0 1.25 1.5 1.75 2.0]
 Variáveis globais:
 Para declarar uma variável global use o identificador global. Por exemplo, na função
principal escreva ”global minha_variavel” e atribua o valor desejado à ”minha_variavel”.
Em seguida, para usar essa variável nas subfunções, você deve ”exportá-la” usando a
mesma sintaxe anterior.
 Funções úteis:
 close all : fecha todas as janelas abertas.
 clear all : limpa as variáveis do ambiente.
 min(v) : retorna o menor valor em v e a posição onde ele ocorre.
 max(v) : retorna o maior valor em v e a posição onde ele ocorre.
 sum(v) : retorna o somatório dos valores contidos em v.
 prod(v) : retorna o produtório dos valores contidos em v.
 spy(M) : plota uma representação gráfica da esparsidade da matriz M.
 eval(”expressão”) : avalia a expressão definida por ”expressão”.
Obtendo ajuda

Há um vasto material sobre o Octave na Internet! Com uma rápida pesquisa em um


site de busca você encontrará milhares de páginas. Um manual on-line do Octave
pode ser encontrado na página: http://www.gnu.org/software/octave/doc/interpreter/

Um comando muito útil no Octave é o help. Com ele você pode encontrar a
referência de todas as funções disponíveis no Octave, bem como informações sobre
palavras reservadas e constantes.

Nas funções criadas pelo usuário, as primeiras linhas comentadas logo após a
declaração da mesma, servem como referência para o comando help. Isto é, o
comando ”help nome_de_sua_função” retorna tudo que está escrito nos comentários
iniciais de sua função.
Agradecimento

Obrigado pela atenção!

Espero que o Octave seja muito útil para todos


vocês!

Luiz Aquino
aquino.luizclaudio@gmail.com.br

Vous aimerez peut-être aussi