Beruflich Dokumente
Kultur Dokumente
Autores:
Mauricio Galo
Paulo de Oliveira Camargo
Presidente Prudente
2011
Introduo ao Octave
Presidente Prudente
01 a 03 de Junho de 2011
Autores:
M
Ma
au
urriicciio
oG
Ga
allo
o
P
Pa
au
ullo
od
de
eO
Olliiv
ve
eiirra
aC
Ca
am
ma
arrg
go
o
Departamento de Cartografia / FCT - UNESP
1
INTRODUO AO OCTAVE
CONTEDO PROGRAMTICO
1. INTRODUO
2. INICIANDO O OCTAVE
Minicurso:
Introduo ao OCTAVE
Autores:
M
Ma
au
urriicciio
oG
Ga
allo
o
P
Pa
au
ullo
od
de
eO
Olliiv
ve
eiirra
aC
Ca
am
ma
arrg
go
o
REFERNCIAS
Este material foi preparado a partir das seguintes referncias (em ordem alfabtica):
1. INTRODUO
EATON, J. W.; BATEMAN, D.; HAUBERG, S. GNU Octave Edition 3 for Octave version
3.2.3, July, 2007. 672p.
HANSELMAN, D.; LITTLEFIELD, B. Matlab - Verso do Estudante: guia do usurio
(Traduo). So Paulo: Makron Books, 1997. 305p.
c
Deste modo, os alunos poderiam dedicar mais tempo na anlise e soluo dos
problemas de qumica, do que especificamente na implementao.
Caractersticas bsicas:
- Domnio pblico;
vrios profissionais, de diferentes pases, sendo a sua distribuio de acordo com a licena
Mac, etc.
Onde encontrar:
http://www.gnu.org/software/octave/
http://octave.sourceforge.net/
operacionais como DOS, Unix, Linux, dentre outros. A tabela seguinte mostra alguns
destes comandos, que podem se acionados a partir do prompt do OCTAVE.
cd
dir
pwd
delete
type
what
help
quit ou exit
Alm destes comandos vrios outros podem ser usados, como por exemplo: mkdir,
rmdir, etc.
10
2. INICIANDO O OCTAVE
2.1. Variveis
O OCTAVE trabalha essencialmente com um tipo de varivel: matriz, que pode
conter nmeros, complexos ou no (um escalar uma matriz 1 x 1) e textos. Em alguns
pacotes
disponveis
para
OCTAVE
esto
disponveis
na
pgina
tipos (inteiro, char, double, etc,) para inici-las, como feito em outras linguagens de
programao (C/C++, dentre outras). Ao atribuir valores numricos (ou alfanumricos) a
http://octave.sourceforge.net/.
12
A maneira mais fcil de entrar com uma pequena quantidade de valores digitando
ou
A=[1, 2, 3; 4, 5, 6; 7, 8, 9]
diretamente os dados:
- envolva os elementos com colchetes, [ ];
3
6
na varivel A:
1 2 3
A = 4 5 6
7 8 9
OBS: Para que o computador realize a operao e no mostre a sada, basta terminar a
expresso com ponto-e-vrgula (;). Isto muito til para evitar que o computador mostre
resultados de clculos intermedirios desnecessrios, e para acelerar as operaes.
Basta digitar:
A=[1 2 3; 4 5 6; 7 8 9]
13
14
help
ans
eps
nan
realmax
realmin
inf
computer
pi
i, j
version
Ajuda do OCTAVE
Nome de varivel padro usado para resultados
Preciso do nmero real (ponto flutuante)
Not a Number (indeterminao: 0/0)
Maior nmero real positivo utilizvel
Menor real positivo utilizvel
Infinito: 1/0
Tipo de computador
3,14159265358979
Unidade imaginria (i2=-1)
Verso do OCTAVE
1/3
-99
.0001
9.63973
1.602E-20
6.025E23
3 + 2i
-3.1459i
3E5j
15
Todo clculo realizado com todas as casas decimais (eps), embora os nmeros
mostrados ocultem algumas dessas casas. Para mudar o formato de sada dos nmeros,
pode-se usar o comando format.
O formato default, chamado de formato short, mostra aproximadamente 5 dgitos
significativos ou usam notao cientfica. Exemplo:
+
*
16
1.3333e+000 1.2345e-006
1.333333333333333e+000 1.234500000000000e-006
3ff5555555555555 3eb4b6231abfd271
4/3 9/7290401
(Aproximao racional)
1.33 0.00
++
adio
subtrao
multiplicao
/e\
^
Diviso
Potenciao
matriz transposta
abs(x)
acos(x)
angle(x)
asin(x)
atan(x)
cos(x)
cross(a,b)
exp(x)
inv(x)
log(x)
log10(x)
max(x)
mean(x)
min(x)
sin(x)
sqrt(x)
std(x)
sum(x)
tan(x)
Mdia de x
Menor elemento em x
Seno
Raiz quadrada
Desvio padro
Soma dos elementos de x
Tangente
Algumas dessas operaes podem ser aplicadas a vetores ou matrizes. Para a funo
std(x), por exemplo, se o argumento x for um vetor o resultado ser o desvio padro desse
vetor. Se x for uma matriz, ser calculado o desvio padro para cada coluna dessa matriz.
O mesmo ocorre com as funes sum, max e mean, entre outras.
19
20
2.2.1. Comandos
V=[1 2 3 4 5 6 7 8 9]
22
2.2.2. Exerccios
1) Armazene no workspace os seguintes valores:
a = 3;
help who
b = -2.123;
c = 4*3;
d = [1 2 3 4];
Outro comando til: lookfor. Este comando procura e lista todas as funes do
OCTAVE que contm a palavra-chave especificada.
e = [1; 2; 3; 4];
lookfor mean
23
24
c = 4*pi;
a) 4.12 a pi/c
para x
b) log(a + 40.1353)
3) Verifique o resultado das seguintes das seguintes operaes:
a) (a + b) c
c) tan(c) asin(b)
b) (c b) a / b
d) sin(cos(tan(c)))
para y
c) log(a)
para z
25
26
> y = 0:pi/4:pi
que resulta em:
y =
0.0000
0.7854
1.5708
2.3562
3.1416
ou
> x = 1:1:5
> z = 6 : -l : l
z =
6
27
28
A =
l 2 3
4 5 6
7 8 9
k=
a declarao
l 2 3
4 5 6
7 8 10
29
30
>> C = A(2:3,2:4)
C =
80 17 14
A =
81 88 20
92 99 11 18
98 80 17 14
14 81 88 20
>> B = A(2:3,4)
>> D = triu(A)
D =
92 99 11 18
B =
14
00 88 17 14
20
00 00 88 20
31
32
ans =
Matriz identidade:
eye
Matriz diagonal:
diag
rand
24
18
15
21
12
27
33
m+100
ans =
108 101
105
107
104
109
102
106
103
34
inv
det
Nas operaes entre matrizes devem ser respeitadas as regras usuais da matemtica
quanto ao nmero de linhas e colunas que duas matrizes devem ter para serem somadas,
trace
multiplicadas, etc. No entanto existem operaes especiais. Sendo A=[a1 a2 ... an] e B=[b1
cond
rank
A./B = [a1/b1 a2/b2 ... an/bn];
35
36
3.4. Exerccios
4. GRFICOS
A = [1 2 3; 4 10 6; 7 8 19];
A construo de grficos no OCTAVE bem simples e a maior parte dos comandos
B = [4 5 6; 1 2 3; 8 7 6];
C = [4 5 6];
muito parecida com os usados pelo MATLAB, sendo possvel a gerao de grficos
L = [4; 5; 6];
bidimensionais ou tridimensionais.
2) Calcule:
a) D = A+B
b) E = A*B
h) Produto D vezes A
c) F = A-B
i) Autovalor e Autovetor de A
d) G = BT-A
e) H = ATA
k) Resolver o sistema AX = L
f) I = A CT
37
38
plot
bar
stem
stairs
errorbar
hist
comet
>> y = [0.0
0.48
0.84
1.0
0.91
0.6
0.14];
>> plot(y)
39
40
Resultado
41
42
Resultado
43
44
Resultado
Os tipos de linhas, smbolos e cores usadas para mostrar os grficos podem ser
0.8
0.6
0.4
>> x = 0:0.05:1;
0.2
>> subplot(1,2,1);
>> plot(x,x.^2,k*)
-0.2
>> subplot(1,2,2);
-0.4
>> plot(x,log(x+0.1),y-)
-0.6
-0.8
-1
10
12
14
45
46
Resultado
0.5
TIPO DE LINHA
0.9
0.8
0.7
-0.5
0.6
0.5
CORES
magenta
cian
+++++++++
vermelho
xxxxxxx
verde
azul
branco
preto
amarelo
-1
0.4
-1.5
0.3
0.2
-2
0.1
0
__________
TIPO DE PONTO
0.5
-2.5
0.5
^^^^^^^
47
48
4.3. Exerccios
>> t = 0:0.5:4*pi;
>> t=1:pi/10:6*pi;
>> y = sin(t);
>> y=(1-t).*sin(t);
>> comet(y)
49
50
>> t = -2:0.2:2;
>> [x, y] = meshgrid(t, t);
>> z = x.* exp(-x.^2 - y.^2);
>> mesh(x,y,z)
51
52
Outros exemplos de superfcies (ainda usando a mesma funo) no qual se considera que a
superfcie iluminada por uma fonte de luz, dando o efeito de "sombreamento".
>> colormap(bone)
>> surfl(x, y, z)
>> colormap(bone)
>> surfl(x, y, z), shading flat
Verifique as seguintes opes:
>> surf(x, y, z)
>> colormap(bone)
>> colormap(gray);
Alguns outros paletes: hot, bone, pink, jet, spring, rainbow, cool, copper,
53
54
Curvas de nvel
O comando contour(z,10) mostra a projeo da superfcie acima no plano xy com 10
iso-linhas.
title
Ttulo do grfico.
xlabel
Ttulo do eixo X.
ylabel
Ttulo do eixo Y.
zlabel
Ttulo do eixo Z.
text
gtext
grid
Linhas de grade.
55
56
Exemplos:
>> fplot(sin, [-pi pi]);
>> title Grfico da funo f(x)=seno(x), -pi<x<pi;
>> xlabel x;
>> ylabel f(x);
>> grid (on);
>> text(1,.2,Curva sin(x));
>> gtext Sin(x);
Exemplo do comando fplot para mltiplas funes
fplot('[tan(x),sin(x),cos(x)]',2*pi*[-1 1 -1 1])
57
58
>> figure(2)
>> t=linspace(-2*pi,2*pi,50);
>> y1=tan(t);
>> y2=sin(t);
Para editar um arquivo texto na rea de trabalho do OCTAVE, no prompt digite edit
>> y3=cos(t);
>>
>> plot(t,y1,"r");
OCTAVE, utizando qualquer editor de texto (notepad, textpad, wordpad, edit, etc.).
>> hold on
Existem alguns comandos e declaraes especiais para serem usados nos arquivos,
>> plot(t,y2,"g");
por exemplo:
>> plot(t,y3,"b");
59
60
Comando
% ou #
clear
input
pause
clc
figure(n)
close
Funo
Inserir um comentrio no arquivo .m.
Apagar todos os dados da memria.
Usado para a entrada de dado a partir da janela
de comando.
Provoca uma pausa na execuo do arquivo at
que qualquer tecla seja digitada.
Limpar a janela de comando.
Mostrar a janela grfica nmero n.
Fechar todas as janelas grficas.
61
62
6. CONTROLE DE FLUXO
matrizes:
A(i,j)=i+j;
B(i,j)=i-j;
endfor
endfor
A
B
C=A+B
63
64
Operadores relacionais:
a = 1; b = 15;
while a<b
a = a+1
b = b-1
endwhile
disp(fim do loop)
o procedimento repetido.
Quando o teste se tornar falso o lao terminar, e a
execuo continuar no comando que segue o lao
Operadores lgicos
<
Menor do que
&
>
Maior do que
ou
<=
Menor ou igual a
no
>=
Maior ou igual a
==
Igual
~=
Diferente
aps o endwhile.
65
66
for i = 1:5;
for j = 1:5;
if i == j
A(i,j) = 2;
else
if abs(i-j) == 1
A(i,j) = -1;
else
A(i,j) = 0;
endif
endif
endfor
endfor
A
67
68
A tabela seguinte mostra alguns comandos bsicos, que permitem a operao com
imagens no OCTAVE:
imread
image
hist
rgb2gray
axis
disp
figure
colormap
imfinfo
nome='lenna.jpg';
DATA=imread(nome);
figure(1);
image(DATA);
xlabel([ 'Imagem: ' nome ]);
disp([ 'Imagem entrada: ' nome ]);
figure(2);
DATAg=rgb2gray(DATA);
image(DATAg);
colormap(gray(256));
xlabel([ 'Imagem (tom de cinza) ' ]);
disp([ 'Imagem (tom de cinza) : ok' ]);
69
70
50
50
50
100
100
100
150
150
150
200
200
200
250
250
250
300
300
300
350
350
400
100
150
200
250
Imagem: lenna.jpg
71
350
400
50
300
350
400
50
100
150
200
250
300
350
400
400
50
100
150
200
250
300
350
400
Imagem (negativa)
72
nome='lenna.jpg';
DATA=imread(nome);
DATAg=rgb2gray(DATA);
Histograma
3500
50
figure(1);
image(DATAg);
colormap(gray(256));
xlabel([ 'Imagem: ' nome ]);
disp([ 'Imagem (original): ' nome ]);
3000
100
2500
150
2000
200
1500
250
[freq,tom]=hist(DATAg(:),0:255);
figure(2);
plot(tom,freq);
title([ 'Histograma' ]);
1000
300
500
350
400
50
100
150
200
250
300
350
400
50
100
150
200
250
300
73
74
nome='lenna.jpg';
DATA=imread(nome);
DATA=rgb2gray(DATA);
imshow
imagesc
figure(1);
image(DATA);
colormap(gray(256));
title([ 'Imagem: ' nome ]);
f33=[ 1 1 1;
1 1 1;
1 1 1 ];
PARCIALa=filter2((1/9)*f33,DATA,'same');
figure(2);
image(PARCIALa);
colormap(gray(256))
title([ 'Imagem: ' nome ' [Aps fitro mdia 3x3]' ]);
75
76
Imagem: lenna.jpg
50
50
100
100
150
150
200
200
250
250
300
300
350
350
400
400
50
100
350
400
50
100
150
200
250
300
350
400
50
100
f2da=[
-1
0
1; -2
0
2; -1
0
1 ];
PARCIAL=filter2(f2da,DATA);
figure(4);
imshow(uint8(PARCIAL));
title([ 'Imagem: ' nome ' [Aps filtro Sobel (borda
vertical]' ]);
150
200
250
300
350
400
50
77
100
150
200
250
300
350
400
78
armazenamento das imagens aps o filtro de suavizao 3x3 e 5x5, em arquivos com
armazenamento das imagens aps o filtro de suavizao 3x3 e 5x5, em arquivos com
diferentes formatos:
diferentes formatos:
...
...
imwrite(uint8(PARCIALa),"filtro3x3.jpg");
imwrite(uint8(PARCIALb),"filtro5x5.png");
disp(['Imagens filtro3x3.jpg e filtro5x5.png salvas.']);
imwrite(uint8(PARCIALa),"filtro3x3.jpg");
imwrite(uint8(PARCIALb),"filtro5x5.png");
disp(['Imagens filtro3x3.jpg e filtro5x5.png salvas.']);
79
80
Os dados obtidos por outros programas podem ser importados pelo OCTAVE, desde
Os dados contidos na rea de trabalho do OCTAVE, como foi visto, podem ser
formato ASCII, e no caso de matrizes, com colunas separadas por espaos e cada linha da
comando save. Existem diversas maneiras de utilizar este comando, como pode-se ver nos
81
82
Por exemplo suponha que um programa qualquer criou arquivo polig1.dat que
contm a seguinte matriz.
polig1
polig1 =
11
31
33
13
11
Ao executar o comando:
83
84
O OCTAVE pode tambm importar (atravs do comando load) os dados que foram
Exemplo:
>> x = rand(3,3)
x =
0.2190 0.6793 0.5194
load arq1
load arq2.sai
load arq3.sai
save arq1 X Y Z
save arq2.sai X Y Z -ascii
save arq3.sai X Y Z -ascii -double
Deve-se ressaltar que o comando save, quando usado para exportar os dados do
>> y = rand(3,3)
y =
0.0535
0.0077 0.4175
Quando os dados so importados atravs do comando load, apenas uma varivel com
0.5297
0.3835 0.6868
0.6711
0.0668 0.5890
85
86
>> clear
>> whos
>> arq2
A esctrutura geral de uma funo criada pelo usurios do OCTAVE a seguinte:
arq2 =
0.2190
0.0470
0.6789
0.0535
0.5297
0.6711
0.6793
0.9347
0.3835
0.0077
0.3834
0.0668
0.5194
0.8310
0.0346
0.4175
0.6868
0.5890
87
88
Na sequncia so mostrados dois exemplos de funes. Uma delas foi criada com o
cos() sin()
M ( ) =
sin() cos() .
A segunda funo tem o propsito de, dada uma matriz de rotao M e um ponto de
sin(alfa);
cos(alfa)];
Endfunction
x '
x
y ' = M ( ) y
89
90
function [xrot,yrot]=f_aplica_rotacao(M,x,y)
0
1
1
0
0
xrot=x*M(1,1) + y*M(1,2);
yrot=x*M(2,1) + y*M(2,2);
endfunction
Contedo do
arquivo
polig1.dat
0
0
1
1
0
2
3
2
2
Contedo do
arquivo
polig2.dat
2
3
3
2
91
92
load 'polig1.dat'
load 'polig2.dat'
...
ROT = f_matriz_rotacao(30);
[lin1,col1]=size(polig1);
[lin2,col2]=size(polig2);
[x1r,y1r]=f_aplica_rotacao(ROT,x1,y1);
[x2r,y2r]=f_aplica_rotacao(ROT,x2,y2);
x1=polig1(1:lin1,1);
y1=polig1(1:lin1,2);
x2=polig2(1:lin2,1);
y2=polig2(1:lin2,2);
figure(2);
plot(x1r,y1r,x2r,y2r);
figure(1);
plot(x1,y1,x2,y2);
figure(3);
plot(x1,y1,x2,y2,x1r,y1r,x2r,y2r);
93
94
REFERNCIAS
3
2.5
EATON, J. W.; BATEMAN, D.; HAUBERG, S. GNU Octave Edition 3 for Octave version
3.2.3, July, 2007. 672p.
1.5
0.5
0
-0.5
ZERI, L. M. M.. Apostila de Matlab. Instituto Nacional de Pesquisas Espaciais INPE, 2001. 19p.
95
96