Que é Octave?
A melhor resposta para esta pergunta tem que
ser obtida na página do Octave.
Eu vou, entretanto, a partir de hoje redicionar a disciplina para conduzí-l@s
a domínar
este programa e tentar chegar o mais rápido possível às suas funções
específicas para resolver problemas de programação linear.
Octave é um ambiente de trabalho para resolver problemas lineares - de
álgebra linear computacional. Como é um ambiente para resolver problemas
lineares, então oferece ferramentas para programação linear como
consequência.
Vamos, então, estudar Octave.
Embora eu já tenha feito referência a alguns comandos deste programa, eu
vou adotar o ponto de vista de começar do começo.
Octave é semelhante, não igual,
ao Scilab.
As diferenças são pequenas no
que diz respeito à sintaxe, há diferenças maiores quanto aos pacotes
(rotinas, ou módulos) que complementam estes programas.
Neste tópico, com respeito aos módulos, há diferenças fundamentais
entre ambos os programas e é aconselhável que, num certo ponto, você
analise estas diferenças para escolher um ou outro.
Eu farei esta análise mais a frente.
Você pode baixar o Scilab da página indicada acima, onde você pode fazer
uma visita ao projeto e ver algumas de suas funcionalidades e caminhos
futuros o que inclui possibilidades de fazer pesquisas dentro do projeto,
ou ir
direto à página de download.
Além de Octave e Scilab há outros programas que funcionam como um ambiente
para Álgebra Linear e inclusive há um conhecido ambiente comercial a que não
farei referência.
Todos eles usam uma mesma sintaxe que foi definida pelo programa comercial
e seguida pelos outros e os arquivos, programas, dados, de um são lidos
ou convertidos para os outros, desta forma,
dominando um deles, você usa qualquer dos demais.
O óbvio primeiro passo, para você, é
adquirir o programa, obtê-lo gratuitamente, porque não será suficiente
me ouvir falar sobre o programa.Vou mostrar a tela inicial do
programa onde você vai poder encontrar o página do octave onde você poderá
ir buscá-lo.
Se você abrir Octave:
- tarcisio@cap01:~$ octave
- GNU Octave, version 3.0.1
- Copyright (C) 2008 John W. Eaton and others.
- This is free software; see the source code for copying conditions.
There is ABSOLUTELY NO WARRANTY; not even for MERCHANTIBILITY or
FITNESS FOR A PARTICULAR PURPOSE. For details, type `warranty'.
- Octave was configured for "i486-pc-linux-gnu".
- Additional information about Octave is available at http://www.octave.org.
- Please contribute if you find this software useful.
For more information, visit http://www.octave.org/help-wanted.html
- Report bugs to (but first, please read
http://www.octave.org/bugs.html to learn how to write a helpful report).
- For information about changes from previous versions, type `news'.
- octave:1>
E possivelmente o comando mais importante para quem estiver começando seja
octave:1> help
e você vai ver uma sucessão de telas (eu vou mostrar apenas a primeira)
- Help is available for the topics listed below.
Additional help for built-in functions and operators is
available in the on-line version of the manual. Use the command
`doc ' to search the manual index.
- Help and information about Octave is also available on the WWW
at http://www.octave.org and via the help@octave.org
mailing list.
*** operators:
- ! # && ) + - .* .^ ; <> > \ | ~=
- != % ' * ++ -- .** / < = >= ] ||
- " & ( ** , .' ./ : <= == [ ^ ~
*** reserved words:
- break endfunction return
- case endif static
- catch endswitch switch
- continue endwhile try
- do for until
- else function unwind_protect
:
ao final você pode ver os "dois pontos"
indicando que o sistem aguarda o uso da barra
de espaços para seguir mostrando as diversas
páginas do help.
Esta é uma forma de help que é útil apenas para
descobrir uma palavra
chave cuja grafia você não lembra para em seguida digitar
help palavra_chave
Você sai do help digitando "q".
Usando
help function
você vai ter uma explicação sintética de como usar a palvra chave
function que serve para iniciar a definição de uma função
em Octave:
- octave:2> help function
- *** function:
- -- Keyword: function OUTPUTS = function (INPUT, ...)
- -- Keyword: function function (INPUT, ...)
- -- Keyword: function OUTPUTS = function
- Begin a function body with OUTPUTS as results and INPUTS as
parameters.
- See also: return.
O sistema de ajuda, help, é muito sumário, típico dos que podemos encontrar
nos sistemas unix de que Linux é um exemplo.
Serve somente para quem já tem
alguma experiência. É por esta a razão que eu estou fazendo este manual
para o Octave. Uma outra saída seria ler o próprio manual do programa que
pode ser encontrado na página
http://www.octave.org
Tipo básico de dado
Este é um ponto essencial para aprender a trabalhar com Octave, o tipo
básico de dados: vetor.
Praticamente todas as rotinas do programa usam vetor como tipo de dados e
este ponto torna estes programas para Álgebra Linear diferentes dos outros
programas para Cálculo Numérico.
Álgebra Linear é a parte da Matemática que descreve a estrutura dos
espaços vetoriais cujo elemento básico é um vetor.
Como os vetores são formados de "coordenadas" numéricas, então os números
também fazem parte dos tipos básicos de dados, mas Octave está voltado
para operar com vetores e não com números.
Ma isto não significa que Octave não opere com números, experimente:
- octave:1> x = 4*atan(1)
- x = 3.1416
octave:2> y = sqrt(2)
- y = 1.4142
- octave:3> x*y
- ans = 4.4429
- octave:4>
ou faça as contas que você desejar, octave funciona também como uma máquina de
calcular.
Vetores
A forma mais simples de criar um vetor é:
x = [-3:0.1:3]
e você também pode fazer
x = [-3:0.1:3];
Use primeiro a segunda forma e depois a primeira para ver a diferença
que é muito importante na continuação dos trabalhos, terminar com ";"
faz com que Octave trabalhe silenciosamente, sem saída de dados.
.
Uma função importante é:
length(x)
E Octave vai responder indicando qual é a dimensão do vetor:
- octave:5> length(x)
- ans = 61
Observe que ans
é uma variável onde Octave guarda a última
resposta que lhe tiver dado. Vale a pena se lembrar disto quando você
repetir algum resultado ou usar um resultado anterior em
uma nova operação.
Definir um vetor com o método que usei acima nem sempre é a melhor
maneira uma vez que não é fácil obter um vetor com a dimensão necessária.
A forma mais comum consiste em usar o operador []
- octave:1> x = [3,4,5,6,7]
- x =
- 3 4 5 6 7
octave:2> length(x)
ans = 5
octave:3>
Defini um vetor de dimensão 5.
Vetor é um caso particular de matriz esta é também a forma de
definir uma matriz
- octave:2> A = [1,2,3,4,5;0,1,2,3,4;0,0,1,2,3;0,0,0,1,3;0,0,0,0,1]
- A =
- 1 2 3 4 5
- 0 1 2 3 4
- 0 0 1 2 3
- 0 0 0 1 3
- 0 0 0 0 1
- octave:2>
Observe o método:
- cada linha da matriz está separada da
seguinte com ";"
- e as entradas, dentro de cada linha
com ",".
Se a matriz for retângular, estiver bem definida, o resultado
é aparecer a matriz como resposta.
Uma operação natural do Octave é multiplicar matrizes, portanto
podemos efetuar:
- octave:3> A*x
- error: operator *: nonconformant arguments (op1 is 5x5, op2 is 1x5)
- error: evaluating binary operator `*' near line 3, column 2
e este exemplo tem duas vantagens:
- Mostra que Octave sabe reagir se você tentar multiplicar matrizes
incompatíveis para a multiplicação, como é o presente caso,
uma matriz 5x5 somente pode ser multiplicada à direita por
uma matriz 5xn e como o vetor x é uma matriz 1x5 então estamos
diante de uma mulplicação impossível;
- A outra vantagem é lhe mostrar que nem sempre a mensagem sobre os
erros é compreensível. Neste caso diz
" nonconformant arguments " significando que os argumentos
passados ao operador "*" são incompatíveis.
Aqui temos uma outro conceito em Álgebra Linear que se adiciona à nossa
experiência com operações:
a multiplicação de matrizes não é comutativa.
Com as matrizes que acabei de definir, podemos efetuar
- A*x - ilegal
- x*A - legal - uma matriz 1x5 multiplicada por uma matriz 5x5.
- um exemplo de que A*x é diferente de x*A.
Entretanto é possível que eu precise multiplicar A à direita por um vetor
e para isto existe uma operação que transforma o vetor-linha x em
vetor-coluna, a transposta cujo símbolo é o apóstrofe:
- octave:4> x'
- ans =
- 3
- 4
- 5
- 6
- 7
- octave:5>
Observe que o vetor x não foi modificado, poderia ter sido se eu tivesse
executado x = x'.
Agora:
- octave:6> A*x'
- ans =
- 85
- 60
- 38
- 27
- 7
octave:7>
é uma operação legal sem que x tenha sido modificado.
As matrizes são "multi-números" ou "números multi-dimensionais", em vez
de serem um único número, elas são uma tabela de números em que a posição
tem um significado.
Os números complexos são um exemplo de multi-números,
eles tem duas componentes que permitem que um número complexo guarde
duas informações: módulo e ângulo.
Qualquer vetor de dimensão maior ou igual a 2 guarda estas duas informaçõe,
pelo menos, módulo e ângulo.
É comum guardarmos o nome
matriz para as tabelas retângulares com várias linhas cada uma contendo
várias colunas. Mas um vetor-coluna, uma matriz que tem várias linhas e
uma única coluna, 1xn ou um vetor-linha, uma matriz que tem várias colunas e
uma única linha, mx1, são também matrizes e Octave trata todas da mesma
forma como foi visto acima, com o operador [] para criar matrizes.
Primeira operação com matrizes
O primeiro trabalho importante com matrizes é sintetizar e resolver sistemas
de equações lineares ou desigualdades.
Apenas para estabelecer a linguagem de comunicação, um sistema de equações
lineares é uma expressão como
- a11 x1 + a12 x2 = b1
- a21 x1 + a22 x2 = b2
por exemplo
Talvez você não reconheça o exemplo, sistemas de equações vem com "chaves" que não sei
criar na página (se alguém souber, me ensine).
Vejamos como Octave entende um sistema de equações. Primeiro vou definir as matrizes
deste sistema, uma matriz 2x2, a matriz dos coeficientes e uma matriz 2x1, a matriz de
dados:
- octave:1> A = [1,2;3,5]
-
- octave:2> b = [1;3]
- b =
- 1
- 3
- octave:4>
Este sistema, ou melhor, esta matriz 2x2 e a matriz de dados 2x1 são o que Octave
deve receber para resolver um problema linear como
Ax = b
em que x é um vetor
(x1 , x2)
a incognita da equação. O vetor x é desnecessário para na representação do problema
como podemos ver Octave resolvendo este problema sem usar o
vetor-incógnita:
- x = A\b
- x =
- 1.0000e+00
- 1.6653e-16
Vou interpretar os cálculos acima.
Defini uma matriz de coeficientes, A.
Defini uma matriz de dados, b.
E calculei x = A\b obtendo do vetor
- x =
- 1.0000e+00
- 1.6653e-16
Resolvi assim o problema Ax = b, e agora posso verificar a solução
calculando Ax. O resultado deve ser b: (não se esqueça, em Octave deve ser
A*x e não Ax. Mas se você errar, Octave, gentilmente, vai lho dizer).
- octave:8> A*x
- ans =
- 1
- 3
- octave:9>
Agora experimente com matrizes maiores, ou com sistemas de equações com uma quantidade
maior de dados. Pegue alguns dos exemplos das listas de exercícios e aprenda a resolver
sistemas de equações com Octave. E pode usar sistemas grandes que Octave aguenta.
Lendo e gravando dados
Uma das ações mais importantes consiste na leitura e na gravação
de dados para evitar de lançar dados on-line. Guardar dados em arquivos
ou recuperar dados de arquivos. Octave precisa que você se comunique
com ele uma sintaxe exata.
Uma forma de descobrir a sintaxe consiste em criar uma matriz ou alguns
vetores e gravar o arquivo com o comando
save "dados"
Este comando vai fazer com que Octave crie, no diretório corrente um
arquivo "dados" contendo as variáveis que estiverem na memoria.
É um arquivo do tipo texto que você pode ler com um editor e fazer
alterações no mesmo.
O mais importante, aprender a sintaxe que necessária para se comunicar
com Octave.
Faça isto agora,
crie uma matriz pequena, 3x3, digamos e a identifique com A:
grave no arquivo "dados"
Leia este arquivo com um editor de textos
A primeira linha é uma identificação do arquivo como tendo sido criado
por Octave, ela é obviamente opcional. Se seguem linhas identificando
o tipo de dados da variável e finalmente as entradas da matriz, separadas
apenas por espaços com "fim de linha" ao final de cada linha.
Observe que neste momento já posso fazer um pequeno programa em C para
fazer leitura de dados de uma matriz, gravar a matriz em um arquivo
e pedir que Octave leia a matriz.
Falei um programa em C, mas pode ser qualquer dispositivo que crie uma
matriz, um sensor por exemplo, apenas programado para criar dentro da
sintaxe do Octave. Qualquer outra linguagem de programação do seu
interesse ou gosto.
Já temos material suficiente para uma lista de exercícios!
Exportação da folha de trabalho
Esta sessão que você esta acompanhando, aqui na página, em que estou apresentando
o Octave trabalhando, pode ser memorizada em um arquivo. Isto é importante porque
você não precisa ficar trabalhando indefinidamente. Pode começar um trabalho, gravar,
e depois, ao retornar, chamá-lo de volta para a memória.
Depois eu vou retornar a este assunto. Também estou aqui abrindo a possibilidade
para quem quiser me ajudar na produção deste tutorial, ou manual do Octave. Se você
souber como fazer alguma coisa, não dúvide em me comunicar para que eu inclua a sua
participação no trabalho e seu nome como co-autor.
Possivelmente Octave sabe exportar o conteúdo que estiver na memória para um
documento em LaTex ou TeX, eu ainda não sei fazer isto, mas se houver esta
possibilidade, eu vou aprender e mostrar aqui como fazer. Por enquanto vou
me restringir à apresentação como estou podendo fazer.