Вы находитесь на странице: 1из 13

25/11/13

Resumo de Octave

Resumo de Octave
Ricardo Joo Besteiro e Silva

Contedo
Operaes Simples Vectores e Matrizes Operaes Elemento a Elemento Sequncias Construir Matrizes Aceder a elementos de matrizes Funes que trabalham sobre matrizes Gerao de nmeros aleatrios Grficos Vrios grficos na mesma janela Outros tipos de grficos Strings Funes Condies Controlo de Execuo

Operaes Simples
O octave funciona como uma maquina de calcular um bocado mais avanada. Permite, portanto, fazer todas as contas que uma maquina de calcular permite:
o c t a v e : 1 >1+2 a n s= 3 o c t a v e : 2 >3 3 6 / 8 a n s= 4 2 o c t a v e : 3 >

Os operadores que o octave deixa usar so os seguintes:

adicao : 1+1 = 2 subtraco : 4-3 = 1 multiplicao : 5*99 = 495 diviso : 88/4 = 22 exponenciao : 4^2 = 16
Uma conta mais complicada
o c t a v e : 7 >( 7 * 6+9 7 / 3 2+4 ^ ( 8 4 ) ) / 2 a n s= 1 5 0 . 5 2

Quando se esto a fazer contas complicadas pode dar jeito guardar valores intermdios num local especial. Vamos dar-lhes o nome de variveis e assim que se faz:
o c t a v e : 9 >x=7 2 8 1 * 4 4 4 x= 3 2 3 2 7 6 4 o c t a v e : 1 0 >x+8 8 a n s= 3 2 3 2 8 5 2
ssdi.di.fct.unl.pt/pce/primer.html 1/13

25/11/13

Resumo de Octave

O que o octave faz na primeira instruo avaliar o que esta a direita do = e dar-lhe o nome do que esta a esquerda. Portanto, no octave mas no na matemtica, faz sentido ter:
o c t a v e : 1 1 >x=x+1 x= 3 2 3 2 7 6 5

Para usar o valor que esta guardado numa varivel s preciso usar o nome da varivel, tal como visto nos exemplos anteriores.

Vectores e Matrizes
Uma das caractersticas que torna o octave mais poderoso do que uma maquina de calcular o facto de se poder definir, manipular e trabalhar sobre matrizes.
o c t a v e : 1 2 >v=[ 123 ] v= 1 2 3

Assim definimos uma varivel chamada v, com um vector com os inteiros 1, 2 e 3. Em vez de separar os elementos do vector por espao, podamos te-los separado usando virgulas, que o efeito era exactamente o mesmo.
o c t a v e : 1 3 >v=[ 1 , 2 , 3 ] v= 1 2 3

Para definirmos uma matriz precisamos de instruir o octave onde comea a prxima linha. Isso faz-se usando o ponto-e-virgula, assim:
o c t a v e : 1 5 >m=[ 1 , 2 , 3 ; 456 ] m= 1 2 3 4 5 6

Sobre matrizes e vectores tambm podemos fazer operaes, como somar, subtrair e multiplicar (tambm se pode dividir e exponenciar, mas no to til). As operaes sobre matrizes funcionam como na lgebra, as somas e subtraces so feitas elemento a elemento:
o c t a v e : 1 6 >[111]+[222] a n s= 3 3 3 o c t a v e : 1 7 >[333]-[111] a n s= 2 2 2

A multiplicao a multiplicao de matrizes:


o c t a v e : 1 9 >[ 2 ; 3 ]*[ 12] a n s= 2 4 3 6 [2]*[12]=[2 * 12 * 2] [3] [3 * 13 * 2]

Para alem destas operaes, ha ainda uma operao especifica a matrizes, a transposta. A notao para transpor uma matriz colocando uma plica a frente:
ssdi.di.fct.unl.pt/pce/primer.html 2/13

25/11/13

Resumo de Octave

o c t a v e : 3 0 >[123] ' a n s= 1 2 3

Operaes elemento a elemento Muitas vezes da mais jeito fazer operaes entre duas matrizes elemento a elemento em vez de fazer as operaes da lgebra. O octave tem um conjunto de operadores especialmente para realizar operaes 'elemento a elemento'. Esses operadores so os mesmos que os operadores aritmticos, com a diferena de terem um '.' (sem plicas) antes.
o c t a v e : 2 0 >[23]. *[12] a n s= 2 6

Podemos usar estes operadores tambm para realizar operaes entre um escalar e todos os elementos da matriz:
o c t a v e : 2 1 >[ 12345678 ] . ^ 2 a n s= 1 4 9 1 6 2 5 3 6 4 9 o c t a v e : 2 2 >2 . ^ [ 12345678 ] a n s= 2 4 8 1 6 3 2

6 4

6 4

1 2 8

2 5 6

As matrizes so, assim, uma forma cmoda de trabalhar com um conjunto de valores de uma s vez. Sequncias Ha uma notao especial para criar matrizes que retratem uma sequncia 'previsvel' de nmeros:
o c t a v e : 2 9 >v=1 : 2 0 v= 1 2 3 4 5

9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0

X:Y cria um vector com todos os nmeros entre X e Y, saltanto de 1 em 1. X:P:Y cria um vector com todos os nmeros entre X e Y, saltando de P em P.
o c t a v e : 3 1 >1 : 0 . 5 : 5 a n s= 1 . 0 0 0 0 1 . 5 0 0 0

2 . 0 0 0 0

2 . 5 0 0 0

3 . 0 0 0 0

3 . 5 0 0 0

4 . 0 0 0 0

4 . 5 0 0 0

5 . 0 0 0 0

Contrair matrizes Por vezes interessante construir matrizes com algumas caractersticas especiais. As funes eye, ones, zeros e rand permitem isso. Todas estas funes podem ser usadas de trs formas: sem mais nada, produzindo um s numero:
o c t a v e : 3 6 >o n e s a n s= 1

com um argumento (entre parnteses) para produzir uma matriz quadrada com as dimenses indicadas:
ssdi.di.fct.unl.pt/pce/primer.html 3/13

25/11/13

Resumo de Octave

o c t a v e : 3 5 >e y e ( 3 ) a n s= 1 0 0 0 1 0 0 0 1

ou com dois argumentos, indicando as dimenses (Linhas, Colunas) da matriz a construir:


o c t a v e : 3 7 >r a n d ( 3 , 2 ) a n s= 0 . 6 7 9 0 8 0 . 7 0 4 7 2 0 . 9 9 0 2 2 0 . 7 1 0 2 3 0 . 9 0 0 5 9 0 . 7 8 2 2 9

Aceder a elementos de matrizes Por vezes queremos apenas usar/trabalhar com alguns, no todos, elementos de uma matriz. Se quisermos aceder a um elemento de uma matriz, devemos usar a seguinte notao:
o c t a v e : 1 >m=[ 123 ;456 ;789 ] m= 1 2 3 4 5 6 7 8 9 o c t a v e : 3 >m ( 2 , 3 ) a n s= 6

O primeiro "argumento" define a linha que se quer aceder, e o segundo "argumento" define a coluna. Neste caso estamos a aceder ao elemento na terceira coluna da segunda linha. Se quisermos obter vrios elementos de uma matriz, tambm possvel:
o c t a v e : 4 >m ( [ 123 ] , 2 ) a n s= 2 5 8

obtm todos os elementos (todas as linhas) da segunda coluna. O argumento pode ser um qualquer vector, particularmente um definido usando a notao para sequncias:
o c t a v e : 6 >m ( 3 , 1 : 3 ) a n s= 7 8 9

Quando se deseja obter uma dimenso completa (por exemplo, toda uma linha) pode usar-se a seguinte notao:
o c t a v e : 7 >m ( 3 , : ) a n s= 7 8 9

O resultado idntico ao do exemplo anterior, com a diferena de funcionar seja qual forem as dimenses da matriz (no obrigando o utilizador a sabe-las) Funes que trabalham sobre matrizes No octave ha algumas funes que trabalham sobre matrizes. Uma delas a funo 'sum' que calcula o somatrio dos elementos de uma matriz. No entanto esta funo
ssdi.di.fct.unl.pt/pce/primer.html 4/13

25/11/13

Resumo de Octave

funciona de uma forma peculiar que deve aqui ser mencionada (a 'sum' no caso nico neste comportamento). Quando a trabalhar sobre um vector, funciona da forma esperada somando todos os elementos desse vector.
o c t a v e : 2 >s u m ( [ 11111 ] ) a n s= 5

No entanto, se trabalhar sobre uma matriz, cria um vector linha em que cada posio o somatrio de todos os elementos da coluna correspondente.
o c t a v e : 4 >s u m ( [ 123 ;123 ;123 ] ) a n s= 3 6 9

a funo 'mean' (media) outro exemplo de uma funo com um comportamento similar. Gerao de nmeros aleatrios A funo rand de cada vez que chamada devolve um conjunto diferente de nmeros:
o c t a v e : 1 >r a n d ( 3 , 2 ) a n s= 0 . 3 6 0 6 9 1 0 . 0 5 1 9 6 7 0 . 5 2 8 2 1 7 0 . 1 2 3 9 4 1 0 . 2 8 5 0 9 1 0 . 5 0 9 2 2 1

Tratam-se de nmeros aleatrios, muito teis para fazer simulaes. Os nmeros gerados pela funo rand esto entre [0,1[ e so distribudos uniformemente (todos os nmeros tem a mesma probabilidade de sair). Para gerar nmeros aleatrios num intervalo diferente de [0,1[ preciso fazer uma transformao desse intervalo. Imaginemos que queremos gerar nmeros aleatrios, distribudos uniformemente, entre [a,b[, ento faz-se o seguinte: r a n d * ( b a )+a
o c t a v e : 2 >r a n d ( 1 , 1 0 ) * 4 + 2 a n s= 3 . 9 8 2 8 2 . 5 1 8 7 4 . 2 2 2 6

2 . 2 9 8 9

3 . 7 3 3 0

2 . 4 2 5 3

3 . 1 3 7 5

4 . 2 5 5 4

2 . 6 8 5 8

2 . 8

gera nmeros no intervalo [2,6[ Grficos


Para traar uma funo preciso fornecer ao octave um conjunto de pontos. O octave, por omisso, dados os pontos { (x1,y1), (x2,y2), ..., (xn, yn) } traa uma recta entre os pontos consecutivos ( por exemplo entre p1 e p2, p2 e p3, ..., p(n-1) e p(n) ).
o c t a v e : 3 >x=1 0 : 1 0 ; o c t a v e : 4 >y=x . ^ 2 ; o c t a v e : 5 >p l o t( x ,y )

vai traar o grfico da parbola x^2 entre os pontos -10 e 10.

ssdi.di.fct.unl.pt/pce/primer.html

5/13

25/11/13

Resumo de Octave

Podemos dizer ao octave para no traar uma linha entre os pontos e em vez disso simplesmente marca-los. Para isso acrescentamos um terceiro argumento ao plot, indicando como queremos que os pontos sejam marcados.
o c t a v e : 9 >a l t u r a s = [ 1 8 2 , 1 5 6 , 1 6 6 , 1 9 0 , 1 7 0 , 1 7 5 , 1 6 8 ] ; o c t a v e : 1 0 >p e s o s = [ 1 0 1 , 7 0 , 6 5 , 9 8 , 7 9 , 6 8 , 5 2 ] ; o c t a v e : 1 1 >p l o t ( a l t u r a s ,p e s o s ,' x ' )

vai traar o grfico pedido na pergunta 5 da ficha 2 (os pesos em funo das alturas das pessoas medidas). Este terceiro argumento pode ser 'x', '.' ou '+' dependendo de como se deseja que os pontos sejam marcados no grfico.

ssdi.di.fct.unl.pt/pce/primer.html

6/13

25/11/13

Resumo de Octave

Vrios grficos na mesma janela Para uma melhor visualizao de vrios conjuntos de dados, pode ser interessante colocar vrios grficos numa mesma janela. Ha duas formas de fazer isso em octave. Usando o comando hold, podem-se traar varias funes no mesmo grfico.
o c t a v e : 1 >h o l do n o c t a v e : 2 >p l o t ( a l t u r a s , p e s o s , ' x ' ) o c t a v e : 3 >x=[ 1 5 02 0 0 ] x= 1 5 0 2 0 0 o c t a v e : 4 >p l o t ( x ,m * x+b )

ssdi.di.fct.unl.pt/pce/primer.html

7/13

25/11/13

Resumo de Octave

Assumindo que m e b contem os valores calculados correctamente, esta sequncia de instrues criara um grfico que ter os pontos do exemplo anterior marcados lado a lado com a recta que melhor se adequa a eles. Quando estamos em modo 'hold on', todos os grficos traados vo para a mesma janela. Para apagar todos os grficos da janela, usa-se o comando 'clearplot'. Se quisermos ter varias funes lado a lado devemos usar a funo 'subplot'. Com a funo subplot podemos colocar vrios grficos lado a lado dispostos numa grelha.
s u b p l o t ( 1 , 2 , 1 ) p l o t ( a l t u r a s ,p e s o s ,' x ' ) s u b p l o t ( 1 , 2 , 2 ) p l o t ( x ,m * x+b )

ssdi.di.fct.unl.pt/pce/primer.html

8/13

25/11/13

Resumo de Octave

Esta sequncia de comandos coloca as duas funes em grficos adjacentes. Os primeiros argumentos do subplot definem a geometria da disposio dos grficos na figura. O ultimo argumento define a posio na figura onde ficara a prxima funo que for traada. E s um argumento pelo que e preciso estar-se ciente de como se distribuem os ndices: preenchem cada linha, coluna e coluna, e s depois passam para a prxima. Por exemplo, os ndices num subplot com geometria 2x3 sero:

123 456
Outros tipos de grficos Para alem de traar funes e marcar pontos, o octave tambm permite desenhar outros tipos de grficos. Um desses tipos de grficos so histogramas, atravs da funo hist.
h i s t ( x , n )

traa um histograma, baseado nos valores no vector 'x', com 'n' divises.

Strings
Uma string um valor que representa uma cadeia de caracteres. Os seus principais usos so a transmisso de informao entre o utilizador e o programa, e vice-versa. Servem, por exemplo, para o utilizador exprimir dados que deseja passar ao programa (uma formula qumica, por exemplo), ou dados que o programa deseja mostrar ao utilizador (de uma forma formatada). Uma string uma sequncia de caracteres entre aspas:
ssdi.di.fct.unl.pt/pce/primer.html 9/13

25/11/13

Resumo de Octave

o c t a v e : 2 4 >s=" o l am u n d o ,e us o uu m as t r i n g " s=o l am u n d o ,e us o uu m as t r i n g

Todos os caracteres podem ser postos dentro de uma string sem qualquer problema, a no ser a aspa. Se quisermos uma string em que um dos seus constituintes uma aspa, temos de colocar duas aspas. Se pusssemos s uma, o octave ia 'pensar' que se estava a terminar a string. Para introduzir uma aspa numa string, colocam-se duas aspas, assim:
o c t a v e : 2 8 >s=" o l am u n d o ," " e u " "s o uu m as t r i n g " s=o l am u n d o ," e u "s o uu m as t r i n g

Neste caso, temos duas aspas na string, a volta da palavra 'eu'. Ha alguns caracteres que no so visveis e tem um significado especial. Embora no os consigamos 'ver', pode ser interessante coloca-los numa string. Alguns exemplos desses caracteres:

\n (new line) comea uma nova linha \t (tab) \b (backspace) \\ (slash) d algum espaco apaga um caracter uma barra

Podem-se manipular strings acedendo a partes delas como se fossem vectores:


o c t a v e : 2 9 >s ( 5 : 9 ) a n s=m u n d o

Tambm se podem colocar strings numa matriz, de forma a organizar um conjunto de dados relacionados.
o c t a v e : 3 0 >s=[ s ; " o l am u n d o " ] s= o l am u n d o ," e u "s o uu m as t r i n g o l am u n d o

Ha que ter em ateno que este mtodo esta a colocar strings numa matriz de caracteres. Isso quer dizer que todas as linhas tem de ter o mesmo comprimento. O octave, neste caso, expande as strings mais pequenas de forma a serem do mesmo tamanho que as maiores. Este comportamento facilmente verificvel:
o c t a v e : 3 1 >l e n g t h ( s ( 2 , : ) ) a n s= 3 0

O octave define uma serie de funes utilitrias que podem dar jeito a manipular strings, aqui listamos algumas delas:
f i n d s t r ( s 1 , s 2 ) s p l i t ( s , t ) s t r r e p ( s , m , r )

procura a menor string dentro da maior, devolvendo um vector com as posies onde comea a menor. divide uma string num vector (coluna) de strings separadas por t

substitui todas as ocorrencias de m por r na string s converte uma representacao em string de um numero s t r 2 n u m ( s ) num numero t o l o w e r ( s ) / t o u p p e r ( s ) transforma a string s para minsculas/maisculas compara as strings s1 e s2. Se forem iguais devolve 1, s t r c m p ( s 1 , s 2 ) caso contrario devolve 0
ssdi.di.fct.unl.pt/pce/primer.html 10/13

25/11/13

Resumo de Octave

d e b l a n k ( s )

remove todos os espaos no comeo e no fim de uma string

Funes
Numa funo encapsulam-se uma serie de comandos para uso futuro. Notao: entre <> esto partes que devem ser preenchidas conforme o caso.
f u n c t i o n< r e s u l t a d o >=< n o m e > ( < a r g u m e n t o 1 > , < a r g u m e n t o 1 > , . . . ) < a c e s > e n d f u n c t i o n

NOTA IMPORTANTE : uma funo tem de estar definida num ficheiro chamado <nome>.m para poder ser usada directamente no octave. <resultado> trata-se de uma variavel que no fim da funcao (e n d f u n c t i o n ) tera o valor de retorno da funcao. Esta parte pode ser omitida (para funcoes que nao devolvem nada) ou ser um vector de variaveis (exemplo: [ r e s 1 ,r e s 2 ] ) quando se desejam devolver varios valores. Os argumentos de uma funcao, na sua definicao, sao apenas nomes de variaveis. O valor que essas variaveis tomarao sao passados por quem usar a funcao. exemplo: funo que calcula o somatrio de todos os elementos de uma matriz bidimensional
f u n c t i o nr e s=s u m _ m a t r i x ( m ) r e s=s u m ( s u m ( m ) ) e n d f u n c t i o n

Condies
Uma condio no mais do que a comparao entre vrios valores. Estas comparaes podem ser relativamente simples a bastante complicadas. Das comparaes mais simples que se podem fazer, esto comparaes entre nmeros:
o c t a v e : 8 >4<7 a n s= 1

De notar que para o octave 0 falso e tudo o resto verdadeiro. O octave define as constantes true e false com valores predefinidos:
o c t a v e : 9 >t r u e a n s= 1 o c t a v e : 1 0 >f a l s e a n s=0

Portanto, a comparao do primeiro exemplo deu verdade, como seria de esperar. Podem-se fazer as comparaes esperadas:

menor

x<y

menor ou igual x <= y maior x>y maior ou igual x >= y igual x == y


ssdi.di.fct.unl.pt/pce/primer.html 11/13

25/11/13

Resumo de Octave

diferente

x != y

Para alem de comparaes entre nmeros, tambm possvel combinar varias comparaes, usando os seguintes operadores lgicos:

ou

| ||

e & && negao !


A negao um operador unrio, querendo isso dizer que tem apenas um argumento, que simplesmente devolve o valor de verdade contrario ao valor do seu argumento:
o c t a v e : 1 2 >! ( 4<7 ) a n s=0

Para cada um dos operadores lgicos binrios ('e' e 'ou') ha duas verses do operador. A diferena entre eles puramente operacional, sendo que o resultado obtido usando as duas formas idntico. A primeira verso avalia toda a expresso, e devolve o resultado. A segunda verso poupa operaes avaliando apenas o estritamente necessrio de uma forma bem definida (e previsvel para o utilizador). Avalia as expresses da esquerda para a direita, e para se o resultado intermdio for suficiente para decidir o resultado da operao. Por exemplo:
o c t a v e : 1 3 >5<4| |5= =4 a n s=0 o c t a v e : 1 4 >4<5| |4= =5 a n s= 1

No primeiro caso, todas as expresses so avaliadas, resultando em falso. No segundo caso, a primeira expresso verdade, pelo que no vale a pena avaliar a segunda. Estes operadores so particularmente teis quando partes da expresso no fazem sentido em alguns casos verificados noutra expresso.
o c t a v e : 1 5 >s=" " ; o c t a v e : 1 7 >s t r c m p ( s , " " )| |s ( 1 )= =" 1 " a n s= 1 o c t a v e : 1 8 >s=" 1 2 3 " ; o c t a v e : 1 9 >s t r c m p ( s , " " )| |s ( 1 )= =" 1 " a n s= 1 o c t a v e : 2 0 >s=" 2 3 " ; o c t a v e : 2 1 >s t r c m p ( s , " " )| |s ( 1 )= =" 1 " a n s=0 o c t a v e : 2 2 >s t r c m p ( s , " " )|s ( 1 )= =" 1 " a n s=0 o c t a v e : 2 3 >s=" " ; o c t a v e : 2 4 >s t r c m p ( s , " " )|s ( 1 )= =" 1 " e r r o r :i n v a l i dm a t r i xi n d e x=1 e r r o r :e v a l u a t i n gb i n a r yo p e r a t o r` = = 'n e a rl i n e2 4 ,c o l u m n2 1 e r r o r :e v a l u a t i n gb i n a r yo p e r a t o r` | 'n e a rl i n e2 4 ,c o l u m n1 4

Quando a primeira expresso verdadeira, a segunda esta a aceder a uma posio de s que no existe, portanto o octave da erro se essa expresso for avaliada. A forma preferida de comparar strings usando a funo strcmp (tal como ilustrado acima) que devolve verdade se uma string igual a outra.

ssdi.di.fct.unl.pt/pce/primer.html

12/13

25/11/13

Resumo de Octave

Controlo de Fluxo
Quando queremos escolher entre duas sequncias de aces baseado numa condio, usamos a construo 'if':
i f< c o n d > < a c e s > e l s e < a c e s > e n d i f

exemplo: duas operaes diferentes dependendo do valor de x.


i fx<5 x=5 e l s e x=x+5 e n d i f

Quando queremos realizar um conjunto de aces um numero predefinido de vezes, usamos a construo 'for'. As <aces> no for so executadas uma vez por cada elemento de <vector> com a varivel <var> igual ao elemento actual.
f o r< v a r >=< v e c t o r > < a c e s > e n d f o r

Exemplo: acrescentar 10 valores (um a um) a varivel x


x=0 f o ra=1 : 1 0 x=x+1 e n d f o r

Quando queremos realizar um conjunto de operaes enquanto uma condio se verifica, usamos o ciclo while. Nesta construo importante que as aces levem o estado do programa cada vez mais "prximo" de satisfazer a condio.
w h i l e< c o n d > < a c e s > e n d w h i l e

Exemplo: enquanto o x for maior que zero, retirar-lhe uma unidade


w h i l ex>0 x=x-1 e n d w h i l e

ssdi.di.fct.unl.pt/pce/primer.html

13/13

Вам также может понравиться