Sunteți pe pagina 1din 3

OCTAVE

Este material um auxlio de consulta rpida, o conhecimento aqui apresentado


deve ser fundamentado pelas atividades de aula e principalmente pelas
bibliografias fornecidas. Cada disciplina demanda parte do conhecimento aqui
resumido, devendo o aluno estar apto a distingui-la.

1) Introduo
1.1) Para acessar o octave via terminal linux digite:
$ octave
1.2) Acessando ajuda de qualquer funo.
> help sum
1.3) Verifique se os pacotes: odepkg, statistics, symbolic. Esto instalados com :
> pkg list
Caso negativo. Baixe de http://octave.sourceforge.net/ proceda a instalao com:
> pkg install nomedopacote.tar.gz
1.4) Ativando o dirio de atividades e gerenciando variveis.
> diary diario
> diary on
Carregue as variveis de um arquivo
> load variaveis.octave
Carregue os dados de um arquivo texto padro R, sem comentrios.
> load -ascii variavel.r
Ou listar as variveis usadas no momento
> whos
Apague as variveis desnecessrias (ou todas com all)
> clear ea vb mc
Salve as variveis num arquivo ao finalizar uma tarefa.
> save variaveis.octave
Salve uma varivel num arquivo texto padro R, sem comentrios.
> save -ascii variavel.r mmatriz
Desative o dirio e feche o programa. se necessrio.
> diary off
> quit

2) Nomes de variveis
2.1) Adotamos uma letra minscula como prefixo do nome da varivel para indicar
seu tipo.
ttexto = 'Texto Livre' # para texto ou funo em anlise simblica
enumero = 1.123 # um escalar inteiro ou decimal.
vvetor = [1,2,3,4,5,6] # para vetor linha (1xN).
mmatriz = [1.1,2.2;3.3,4.4;5.5,6.6] # para matriz (NxN).
blogico =true # varivel boleana ou seja sim (true) ou no (false)

3) Modelos e Operaes matemticas


3.1) Funes diretas utilizando o comando @(). <nome>=@(<arg1>,...,<argN>)
<expresso>
> f=@(x) 2*x;
> f(2)
ans = 4
3.2) Funes diretas chamadas inline. <nome>= inline(<equao>)
> tf=2*x;
> f=inline(tf);
> f(2)
ans = 4
3.3) Vetorizar funo toda
> tf=2*x;
> tf2=vectorize(tf)
ans tf2 = 2.*x
> f=inline(tf2);
> va=[1,2,3];
> f(va)
ans = 2 4 6
3.4) Funes diretas utilizando eval. <nome>= eval(<equao>)
> tf=2*x;
> x=2;
> f=eval(tf)
ans = 4
3.5) Operaes bsicas. + Soma; - Subtrao; * Multiplicao; / Diviso;
^ ou ** Potenciao; . Aplica a operao termo a termo na matriz use .,
exemplo A.*B; ' transpe a matriz. '++' incrementa a varivel; '- -' decrementa a
varivel.
3.6) Operaes matemticas. sin(x); cos(x); tan(x); asin(x);
acos(x); atan(x); exp(x); logaritmo na base e: log(x); logaritmo na
base 10: log10(x); valor absoluto: abs(x); menor numero inteiro (no menor
que o passado como parmetro): floor(x); maior numero inteiro (nao maior do
que o passado como parmetro): ceil(x); arredenda corretamente: round(x);

resto da diviso: rem(x,y); raiz quadrada: sqrt(x); pi valor de pi=3,14.... Use


NA para valores em falta e NaN para valores no numero.

4) Operadores de comparao
< # menor que. Ex: 1 < 2
> # maior que
<= # menor ou igual a
>= // maior ou igual a
== // operador lgico igual

Teste 1 Teste 2

~= // operador log. diferente

~ // negao do teste
&& // operador lgico e
|| //operador lgico ou

&&

||

==

true

true

true

true

true

true

false

false

true

false

false

true

false

true

false

false

false

false

false

true

5) Manipulao matricial e vetorial


5.1) Criar vetor.
> va=1:2:10
va = 1
3
5
7
9
> vb=linspace(1,10,5)
vb = 1.0 3.25 5.50 7.75 10.00
> va=[12.4,4.5,9.6,3.0]
va = 12.4000
4.5000
9.6000

3.0000

5.2) Criar matriz


> ma=[1,2,3;4,5,6;7,8,9;10,11,12]
ma =
1
2
3
4
5
6
7
8
9
10 11 12
5.3) Apagar elemento de matriz ou vetorial, []
ma(2,:)=[]
ma =
1
2
3
7
8
9
10 11 12
5.4) Criar matrizes aleatoria
> rand(2,2) # matriz aleatorio
ans =
0.21680
0.97528
0.57017
0.97381
5.5) Acessar ou alterar elemento da matriz. Referncia subscripts ou indice linear.
> ma(2,:)
ans = 4
5
6
> ma(:,2)
ans =
2
5
8
11
> ma(2,2) # acesso por subscripts
ans = 5
> ma(3) # acesso por indice linear
ans = 7
> sub2ind([3,2],2,2)
ans = 5
> [i,j]=ind2sub([3,2],3)
i = 3
j = 1
5.6) Obter tamanho e tipo de dado da matriz e vetor
> lin = size(ma,1) #obtem 1 dimenso num de linhas
lin = 4
> tam = length(va) #obtem tamanho do vetor
col = 5
> isempty(ma) #analise se matriz esta vazia
ans = 0
>isfinite ([13, Inf, NA, NaN]) # se tem valores validos
ans = [ 1, 0, 0, 0 ]
> isnan([10,NaN,NA]) # se tem valores validos
ans =
0
1
1
> isna([10,NaN,NA])# se tem valores validos
ans =
0
0
1
5.7) Retira parte da matriz. A(inicioL:fimL,inicioC:fimC). Use end para acessar a
ultima linha ou coluna. Use : para acessar a toda a linha ou coluna.
> B=ma(2:end,1:2)
B =
4
5
7
8
10
11
5.8) Construo e acesso a matriz de textos. Numero de caracteres corresponde as
nmero de colunas. A matriz de texto 'mt' e prxima letra minscula.
> mtNomes=['joao';'maria']
vtNomes =
joao
maria
> mtNomes(2,:)
maria
5.9) Comando de estatistica. Se arg for matriz retorna a funcao para cada coluna.

Resumo Octave. Prof. Dr. Catalunha - Verso atualizada em 06/03/2015 s 14:16 hs

Pgina 1 de 3

[vlr pos]=min(arg) # retorna o min valor e sua posicao


[vlr pos]=max(arg) # retorna o max valor e sua posicao
sum(arg) # retorna a soma dos elementos
prod(arg) # retorna o produto dos elementos
5.10) Comando de pesquisa.
find(arg == 3) # localiza valor igual a 3 em arg
x = randn(2,3)
exemplo de matriz
xind = (x >= 1)|(x < -0.2) Cria indice na condio.
xc = x(xind)
Seleciona valores bons.
> finite([-1,0,1,inf,NaN,NA])
ans = [1 1 1 0 0 0]

# retorna ind. de
valores validos

6) Estrutura de repetio e controle


6.1) Estrutura de repetio for
# for i=inicio:fim
for i=1:10
# executa codigo i vezes
endfor
6.2) Estrutura de repetio while
while condicao
# executa codigo enquanto condicao for verdadeira
endwhile
6.3) Estrutura de repetio do-until
do
# executa codigo at que condicao seja verdadeira
until condicao
6.4) Estrutura de controle if
if condicao01
#caso verdadeiro01
elseif condicao02
#caso verdadeiro02
else
#caso falso
endif
6.5) Estrutura de controle Switch.
switch (inteiro)
case 1
# codigo
case {2,3}
# codigo
otherwise
# codigo
endswitch
ou
switch (texto)
case 'bananeira'
# codigo
case {'palmeira','figueira'}
# codigo
otherwise
# codigo
endswitch
6.6) Encerra o programa neste ponto.
exit;

Outros cdigos e observaes:


6.7) L valor do teclado. No importa o tipo. Se usar 's' ele no interpreta a entrada.
> enumero=input('Informe o valor: ');
Informe o valor: 1.1
> tequacao=input('Informe a equacao:','s');
Informe a equacao: 1+2*x
6.8) Imprime texto e valor de variavel. %s=imprimir texto; %cd imprimir inteiro;
%c.pf imprimir decimal, em que c=numero de casas, p=preciso decimal.
> printf('ver %s %4d %5.2f\n', ttexto, einteiro,
edecimal);
ver Texto Livre
1
1.23
6.9) Manipulando strings. Os demais comandos strcat, strfind, strsplit, strtrim devem
ser estudados.
> str2num('1.23'); # string para nmeros
ans = 1.2300
> strcmp('a','a'); # comparando duas strings
ans = 1
6.10) Estrutura do arquivo padro de entrada. Considere um parametro de entrada
edecimal=1.1'. Um vetor vdecimal=[1.1;2.2]. Uma matriz mdecimal=[1.1,2.2;3.3,4.4]. Aps vetor
ou matriz escreva 'fim'. Use # para comentrio deste arquivo.

/ie_catalunha_basico/entrada.txt
#Autor: Prof. Dr. Catalunha
#Tarefa: Basico
enumero
1.1
vlinha
1.1 2.2 3.3
mmatriz
1.1 2.2
3.3 4.4
fim
ttexto
nome
mtexto
cajueiro jatoba
jamelao pequizeiro
fim

6.11) Gravar dados em um arquivo de texto.


function
gravaarqsaida(tarquivo,ttexto,einteiro,edecimal,vlinha,
mmatriz)
arqbin=fopen(tarquivo,'w');
fprintf(arqbin,'ttexto\n');# escreve texto
fprintf(arqbin,'%s\n',ttexto);
fprintf(arqbin,'einteiro\n'); # esc. escalar inteiro
fprintf(arqbin,'%d\n',einteiro);
fprintf(arqbin,'edecimal\n'); # esc. escalar decimal
fprintf(arqbin,'%5.2f\n',edecimal);
fprintf(arqbin,'vlinha\n'); # esc. vetor linha (1xN)
fprintf(arqbin,'%.4f',vlinha);
fprintf(arqbin,'mmatriz\n'); #esc. matriz, vetor(Nx1)
for i=1:size(mmatriz,1)
fprintf(arqbin,'%.4f ',mmatriz(i,:));
fprintf(arqbin,'\n');
endfor
fprintf(arqbin,'fim\n');
fclose(arqbin);
endfunction
6.12) Le dados em um arquivo de texto.
function
[enumero,vcoluna,mmatriz,ttexto,mtTexto,vlinha]=learqen
trada(tarquivo)
arqbin = fopen (tarquivo, 'r');
while(!feof(arqbin))
linha=fgetl(arqbin);
switch (linha)
case 'enumero' # l escalar
linha=fgetl(arqbin);
enumero=str2num(linha);
case 'vlinha' # l vetor linha (1xN)
linha=fgetl(arqbin);
vlinha=str2num(linha);
case 'mmatriz' # l matriz (NxN) vetor (Nx1)
lin=1;
while(!strcmp(linha=fgetl(arqbin),'fim'))
mmatriz(lin++,:)=str2num(linha);
endwhile
case 'ttexto' # l texto
ttexto=fgetl(arqbin);
case 'mtTexto' # l matriz de texto
mtTexto='';
while(!strcmp(linha=fgetl(arqbin),'fim'))
mtTexto=[mtTexto;linha]
end
endswitch
endwhile
fclose(arqbin);
endfunction

7) Estrutura bsica para programao

Para programao no octave, usa-se toda a capacidade de processamento disponvel


no octave. Use #... para comentrio simples e #{ #} para comentrio bloco.
7.1) Arquivo que contm a interface com o usurio.
~/ie_catalunha_tarefa/interface.m
# Autor: Nome do autor
function interface()
# interface para coleta de parmetros de entrada
# chamada a funo da tarefa
# interface para mostra de parmetros de sada
endfunction
# subfuno para leitura de parmetros em arquivo
# subfuno para gravar parmetros em arquivo
7.2) Arquivo que contm a soluo pura do problema proposto na tarefa.
~/ie_catalunha_tarefa/tarefa.m
# Autor: Nome do autor
function[saida01,...,saidaN]=tarefa(entrada01,...,entr
adaN)
# cdigo para obteno da soluo da tarefa
endfunction
# subfuno se for necessrio

Resumo Octave. Prof. Dr. Catalunha - Verso atualizada em 06/03/2015 s 14:16 hs

Pgina 2 de 3

7.3) Estrutura bsica de arquivos e pastas de um programa


ie_catalunha_tarefa
|-- interface.m
|-- tarefa.m
|-- entrada.txt
|-- saida.txt
`-- relatorio.txt
Obs.: o arquivo, saida.txt, ser criado automaticamente pelo programa.

8) Gerar Grafico
8.1) De Pontos. Considere os dados vx, vy, vxt, vyt.
plot(vx,vy,formato,vxt,vyt,formato). Em que
formato='<estiloDoPonto><corDoPonto>;<legenda>;' . Sendo: estiloDoPonto=-,
+,*,o,x,^. corDoPonto=k(preto), w(branco), r(vermelho), g(verde), b(azul),
m(magenta), c(ciano). legenda=texto.
> plot(vx,vy,'*r;orig;',vxt,vyt,'+b;transf;')
> grid on
> title('Titulo do Grafico')
> xlabel('Nome do EixoX')
> ylabel('Nome do EixoY')
> axis([0,10,0,50])
> print('nomeArquivo.png','-dpng')
8.2) Gerar grfico dentro de programa, inicialmente precisamos esconder a janela do
plot, para isto use a linha a seguir:
janelaPlot=figure('Visible','off');
posteriormente incluia as informaes necessrias conforme item 8.1

2.0060
2.0230
2.0499
2.0856
2.1293
2.1801
2.2372
2.3000
2.3679
m1 = 2
m2 = successful exit
> plot(t,xcal)

14) Outros comandos utilizados


14.1) Diferena entre valores. x1-x0, x2-x1,...
octave:9> a=[1,2,3]
a = 1
2
3
octave:10> diff(a)
ans =
1
1

15) Processamento Via terminal e Script Shell


15.1) Considere o seguinte programa
/ie_catalunha_tarefa/interface.m
function interface()
a=input('Informe o valor de a: ')
[b]=tarefa(a)
printf('Tarefa %f',b)
endfunction

9) Integrao
9.1) Integral simples.
> f=@(x) 1/x;
> quad(f,3.0,3.6)
ans = 0.18232

/ie_catalunha_tarefa/tarefa.m

9.2) Integral dupla


> g=@(x,y) x.**2+2*y; # modelo no formato matricial
> dblquad(g,0,1,0,2)
ans = 4.6667

function[b]=tarefa(a)
b=2*a;
endfunction

15.2) Processando programa via terminal.


$ octave --eval interface -q -f
Informe o valor de a: 3
10.1) Ajuste polinomial. polyfit(vx,vy,n) em que n o grau do polinmio. A sada cn Tarefa 6.000000
c0.
15.3) Processando a tarefa a partir de um script shell, considere o script
> vx=[0.0,1.0]
/cn_catalunha_tarefa/exercicio1/tarefa.sh
> vy=[1.0,3.0]
> vc = polyfit(vx,vy,1)
#!/bin/bash
vc =
2.0000
1.0000 # P1= 2*x + 1
octave --eval interface -q -f
10.2) Avalia um polinmio. polyval(vc,x) aplicar um valor x qualquer no polinmio
15.4) Mudando a permisso do script para execuo, caso necessrio
obtido com base nos coeficientes de vc.
$ chmod 777 tarefa.sh
> polyval(vc,3) # o mesmo que P1(3)= 2*x + 1
ans = 7
15.5) Processando o script shell
$ ./tarefa.sh
10.3) Calcula raizes de um polinmio. vc o vetor de coeficientes.
Informe o valor de a: 3
> roots(vc) # o mesmo que 0 = 2*x + 1
Tarefa 6.000000
ans = -0.5

10) Manipulaes polinomiais

11) Regresso Linear Mltipla


11.1) Ajuste um modelo y i=0 + 1 x 1i+ , , ,+ p x pi ;em que: p o nmero de
variveis explicativas; i o nmero de dados. Sendo a matriz soluo organizada na
forma.
1 x 11 x 21 ... x p1
y1
0
y2
1
1 x 12 x 22 ... x p2
e
resultando
...
...
... ... ... ... ...
yn
p
1 x1n x 2n ... x pn
> regress(my,mx)
ans = 1 2 # P1= 1 + 2*x

[] [

] []

12) Raiz de funo


12.1) Encontrar raiz de uma funo
> f=@(x) x**3-3*x+1;
> fzero(f,2)
ans = 1.5321

15.6) Usando MySql e Gnuplot via Octave. Considere que voc j tem um banco de
dados com uma tabela alimentada. Inicie o octave via usurio root ou que tenha
acesso ao banco de dados.
/cn_catalunha_tarefa/exercicio2/octave_mysql_gnuplot.m
function octave_mysql_gnuplot()
system("mysql nomeBancoDeDados
--password=senhaBancoDeDados < sql.txt >
resultado_sql.txt");
system("gnuplot grafico.txt");
endfunction
/cn_catalunha_tarefa/exercicio2/sql.txt
select * from tabela01;
/cn_catalunha_tarefa/exercicio2/grafico.txt
reset
plot x**2

13) Resolver EDO


13.1) Resolver equao diferencial. Veja Cap 6 Barroso, Exemplo: y'=x-y+2 e y(0)=2
e malha [0,1] com 10 subintervalos. No modelo padro octave y= a varivel x x=
a varivel t, ficando:
> function xest=f(x,t) xest=t-x+2; endfunction
> x0=2
> t0=linspace(0,1,10);
> [xcal,m1,m2]=lsode('f',x0,t0)
xcal =
2.0000

Resumo Octave. Prof. Dr. Catalunha - Verso atualizada em 06/03/2015 s 14:16 hs

Pgina 3 de 3

S-ar putea să vă placă și