Apostila Octave
Apostila Octave
Apostila Octave
Junho – 2003
Sumário
1 Introdução 3
1.1 Notas Sobre as diferenças entre MatLab e Octave . . . . . . . . . . . . . . . . 4
1.2 Distribuição do Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Ambiente de trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4 Como avaliar os possíveis erros no Octave . . . . . . . . . . . . . . . . . . . 5
2 Operadores Aritméticos 7
3 Variáveis 9
3.1 Formatos Numéricos do Octave . . . . . . . . . . . . . . . . . . . . . . . . . . 10
4 Matrizes e Vetores 11
4.1 Como criar uma Matriz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4.2 Como deletar uma linha ou uma coluna de uma Matriz . . . . . . . . . . . . 13
4.3 Como acessar os elementos da Matriz . . . . . . . . . . . . . . . . . . . . . . 13
4.4 Como acrescentar linhas ou colunas numa dada Matriz . . . . . . . . . . . . 14
4.5 Operações Matriciais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
5 Funções 17
5.1 Funções elementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
5.2 M-arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
5.3 Solução de sistemas lineares Ax=b . . . . . . . . . . . . . . . . . . . . . . . . 19
5.4 Solução de um conjunto de equações não-lineares . . . . . . . . . . . . . . . 20
5.5 Cálculo da integral definida em um intervalo para uma variável . . . . . . . 20
6 Gráficos 23
6.1 Plotando em 2 dimensões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
6.1.1 Funções Especiais de Plotagem em 2 Dimensões . . . . . . . . . . . . 24
6.2 Plotando em 3 dimensões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6.2.1 Acéssórios para plotagem em 3D . . . . . . . . . . . . . . . . . . . . . 25
6.3 Como Imprimir ou Salvar os Gráficos . . . . . . . . . . . . . . . . . . . . . . . 26
7 Equações Diferenciais 29
7.1 Função: lsode (f cn, x0 , t, tcrit ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
7.2 Equações Diferenciais Algébricas . . . . . . . . . . . . . . . . . . . . . . . . . 30
8 Estatística 31
1
2 SUMÁRIO
CAPÍTULO
1
Introdução
“Embora nossos objetivos iniciais fossem um tanto vagos, nós sabíamos que teríamos
que criar algo que permitiria aos estudantes a resolver problemas realísticos, e que
poderia ser usado para muitas coisas à exceção dos problemas químicos do projeto
do reator.” John W. Eaton
Originalmente pretendia-se usar o Octave para ensinar o projeto do reator, mas ele
acabou sendo usado também nas diversas disciplinas da graduação do departamento de
engenharia química e do departamento da Matemática da Universidade do Texas, que
tem usado este software para ensinar equações diferenciais e também álgebra linear.
Todos são incentivados a compartilhar este software com o outro sob os termos gerais
de licença pública do GNU. Você também é incentivado a ajudar fazer do octave um pro-
grama mais útil escrevendo e contribuindo com funções adicionais para ele, e relatando
todos os problemas que você tiver.
Atualmente existem excelentes programas de livre distribuição e/ou de dis-
tribuição gratuita disponíveis para a realização das mais diversas atividades de pesquisa
e ensino. Esses programas são desenvolvidos por milhares de pessoas no mundo inteiro
e tornam-se cada vez mais de interesse da comunidade científica e do público em geral.
Muitas das atividades cientificas e de ensino nos cursos de Cálculo e Física, são de-
senvolvidas utilizando programas proprietários(Por exemplo: MatLab° R
). Muitos desses
programas possuem similares gratuitos que podem auxiliar a reduzir os custos de tais
ferramentas computacionais, ao mesmo tempo em que dá acesso irrestrito a ferramentas
robustas. Um desses programas é o GNU-Octave, utilizado para cálculos numéricos.
Como se pôde ver nesta apostila, o software Octave tem uma sintaxe semelhante
à do MatLab° R
, oferecendo recursos suficientes à maioria dos usuários na resolução de
problemas numéricos de álgebra linear, na manipulação de polinômios, integração de
equações diferenciais ordinárias e equações algébrico-diferenciais, além de outros vários
recursos que o software oferece.
3
4 CAPÍTULO 1. INTRODUÇÃO
representado pelos ".m files"que ele também interpreta na sua maioria, bastando que se
salve no local adequado (octave_ files), assim como foi visto no capítulo 6.
As tendências de utilização de Free software tem crescido cada vez mais, como o
Linux comparado com o Windows° R
, ao qual muitas pessoas, empresas e Instituições
Acadêmicas estão optando pelo Linux, não só por ser Free, mas também pela eficiência
que esse tipo de software oferece.
Sendo assim, por esses e outros motivos, o Octave é a melhor alternativa Free
quando comparado com o MatLab° R
.
Note que a diferença entre MOD (que só existe no Matlab) e REM (que existe em
ambos) só aparece se a*b<0.
>>
O símbolo >> representa o pront do octave e a partir dele que digitamos os comandos.
parse error:
>> functon y=f(x) y=x^2;endfunction
^
>>
Para a maioria dos erros, devido a análise gramatical, o Octave usa um sinal de inter-
calação, para marcar o ponto específico onde esta o erro. Neste exemplo, o Octave acu-
sou um erro de comando mal escrito, functon em vez de function e como ficou faltando a
letra ’i’, o cursor apontou exatamente para a letra ’o’, onde deveria conter também a letra
’i’. Estas mensagens facilitam muito a identificação e correção dos erros de compilação.
Outra forma de erro é quando o Octave não reconhece uma variável ou a estrutura de
um comando, como o exemplo abaixo, em que a variável xnão foi definida.
>> x
error: ‘x’ undefined near line 1 column 1
>>
>> 2*2^3
ans = 16
>>
>> x=ans
x = 16
>>
>> fer=x
fer = 16
>> vc=fer
vc = 16
>>
7
8 CAPÍTULO 2. OPERADORES ARITMÉTICOS
>> resultado=fer*vc+x
resultado = 272
>>
>> x=12,y=15,t=x
x = 12 y = 15 t = 12
>>
>> total=x*y+t*y;
>>
Este procedimento é indicado para programas longos e que não se tenha interesse nos
resultados intermediários. O procedimento de mostrar o resultado na tela aumenta o
custo computacional (tempo de execução + memória) Quando se executa estes tipos de
comandos e que deseja-se visualizar o valor atribuído em uma determinada variável, ela
poderá ser visualizada digitando simplesmente o seu nome, exemplo:
>> total
total = 360
>>
Além das precedências existentes entre os operadores (+, −, ∗, /,) , pode-se usar ainda
parêntesis para alterar a ordem de operação, sendo os parêntesis mais internos avalia-
dos antes dos mais externos.
CAPÍTULO
3
Variáveis
Assim como em outros programas, o Octave tem certas regras para nomear as var-
iáveis. Estas variáveis devem ser nomes iniciados por letras e não podem conter espaços
nem caracteres de pontuação. Além do que o Octave distingue letras maiúsculas de
minúsculas.
Algumas variáveis já possuem um significado predefinido no Octave (palavras chaes),
não podendo estas serem utilizadas para uma outra finalidade que não seja a sua
própria. Algumas destas são:
• pi - número pi.
• eps - menor número tal que, quando adicionado a 1, cria um número maior que 1
no computador.
Todas as variáveis, com excessão das predefinidas, podem ser renomeadas ou atribuído
a elas qualquer valor, a todo instante.
Caso o usuário queira vizualizar as variáveis declaradas, apagar alguma delas, ou
apagar todas elas, basta que se digite os comandos:
9
10 CAPÍTULO 3. VARIÁVEIS
>> 1/3
ans = 0.33333
• format + - Mostra o símbolo + nos elementos não nulos da matriz e deixa em branco
os nulos,
>> x=[2,5,8;5,6,7]
x =
2 5 8
5 6 7
>>
Ou
2 5 8
5 6 7
>>
Caso o usuário queira criar uma matriz sem que ela seja mostrada na tela, basta
colocar apenas ’;’ no final, como por exemplo:
>> x=[2,5,8;5,6,7];
>>
Estes três casos fornecem o mesmo resultado, que é o de armazenar estes elementos
em forma de matriz (2 linhas por 3 colunas) numa variável cujo nome é ’x’.
Para gerar uma matriz com elementos igualmente espaçados, utiliza-se o seguinte
comando:
11
12 CAPÍTULO 4. MATRIZES E VETORES
>> 0:2:10
ans =
0 2 4 6 8 10
>>
O Octave possui ainda funções para geração de matrizes especiais, tais como:
>> I=eye(3)
I =
1 0 0
0 1 0
0 0 1
>>
>> Uns=ones(3)
Uns =
1 1 1
1 1 1
1 1 1
>>
>> Z=zeros(3)
Z =
0 0 0
0 0 0
0 0 0
>>
>> Aleat=rand(3)
Aleat =
>>
4.2. COMO DELETAR UMA LINHA OU UMA COLUNA DE UMA MATRIZ 13
C =
2 5 8 4
8 9 7 6
3 15 12 11
>>
>> C(3,:)=[]
C =
2 5 8 4
8 9 7 6
>> C(:,2)=[]
C =
2 8 4
8 7 6
>>
2 3 4
5 6 7
>> B(1,2)
ans = 3
>> B(2,2)
ans = 6
>> B(1,:)
ans =
2 3 4
>> B(:,2)
14 CAPÍTULO 4. MATRIZES E VETORES
ans =
3
6
>> B(:,1:2)
ans =
2 3
5 6
>>
Observe que:
• B(1,2), este comando fornece o elemento da linha 1 e coluna 2;
• B(:,1:2), este comando fornece os elementos de todas as linhas das colunas 1 até a
2.
5 6 7
5 8 9
>> B=[A,[15;12]]
B =
5 6 7 15
5 8 9 12
5 6 7 15
5 8 9 12
16 17 18 19
>>
5 6
4 3
>> B=[5;3]
B =
5
3
4 -3
7 8
>> A+C
ans =
9 3
11 11
>> 4*B
ans =
20
12
>> A*C
ans =
62 33
37 12
>> C^2
ans =
-5 -36
84 43
>> C.^3
ans =
16 CAPÍTULO 4. MATRIZES E VETORES
64 -27
343 512
>> (A*C)^2
ans =
5065 2442
2738 1365
>> (A+C)*B
ans =
54
88
>>
>> x=-4
x = -4
>> y=-20
y = -20
>> t=5
t = 5
>> k=lcm(x,y,t)
ans = 20
>> z=atan(k)
z = 1.5208
>> z_graus=(k*180)/pi
z_graus = 1145.9
>> anglo_efetivo=1145.9/360
anglo_efetivo = 3.1831
>>who
t x y z k z_graus
>>
17
18 CAPÍTULO 5. FUNÇÕES
• cos(x) - cosseno de x.
• sin(x) - seno de x.
• tan(x) - tangente de x.
5.2 M-arquivos
As funções podem ser trabalhadas de duas formas, uma delas é programar a função
no prompt do Octave e utilizá-la, ou programar e salvá-la em um arquivo como a ex-
tensão ".m"(recurso este conhecido como programação em lote, ou script(roteiro)), ao
qual deve ser feito num editor de texto puro, ou seja aquele que salva o arquivo em
código ASCII. Neste segundo tipo, para que a versão Windows do Octave, reconheça es-
tas funções, deve-se salvar estes programas na pasta que o programa cria no momento
de instalação, cujo endereço é:
Neste caso, depois de ter salvado estas funções neste arquivo, para utilizá-las, basta
apenas que se digite no prompt do Octave o nome e os parâmetros, ao qual foi salvo a
função.
Exemplos:
Para que o Octave reconheça esta função, cujo programa foi feito em um outro
software, ela deverá ter sido salva na pasta octave_files com extensão ".m", na qual
o nome da função tem que ser "f2.m". E para executar esta função, basta digitar-se no
prompt do Octave da seguinte maneira:
5.3. SOLUÇÃO DE SISTEMAS LINEARES AX=B 19
>> y=f2(3)
y = 0.19422
Outro exemplo:
function X=fourier2(x,N)
% Calcula a N pontos da transformada de fourier de uma sequencia(vetor x)
% implementado com 1 loop ’for’
X=zeros(1,N);
L=length(x);
for k=0:(N-1)
w= -j*2*pi/N*k;
X(k+1)=sum(x .* exp(w .* (0:(L-1)) ) );
end
Neste caso, a função deverá ser salva como "fourier2.m", e para executá-la, basta
digitar:
>> x=fourier2(2,4)
x =
2 2 2 2
>>
>> A=rand(3,3)
A =
0.16808 0.53037 0.13528
0.84642 0.09465 0.97188
0.77846 0.88364 0.02581
>> b=rand(3,1)
b =
0.82943
0.59267
0.31844
>> x=A\b
x =
-1.44673
1.58480
1.71545
>>
x=A\b, é conceitualmente equivalente a usar (A−1 )b, o que da a resolução deste tipo
de problema.
20 CAPÍTULO 5. FUNÇÕES
Onde f do lado direito da expressão, é o nome da função a ser chamada para calcu-
lar o valor do integrando(deve ter a forma y = f (x), sendo y e x escalares); os argumentos
a e b são os limites da integração(que podem ser +-infinito); o argumento tol é um ve-
tor que especifica a precisão desejada do resultado; e o argumento sing é um vetor de
valores em que o integrando é conhecido como singular. Quanto ao lado esquerdo da ex-
pressão, têm-se que n é o resultado da integração e ier é um código de erro(0 indica que
a operação foi bem sucedida); o valor nf un indica quantas iterações foram necessárias;
e o valor de err é uma estimativa do erro na solução. Por exemplo:
Seja:
Z 3 µ ¶q
1
xsen |1 − x| dx
0 x
v = 1.9819
ier = 1
nfun = 5061
err = 1.1522e-07
>>
Obs: Embora prescindível para o cálculo de quad, a forma ponto dos operadores usa-
dos no GNU/Octave torna mais fácil criar um conjunto de pontos para gerar gráficos(pois
isso possibilita utilizar argumentos vetoriais para produzir resultados vetoriais).
22 CAPÍTULO 5. FUNÇÕES
CAPÍTULO
6
Gráficos
>> t = 0:0.1:6.3;
>>plot(t, cos(t), "-b;cos(t);", t, sin(t), "+3r;sen(t);");
Os termos entre aspas indica o formato da linha e a legenda a ser apresentada pelo
gráfico. No exemplo indicamos que a curva do cosseno deve ser sólida (-), na cor azul (b)
e na legenda a curva é identificada por cos(t) (;cos(t);). No caso do seno indicamos que a
curva será indicada pelo sinal de + a cada três pontos, na cor vermelho (r), com legenda
sen(x) (Ver Figura 6.1).
Comando gplot
Você pode plotar expressões mútiplas com um simples comando pela separação
delas por vírgulas. Cada expressão deve ter seu próprio ajuste de requisitos. A expressão
para ser plotada não deve conter qualquer matriz literal([1,2;3,4]), por exemplo:
• Comando: data with lines, Desenha o gráfico como uma linha reta.
23
24 CAPÍTULO 6. GRÁFICOS
1
cos(t)
sen(t)
0.8
0.6
0.4
0.2
-0.2
-0.4
-0.6
-0.8
-1
0 1 2 3 4 5 6 7
>> x=[1 2 3]
x =
1 2 3
>> y=[2 5 6]
y =
2 5 6
>> z=[x;y]
z =
1 2 3
2 5 6
>> gsplot z
Gráfico 3D
blank;
all;
north;
south;
east;
west.
• Comando: subplot(rows,cols,index)
Rows, número de linhas no subplot grid;
Cols, número de colunas no subplot grid;
Index, index de subplot onde se faz a proxima figura.
Outra forma é usar o comando mesh em que temos que definir a malha, pelo co-
mando meshgrid para obter os pontos de plotagem
Exemplo de gráficos em 3D:
>> [x,y]=meshgrid(-4:0.6:4,-3:0.6:3);
>> z=x.^2+y.^2;
>> grid;
26 CAPÍTULO 6. GRÁFICOS
Exemplo de Mesh
line 1
eixo z
25
20
15
10
3
2
1
-4 0
-3
-2 -1 eixo y
-1
0
1 -2
eixo x 2
3
4 -3
y =
4.00000 1.10000 4.00000
. . .
. . .
. . .
0.99999 0.97619 1.06809
29
30 CAPÍTULO 7. EQUAÇÕES DIFERENCIAIS
É usada para resolver equações diferenciais algébricas. Esta função Retorna uma
matriz de estados e sua primeira derivada em relação a t. O 1¦ elemento de t corresponde
ao estado inicial x0 e a derivada xdot0 .
O primeiro argumento, fcn, é uma string que nomeia a função a ser chamada para
computar o vetor de residuos para o ajuste de equações. E deve ter a seguinte forma:
res = f(x,xdot,t)
Neste capítulo são encontradas funções para cálculo de média, desvio padrão, entre
outras.
Função: mean(x)
Se x é uma matriz, esta função irá computar o significado para cada coluna e
retorná-las em um vetor linha.
Função: median(x)
Função: std(x)
Função: cov(x,y)
Função: corrcoef(x,y)
31