Introduçã o ão MATLAB e Octave O MATLAB é o software mais usado em engenharia para computação numérica. Foi desenhado como um programa interativo especialmente optimizado para calcular operações numéricas em vectores e matrizes, mas tem agora associado um conjunto enorme de pacotes ( "Toolboxes") com aplicação para os mais diversos campos de engenharia. (Simulink, Control System, Quimical, etc, etc) Tem ainda possibilidade de fazer cálculo simbólico, mas nisso é muito inferior ao software "Mathematica". O MATLAB é no entanto um produto comercial e dispendioso, com custos que crescem exponencialmente em função do pacotes que se adquirem em separado. O Octave é versão Open Source do MATLAB e tem um desenvolvimento activo, tendo também associado um conjunto muito diverso de "packages" mais ou menos inspirados nas Toolboxes do Matlab. Ambos os programas foram inicialmente desenvolvidos como aplicação em modo "command line" interactiva. Mas já há mais de uma década que o MATLAB funciona em ambiente gráfico, embora variando o seu aspecto gráfico varia muito de Windows, Linux ou MAC OS X. O Octave mantém-se essencialmente como uma aplicação em modo terminal (que tem ainda tem muitos adeptos), mas em Windows tem um terminal mais agradável que o vulgar command line do DOS/Windows. Os códigos e scrips feitos (ficheiros com extensão.m ) para o MATLAB versão base correm, em principio, em Octave sem grandes modificações, com excepção das instrucções para produzir gráficos e "input/output para ficheiros). Uma das razões é porque o Octave utiliza o software independente "Gnuplot" para produzir os gráficos, pois é o standart de facto na comunidade Linux/Open Source ( O Gnuplot é provavélmente o melhor e mais completo software generalista para produzir gráficos). Instalação O Matlab pode ser instalado em computadores que tenham acesso à rede do IST. O site com as instrucções está em (necessita auntenticação): https://delta.ist.utl.pt A desvantagem é que o software só corre quando existe uma ligação activa ao Servidor de licenças, do IST, que implica estar ligado à rede interna, ou criar uma VPN. Quanto ao Octave, a forma "pura & dura" é, como qualquer aplicação open-source que se preze, necessário fazer a descarga do código fonte e compilar tudo. Mas não é tarefa fácil, pois há muitas dependências de bibliotecas externas e o M$ Windows nem sequer tem compilador instalado à partida. O mais habitual é utilizar as versão já compiladas.
Muitas distribuições Linux permitem instalar com os utilitários habituais de gestão de Linux packages (eg. Em RedHat/Fedora: "yum install octave", Em Suse: "yast ", Ubunto: "apt-get", etc) Para Windows no site http://octave.sourceforge.net existem os ficheiros de instalação. Para o MS Windows as instrucções estão descritas em http://wiki.octave.org/octave_for_windows e os ficheiro de instalação do programa já compilado e os pacotes mais utilizados em http://sourceforge.net/projects/octave/files/octave%20windows%20binaries/ (escolher a versão mais recente de Octave 3.x.x for Windows MinGW installer ) Para o MAC OX as instruções estão em: http://wiki.octave.org/octave_for_macos_x Existem binários actuais para o OSX 10.9.1 (Mavericks). A alternativa, que dá um pouco mais de trabalho, é compilar/instalar através de um Package Managers (Fink, MacPorts ou HomeBrew). Para isso é necessário instalar no MAC o pacote de software Xcode da Apple https://developer.apple.com/xcode Primeiro contacto. Depois de correr o programa MATLAB ou Octave, aparece sempre uma janela terminal onde se pode introduzir comandos. Em primeiro lugar pode-se usar como calculadora, com expressões directas, com sintaxe parecido com o "C": >>2+4 (Enter) >>sin(pi/3) * exp(3) >>exp( i*pi) Ajuda. A ajuda com os comandos pode ser obtida no terminal com >>help comando Variavéis. As variaveis são criadas no momento que se iguala a um valor constante ou uma expressão. Não é preciso dizer qual o tipo (integer, float char*), mas o sistema é "case-sensitive" pelo que "Area" nao é o mesmo de "area": >>A=25.8, st = "linha de texto; numcomplex = 2.5 + 3 i
Quande se finaliza as expressões com ";" não são mostrados o resultado da operação. É bastante útil quando se usa vectores com milhares de elementos... (experimente: >> x = 1:1000000) O simbolo de Comentário é o "%". Tudo à direita de "%" é ignorado pelo Octave O comando "who" lista as variáveis que já foram utilizadas na sessão actual. O comando "clear A" apaga a variável "A". Fazendo "clear" a limpeza é mais radical! Matrizes Os vectore e matrizes são a verdadeira especialidade do MATLAB/Octave: vectorlinha = [ 1 2 3 ] vectorcoluna = [ 1; 2; 3; ] matriz =[ 1 2; 3 4] O operador "*" executa o producto vectorial ou matricial: >>vectorlinha * vectorcoluna % produto interno ans = 14 "+" e "-" fazem as habituais operações de soma, elemento a elemento ( atenção às dimensões das matrizes) Se quisermos multiplicar elemento a elemento usa-se ".*": >> vectorlinha.* vectorlinha ans = 1 4 9 O vectores podem ser automaticamente construídos: >> time = 1:10:50 time = 1 11 21 31 41 ou x = linspace(1,2,5)
x = 1.0000 1.2500 1.5000 1.7500 2.0000 Os elementos das matrizes/vectore são acedidos por >>vectorlinha(2) ans = 2 >> vectorlinha(2:end) ans = 2 3 Atenção que o primeiro elemento dos vectores/matrizes é o indice "1 e não o zero, como na linguagem "C" As funções aplicam-se aos elementos das vectores/ >>Amp = exp(time) >>Amp = 2.7183e+000 5.9874e+004 1.3188e+009 2.9049e+013 6.3984e+017 Os comandos podem ser agrupados e guardados em ficheiros ("scripts") com extensão "*.m". Quando se encontram na directoria de trabalho para os executar basta escrever o nome respectivo As funções (subrotinas) são normalmante guardadas em ficheiros "*.m" com o mesmo nome da função. Exemplo: escrever no ficheiro "max_num.m" ( Por exemplo o programa "Notepad++" reconhece a linguagem Matlab/Octave) % function M = max_num(a,b) if a>=b M = a;
else M = b; end >> max_num(12.3, 4) ans = 12.3000 Na perpectiva do Controlo e Aquisição de Dados, a simulação de valores de um sinal amostrado x[n] = x(n*tacq), n inteiro, torna-se bastante simples: >>Tacq=1e-3; % periódo de aquisiçao >>time = (1:256) * Tacq; % vector tempo >> Fsinal = 200; % Freq. De sinal >> sinal = 10 * sin( 2 * pi * Fsinal* time + pi/2 ); >>tsub=time(1:8:end);% tempo subamostrado >>ssub=sinal(1:8:end);% sinal subamostrado >>plot(tsub,ssub) Gráficos: >> plot(time, sinal) >> hold on % Para sobrepor gráficos >> plot(time, sinal/2, 'r') % linha a vermelho Analise espectral: >>espectro = fft(sinal); % optimizado para series de N^2 valores (128, 256, 512, etc) >>w= (1:256)/Tacq; % gama de freqeuncias >> plot(w,log10(abs(espectro)))
Filtros digitais; Ver por exemplo. http://www.tty1.net/blog/2009-09-12-filters-with-gnu-octave_en.html