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:
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)
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:
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:
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:
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: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 Observe o método: 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: e este exemplo tem duas vantagens: 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 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:
Observe que o vetor x não foi modificado, poderia ter sido se eu tivesse executado x = x'.
Agora: é 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 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: 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: 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 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).
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.