Você está na página 1de 3

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

Use

OCTAVE
Este material é um auxílio de consulta rápida, o conhecimento aqui apresentado
NA para valores em falta e NaN para valores não é numero.

4) Operadores de comparação
deve ser fundamentado pelas atividades de aula e principalmente pelas < # menor que. Ex: 1 < 2 ~= // operador log. diferente
> # maior que ~ // negação do teste
bibliografias fornecidas. Cada disciplina demanda parte do conhecimento aqui <= # menor ou igual a && // operador lógico e
resumido, devendo o aluno estar apto a distingui-la. >= // maior ou igual a || //operador lógico ou
== // operador lógico igual
1) Introdução Teste 1 Teste 2 && || ==
1.1) Para acessar o octave via terminal linux digite: true true true true true
$ octave
true false false true false
1.2) Acessando ajuda de qualquer função.
> help sum false true false true false
1.3) Verifique se os pacotes: odepkg, statistics, symbolic. Estão instalados com : false false false false true
> pkg list
Caso negativo. Baixe de http://octave.sourceforge.net/ proceda a instalação com: 5) Manipulação matricial e vetorial
> pkg install nomedopacote.tar.gz
5.1) Criar vetor.
1.4) Ativando o diário de atividades e gerenciando variáveis. > va=1:2:10
> diary diario va = 1 3 5 7 9
> diary on > vb=linspace(1,10,5)
vb = 1.0 3.25 5.50 7.75 10.00
Carregue as variáveis de um arquivo > va=[12.4,4.5,9.6,3.0]
> load variaveis.octave va = 12.4000 4.5000 9.6000 3.0000
Carregue os dados de um arquivo texto padrão R, sem comentários. 5.2) Criar matriz
> load -ascii variavel.r > ma=[1,2,3;4,5,6;7,8,9;10,11,12]
ma =
Ou listar as variáveis usadas no momento 1 2 3
> whos 4 5 6
7 8 9
Apague as variáveis desnecessárias (ou todas com “all”) 10 11 12
> clear ea vb mc 5.3) Apagar elemento de matriz ou vetorial, “[]”
Salve as variáveis num arquivo ao finalizar uma tarefa. ma(2,:)=[]
> save variaveis.octave ma =
1 2 3
Salve uma variável num arquivo texto padrão R, sem comentários. 7 8 9
> save -ascii variavel.r mmatriz 10 11 12
5.4) Criar matrizes aleatoria
Desative o diário e feche o programa. se necessário. > rand(2,2) # matriz aleatorio
> diary off ans =
> quit 0.21680 0.97528
0.57017 0.97381
2) Nomes de variáveis 5.5) Acessar ou alterar elemento da matriz. Referência subscripts ou indice linear.
2.1) Adotamos uma letra minúscula como prefixo do nome da variável para indicar > ma(2,:)
seu tipo. ans = 4 5 6
> ma(:,2)
ttexto = 'Texto Livre' # para texto ou função em análise simbólica ans =
enumero = 1.123 # um escalar inteiro ou decimal. 2
vvetor = [1,2,3,4,5,6] # para vetor linha (1xN). 5
mmatriz = [1.1,2.2;3.3,4.4;5.5,6.6] # para matriz (NxN). 8
blogico =true # variável boleana ou seja sim (true) ou não (false) 11
> ma(2,2) # acesso por subscripts
ans = 5
3) Modelos e Operações matemáticas > ma(3) # acesso por indice linear
ans = 7
3.1) Funções diretas utilizando o comando @(). <nome>=@(<arg1>,...,<argN>) > sub2ind([3,2],2,2)
<expressão> ans = 5
> f=@(x) 2*x; > [i,j]=ind2sub([3,2],3)
> f(2) i = 3
ans = 4 j = 1

3.2) Funções diretas chamadas inline. <nome>= inline(“<equação>”) 5.6) Obter tamanho e tipo de dado da matriz e vetor
> tf=”2*x”; > lin = size(ma,1) #obtem 1 dimensão num de linhas
> f=inline(tf); lin = 4
> f(2) > tam = length(va) #obtem tamanho do vetor
ans = 4 col = 5
> isempty(ma) #analise se matriz esta vazia
3.3) Vetorizar função toda ans = 0
> tf=”2*x”; >isfinite ([13, Inf, NA, NaN]) # se tem valores validos
> tf2=vectorize(tf) ans = [ 1, 0, 0, 0 ]
ans tf2 = 2.*x > isnan([10,NaN,NA]) # se tem valores validos
> f=inline(tf2); ans = 0 1 1
> va=[1,2,3]; > isna([10,NaN,NA])# se tem valores validos
> f(va) ans = 0 0 1
ans = 2 4 6
5.7) Retira parte da matriz. A(inicioL:fimL,inicioC:fimC). Use “end” para acessar a
3.4) Funções diretas utilizando eval. <nome>= eval(“<equação>”) ultima linha ou coluna. Use “:” para acessar a toda a linha ou coluna.
> tf=”2*x”; > B=ma(2:end,1:2)
> x=2; B =
> f=eval(tf) 4 5
ans = 4 7 8
10 11
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 “.”, 5.8) Construção e acesso a matriz de textos. Numero de caracteres corresponde as
exemplo A.*B; “ ' ” transpõe a matriz. '++' incrementa a variável; '- -' decrementa a número de colunas. A matriz de texto é 'mt' e próxima letra é minúscula.
variável. > mtNomes=['joao';'maria']
vtNomes =
3.6) Operações matemáticas. sin(x); cos(x); tan(x); asin(x); joao
acos(x); atan(x); exp(x); logaritmo na base e: log(x); logaritmo na maria
base 10: log10(x); valor absoluto: abs(x); menor numero inteiro (não menor > mtNomes(2,:)
que o passado como parâmetro): floor(x); maior numero inteiro (nao maior do maria
que o passado como parâmetro): ceil(x); arredenda corretamente: round(x); 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 /ie_catalunha_basico/entrada.txt
[vlr pos]=max(arg) # retorna o max valor e sua posicao
sum(arg) # retorna a soma dos elementos #Autor: Prof. Dr. Catalunha
prod(arg) # retorna o produto dos elementos #Tarefa: Basico
enumero
1.1
5.10) Comando de pesquisa. vlinha
find(arg == 3) # localiza valor igual a 3 em arg 1.1 2.2 3.3
mmatriz
x = randn(2,3) exemplo de matriz 1.1 2.2
xind = (x >= 1)|(x < -0.2) Cria indice na condição. 3.3 4.4
xc = x(xind) Seleciona valores bons. fim
ttexto
> finite([-1,0,1,inf,NaN,NA]) # retorna ind. de nome
ans = [1 1 1 0 0 0] valores validos mtexto
cajueiro jatoba
jamelao pequizeiro
fim

6.11) Gravar dados em um arquivo de texto.


6) Estrutura de repetição e controle function
gravaarqsaida(tarquivo,ttexto,einteiro,edecimal,vlinha,
6.1) Estrutura de repetição for mmatriz)
# for i=inicio:fim arqbin=fopen(tarquivo,'w');
for i=1:10 fprintf(arqbin,'ttexto\n');# escreve texto
# executa codigo i vezes fprintf(arqbin,'%s\n',ttexto);
endfor fprintf(arqbin,'einteiro\n'); # esc. escalar inteiro
fprintf(arqbin,'%d\n',einteiro);
6.2) Estrutura de repetição while fprintf(arqbin,'edecimal\n'); # esc. escalar decimal
while condicao fprintf(arqbin,'%5.2f\n',edecimal);
# executa codigo enquanto condicao for verdadeira fprintf(arqbin,'vlinha\n'); # esc. vetor linha (1xN)
endwhile fprintf(arqbin,'%.4f',vlinha);
fprintf(arqbin,'mmatriz\n'); #esc. matriz, vetor(Nx1)
6.3) Estrutura de repetição do-until for i=1:size(mmatriz,1)
do fprintf(arqbin,'%.4f ',mmatriz(i,:));
# executa codigo até que condicao seja verdadeira fprintf(arqbin,'\n');
until condicao endfor
fprintf(arqbin,'fim\n');
6.4) Estrutura de controle if fclose(arqbin);
if condicao01 endfunction
#caso verdadeiro01
elseif condicao02
#caso verdadeiro02 6.12) Le dados em um arquivo de texto.
else function
#caso falso [enumero,vcoluna,mmatriz,ttexto,mtTexto,vlinha]=learqen
endif trada(tarquivo)
arqbin = fopen (tarquivo, 'r');
while(!feof(arqbin))
6.5) Estrutura de controle Switch. linha=fgetl(arqbin);
switch (inteiro) switch (linha)
case 1 case 'enumero' # lê escalar
# codigo linha=fgetl(arqbin);
case {2,3} enumero=str2num(linha);
# codigo case 'vlinha' # lê vetor linha (1xN)
otherwise linha=fgetl(arqbin);
# codigo vlinha=str2num(linha);
endswitch case 'mmatriz' # lê matriz (NxN) vetor (Nx1)
ou lin=1;
switch (texto) while(!strcmp(linha=fgetl(arqbin),'fim'))
case 'bananeira' mmatriz(lin++,:)=str2num(linha);
# codigo endwhile
case {'palmeira','figueira'} case 'ttexto' # lê texto
# codigo ttexto=fgetl(arqbin);
otherwise case 'mtTexto' # lê matriz de texto
# codigo mtTexto='';
endswitch while(!strcmp(linha=fgetl(arqbin),'fim'))
mtTexto=[mtTexto;linha]
6.6) Encerra o programa neste ponto. end
exit; endswitch
endwhile
fclose(arqbin);
Outros códigos e observações: endfunction
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
7) Estrutura básica para programação
Para programação no octave, usa-se toda a capacidade de processamento disponível
> tequacao=input('Informe a equacao:','s'); no octave. Use #... para comentário simples e #{ … #} para comentário bloco.
Informe a equacao: 1+2*x
7.1) Arquivo que contém a interface com o usuário.
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. ~/ie_catalunha_tarefa/interface.m
> printf('ver %s %4d %5.2f\n', ttexto, einteiro, # Autor: Nome do autor
edecimal); function interface()
ver Texto Livre 1 1.23 # interface para coleta de parâmetros de entrada
6.9) Manipulando strings. Os demais comandos strcat, strfind, strsplit, strtrim devem # chamada a função da tarefa
# interface para mostra de parâmetros de saída
ser estudados. endfunction
> str2num('1.23'); # string para números # subfunção para leitura de parâmetros em arquivo
ans = 1.2300 # subfunção para gravar parâmetros em arquivo
> strcmp('a','a'); # comparando duas strings
ans = 1
7.2) Arquivo que contém a solução pura do problema proposto na tarefa.
6.10) Estrutura do arquivo padrão de entrada. Considere um parametro de entrada ~/ie_catalunha_tarefa/tarefa.m
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. # 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 2.0060
ie_catalunha_tarefa 2.0230
|-- interface.m 2.0499
|-- tarefa.m 2.0856
|-- entrada.txt 2.1293
|-- saida.txt 2.1801
`-- relatorio.txt 2.2372
Obs.: o arquivo, saida.txt, será criado automaticamente pelo programa. 2.3000
2.3679
8) Gerar Grafico m1 = 2
m2 = successful exit
8.1) De Pontos. Considere os dados vx, vy, vxt, vyt. > plot(t,xcal)
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. 14) Outros comandos utilizados
> plot(vx,vy,'*r;orig;',vxt,vyt,'+b;transf;')
> grid on 14.1) Diferença entre valores. x1-x0, x2-x1,...
> title('Titulo do Grafico') octave:9> a=[1,2,3]
> xlabel('Nome do EixoX') a = 1 2 3
> ylabel('Nome do EixoY') octave:10> diff(a)
> axis([0,10,0,50]) ans = 1 1
> print('nomeArquivo.png','-dpng')

8.2) Gerar gráfico dentro de programa, inicialmente precisamos esconder a janela do 15) Processamento Via terminal e Script Shell
plot, para isto use a linha a seguir:
janelaPlot=figure('Visible','off'); 15.1) Considere o seguinte programa
posteriormente incluia as informações necessárias conforme item 8.1 /ie_catalunha_tarefa/interface.m
function interface()
a=input('Informe o valor de a: ')
9) Integração [b]=tarefa(a)
printf('Tarefa %f',b)
9.1) Integral simples. endfunction
> f=@(x) 1/x;
> quad(f,3.0,3.6)
ans = 0.18232 /ie_catalunha_tarefa/tarefa.m
9.2) Integral dupla function[b]=tarefa(a)
> g=@(x,y) x.**2+2*y; # modelo no formato matricial b=2*a;
> dblquad(g,0,1,0,2) endfunction
ans = 4.6667
15.2) Processando programa via terminal.
10) Manipulações polinomiais $ 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]
> vy=[1.0,3.0] /cn_catalunha_tarefa/exercicio1/tarefa.sh
> vc = polyfit(vx,vy,1)
vc = #!/bin/bash
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
obtido com base nos coeficientes de vc. 15.4) Mudando a permissão do script para execução, caso necessário
> polyval(vc,3) # é o mesmo que P1(3)= 2*x + 1 $ chmod 777 tarefa.sh
ans = 7
15.5) Processando o script shell
10.3) Calcula raizes de um polinômio. vc é o vetor de coeficientes. $ ./tarefa.sh
> roots(vc) # é o mesmo que 0 = 2*x + 1 Informe o valor de a: 3
ans = -0.5 Tarefa 6.000000

11) Regressão Linear Múltipla 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
11.1) Ajuste um modelo y i=β0 + β1 x 1i+ , , ,+ β p x pi ;em que: p é o número de
acesso ao banco de dados.
variáveis explicativas; i é o número de dados. Sendo a matriz solução organizada na
forma. /cn_catalunha_tarefa/exercicio2/octave_mysql_gnuplot.m

[] [ ] []
y1 1 x 11 x 21 ... x p1 β0 function octave_mysql_gnuplot()
y2 1 x 12 x 22 ... x p2 β1 system("mysql nomeBancoDeDados
e resultando --password=senhaBancoDeDados < sql.txt >
... ... ... ... ... ... ... resultado_sql.txt");
yn 1 x1n x 2n ... x pn βp system("gnuplot grafico.txt");
> regress(my,mx) endfunction
ans = 1 2 # P1= 1 + 2*x
/cn_catalunha_tarefa/exercicio2/sql.txt
12) Raiz de função select * from tabela01;
12.1) Encontrar raiz de uma função
> f=@(x) x**3-3*x+1; /cn_catalunha_tarefa/exercicio2/grafico.txt
> fzero(f,2)
ans = 1.5321 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