OCTAVE
Este material é um auxílio de consulta rápida, 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) Introdução
1.1) Para acessar o octave via terminal linux digite:
$ octave
1.2) Acessando ajuda de qualquer função.
> help sum
1.3) Verifique se os pacotes: odepkg, statistics, symbolic. Estão instalados com :
> pkg list
Caso negativo. Baixe de http://octave.sourceforge.net/ proceda a instalação com:
> pkg install nomedopacote.tar.gz
1.4) Ativando o diário de atividades e gerenciando variáveis.
> diary diario
> diary on
Carregue as variáveis de um arquivo
> load variaveis.octave
Carregue os dados de um arquivo texto padrão R, sem comentários.
> load -ascii variavel.r
Ou listar as variáveis usadas no momento
> whos
Apague as variáveis desnecessárias (ou todas com “all”)
> clear ea vb mc
Salve as variáveis num arquivo ao finalizar uma tarefa.
> save variaveis.octave
Salve uma variável num arquivo texto padrão R, sem comentários.
> save -ascii variavel.r mmatriz
Desative o diário e feche o programa. se necessário.
> diary off
> quit
2) Nomes de variáveis
2.1) Adotamos uma letra minúscula como prefixo do nome da variável para indicar
seu tipo.
ttexto = 'Texto Livre' # para texto ou função em análise simbólica
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 # variável boleana ou seja sim (true) ou não (false)
3) Modelos e Operações matemáticas
3.1) Funções diretas utilizando o comando @(). <nome>=@(<arg1>,...,<argN>)
<expressão>
> f=@(x) 2*x;
> f(2)
ans = 4
3.2) Funções diretas chamadas inline. <nome>= inline(“<equação>”)
> tf=”2*x”;
> f=inline(tf);
> f(2)
ans = 4
3.3) Vetorizar função 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) Funções diretas utilizando eval. <nome>= eval(“<equação>”)
> tf=”2*x”;
> x=2;
> f=eval(tf)
ans = 4
3.5) Operações básicas. “+” Soma; “-” Subtração; “*” Multiplicação; “/” Divisão;
“^” ou “**” Potenciação; “.” Aplica a operação termo a termo na matriz use “.”,
exemplo A.*B; “ ' ” transpõe a matriz. '++' incrementa a variável; '- -' decrementa a
variável.
3.6) Operações matemáticas. 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 (não menor
que o passado como parâmetro): floor(x); maior numero inteiro (nao maior do
que o passado como parâmetro): ceil(x); arredenda corretamente: round(x);
resto da divisão: rem(x,y); raiz quadrada: sqrt(x); pi valor de pi=3,14.... Use
NA para valores em falta e NaN para valores não é numero.
4) Operadores de comparação
< # menor que. Ex: 1 < 2
> # maior que
<= # menor ou igual a
>= // maior ou igual a
== // operador lógico igual
Teste 1 Teste 2
~= // operador log. diferente
~ // negação do teste
&& // operador lógico e
|| //operador lógico ou
&&
||
==
true
true
true
true
true
true
false
false
true
false
false
true
false
true
false
false
false
false
false
true
5) Manipulação 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. Referência 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 dimensão 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) Construção e acesso a matriz de textos. Numero de caracteres corresponde as
número de colunas. A matriz de texto é 'mt' e próxima letra é minúscula.
> 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 - Versão atualizada em 06/03/2015 às 14:16 hs
Página 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 condição.
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 repetição e controle
6.1) Estrutura de repetição for
# for i=inicio:fim
for i=1:10
# executa codigo i vezes
endfor
6.2) Estrutura de repetição while
while condicao
# executa codigo enquanto condicao for verdadeira
endwhile
6.3) Estrutura de repetição 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 códigos e observações:
6.7) Lê valor do teclado. Não importa o tipo. Se usar 's' ele não 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=precisão 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 números
ans = 1.2300
> strcmp('a','a'); # comparando duas strings
ans = 1
6.10) Estrutura do arquivo padrão 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]. Após vetor
ou matriz escreva 'fim'. Use # para comentário 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 básica para programação
Para programação no octave, usa-se toda a capacidade de processamento disponível
no octave. Use #... para comentário simples e #{ … #} para comentário bloco.
7.1) Arquivo que contém a interface com o usuário.
~/ie_catalunha_tarefa/interface.m
# Autor: Nome do autor
function interface()
# interface para coleta de parâmetros de entrada
# chamada a função da tarefa
# interface para mostra de parâmetros de saída
endfunction
# subfunção para leitura de parâmetros em arquivo
# subfunção para gravar parâmetros em arquivo
7.2) Arquivo que contém a solução pura do problema proposto na tarefa.
~/ie_catalunha_tarefa/tarefa.m
# Autor: Nome do autor
function[saida01,...,saidaN]=tarefa(entrada01,...,entr
adaN)
# código para obtenção da solução da tarefa
endfunction
# subfunção se for necessário
Resumo Octave. Prof. Dr. Catalunha - Versão atualizada em 06/03/2015 às 14:16 hs
Página 2 de 3
7.3) Estrutura básica 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 gráfico dentro de programa, inicialmente precisamos esconder a janela do
plot, para isto use a linha a seguir:
janelaPlot=figure('Visible','off');
posteriormente incluia as informações necessárias 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) Diferença 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) Integração
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 polinómio. A saída é 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 polinômio. polyval(vc,x) aplicar um valor x qualquer no polinómio
15.4) Mudando a permissão do script para execução, caso necessário
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 polinômio. 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) Manipulações polinomiais
11) Regressão Linear Múltipla
11.1) Ajuste um modelo y i=β0 + β1 x 1i+ , , ,+ β p x pi ;em que: p é o número de
variáveis explicativas; i é o número de dados. Sendo a matriz solução 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 função
12.1) Encontrar raiz de uma função
> 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 usuário 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 equação diferencial. Veja Cap 6 Barroso, Exemplo: y'=x-y+2 e y(0)=2
e malha [0,1] com 10 subintervalos. No modelo padrão octave y=é a variável x x= é
a variável 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 - Versão atualizada em 06/03/2015 às 14:16 hs
Página 3 de 3
Download

Baixar