mini cur so octave

28
Laboratório Nacional de Computação Científica Minicurso: Introdução ao Octave Luiz Aquino Março de 2010 [email protected]

Upload: lluetta2

Post on 26-Jun-2015

327 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Mini Cur So Octave

Laboratório Nacional de Computação Científica

Minicurso: Introdução ao Octave

Luiz AquinoMarço de 2010

[email protected]

Page 2: Mini Cur So Octave

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/

Page 3: Mini Cur So 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.

Page 4: Mini Cur So Octave

QtOctave: Interface gráfica para o Octave.

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

Navegador de Arquivos

Lista de Variáveis e Funções

Histórico de Comandos

Barra de Ferramentas

Page 5: Mini Cur So Octave

QtOctave: Interface gráfica para o Octave.

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

Saída do Terminal

Entrada do Terminal

Page 6: Mini Cur So Octave

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.

Page 7: Mini Cur So Octave

Números, Matrizes e Textos

Números Reais: Notação simples:

x = 1.981 Notação científica:

x = 1981e-3 Números Complexos:

Notação: a + bi

z = 10 + 1.981i Matrizes:

Notação: 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.”

me± p⇔m⋅10± p

A=[1 2 34 5 67 8 9]

Page 8: Mini Cur So Octave

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 23 4] .∗[5 6

7 8]=[ 5 1221 32]

Page 9: Mini Cur So Octave

Operações básicas com matrizes Acessar elemento:

Notação: A(Linha, Coluna).

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

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.

A=[1 2 34 5 67 8 9]

Page 10: Mini Cur So Octave

Exemplo: Solução de um Sistema Linear

Considere o sistema abaixo:

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

{ab=5a−b=1

A=[1 11 −1 ] x=[ab ] y=[51], ,

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.

Page 11: Mini Cur So Octave

Plotar Gráficos 2DA 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>.

Page 12: Mini Cur So Octave

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.

Page 13: Mini Cur So Octave

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.

Page 14: Mini Cur So Octave

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'

Page 15: Mini Cur So Octave

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.

Page 16: Mini Cur So Octave

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.

Page 17: Mini Cur So Octave

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).

Page 18: Mini Cur So Octave

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.

Page 19: Mini Cur So Octave

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

Page 20: Mini Cur So Octave

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.

Page 21: Mini Cur So Octave

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.

Page 22: Mini Cur So Octave

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.");

otherwisedisp("Operação inválida! Use: \"+\", \"-\", \"*\" ou \"/\"");

endend

Page 23: Mini Cur So Octave

Estrutura de repetição: forUma 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

Page 24: Mini Cur So Octave

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

Page 25: Mini Cur So Octave

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

Page 26: Mini Cur So Octave

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”.

Page 27: Mini Cur So Octave

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.

Page 28: Mini Cur So Octave

Agradecimento

Obrigado pela atenção!

Espero que o Octave seja muito útil para todos vocês!

Luiz [email protected]