Programa de Educação Tutorial Mini-curso Octave/MATLAB PET Engenharia de Computação 03/07/2013 1
Sumário Sobre as Ferramentas Operações Básicas e Funções importantes Gráficos Arquivos, scripts e criação de funções Funções Básicas e Úteis
Introdução MATLAB e Octave são ferramentas para uso de processamento numérico. O MATLAB em especial é um dos programas mais utilizados em engenharia para simulações e análises de sistemas reais. Possuem recursos de programação com uma linguagem procedural de alto nível. MATLAB: http://www.mathworks.com Octave (windows): http://octave.sourceforge.net/ Octave (linux): digite sudo apt-get install octave no seu terminal, informe sua senha e prossiga o download. Após finalizado, digite octave no terminal 3
Vantagens Octave Software gratuito Mais leve Open source Imensa compatibilidade com MATLAB
Vantagens MATLAB Aplicações vão além de cálculos matemáticos Velocidade de processamento super rápida (funções próprias bem otimizadas) Dificilmente encontrará-se bugs no programa
Escrita de Código O código escrito em MATLAB funcionará* no Octave. Entretanto, nem todo código escrito no Octave funcionará no Matlab. *A sintaxe dos códigos são as mesmas, porém há funções exclusivas do MATLAB. Indicamos utilizar o software adotado pela professora.
Exemplos: MATLAB não aceita áspas duplas, apenas simples Operadores lógicos do MATLAB: Or - e And - & e && Not - ~ O octave aceita esses operadores, assim como os padrões de C. Também aceita aspas duplas ou simples
Operações básicas 3 + 8 (soma) 5 2 (subtração) 4 * 2 (multiplicação) 4 / 2 (divisão direta) 3^2 (potenciação) 2 \ 4 (divisão inversa)
Variáveis x = 4 + 5 X = 3/2 x = 3 + 3 Apenas duas variáveis foram criadas (X e x).
Após cada operação o resultado é armazenado em uma variável chamada ans. x = ans*4; Pode-se utilizar ; após cada ação. Isso fará com que a resposta não seja impressa na tela.
Números Complexos A estrutura de um complexo é a + i*b, onde i = sqrt(-1) z = 4 + i*3; real(z) imag(z) abs(z) angle(z) (é dado em radianos)
Vetores e Matrizes Devem ser declarados entre colchetes. Na definição de vetores e matrizes, um espaço em branco ou uma vírgula separam elementos de colunas diferentes numa mesma linha. O ponto-e-vírgula separa elementos de linhas diferentes numa mesma coluna.
V = [1 2 3] é o mesmo que V = [1,2,3] e ambos são vetores linhas. v = [1;2;3] é um vetor coluna A = [1 2 3; 4 5 6; 7 8 9] é uma matriz 3x3
Operações Pode-se fazer operações de soma, subtração, divisão e multiplicação. Para fazer uma operação elemento a elemento utiliza-se. antes do sinal de operação Exemplo: [1 2 3].*[3 2 1] = [1x3 2x2 3x1] = [3 4 3]
Acesso a valores em vetores e matrizes Acesso de elementos: V = [1 2 3] V(1) acessa o primeiro elemento V(2) acessa o segundo elemento V(3) acessa o terceiro elemento Note que o índice do primeiro elemento é 1 e não 0 como na maioria das linguagens de programação
Semelhantemente em matrizes, A = [1 2 3; 4 5 6; 7 8 9] A(1,2) é 2 >>A(1,2) = 5; Faz o elemento da primeira linha e segunda coluna (2) valer 5.
A(:,1) pegará todos os elementos da primeira coluna A(1,:) pegará todos os elementos da primeira linha A(i:j,k:l) retornará uma submatriz da matriz A
Forma útil de definir vetores vet = 1:10 é o mesmo que vet = [1 2 3 4 5 6 7 8 9 10] Vet = 1:2:10 é o mesmo que Vet = [1 2 4 6 8 10] V = linspace(0, 20, 5) Cria uma vetor de tamanho 5 com números linearmente espaçados de 0 a 20
Funções úteis size(a) Tamanho da matriz det(a) Calcula o determinante length(a) Tamanho do vetor [i,j] = find(a) Retorna índices de valores não nulos na matriz max(a) maior valor de vetor ou maior da coluna em matriz min(a) menor valor de vetor ou menor da coluna em matriz
inv(a) Calcula a inversa de A ones(i,j) Matriz de dimensão i x j de ums eye(i,j) Matriz identidade i x j zeros(i,j) Matriz de zeros i x j A Trasposta de A sort(a) Ordena A (matrizes são ordenadas por colunas) diag(a) retorna a diagonal
Isempty(x) - Verdadeiro para matrizes vazias Isequal(x, y) - Verdadeiro se matrizes forem iguais Isprime(x) - Verdadeiro para primos Isletter(x) - Verdadeiro para letras do alfabeto
Operadores relacionais e lógicos Como dados de entrada de expressões relacionais e lógicas, qualquer número diferente de zero é Verdadeiro e o zero é Falso A saída produz 1 para Verdadeiro e 0 para Falso Operadores relacionais: <, <=, >, >=, ==, ~= Operadores lógicos: & ou && (AND), ou (OR), ~ (NOT)
xor(x,y): Retorna 1 se x ou y for diferente de zero e 0 se ambos forem Falso ou Verdadeiro any(x): Retorna 1 se algum elemento difere de zero all(x): Retorna 1 se todos os elementos diferem de zero
Ajuda Comando help: Apresenta a descrição da função. Ex: help sin Comando lookfor: Procura nas funções do Octave e do MATLAB, alguma que possua em sua descrição a palavra procurada. Ex: lookfor sine Para sair do help digite 'q'.
Scripts Arquivo de extensão.m contendo comandos do MATLAB/Octave Comandos executados em série Para chamar o script, basta digitar o nome do arquivo nas linhas de comando sem a extensão
A função disp imprime algo na tela, podendo ser o valor de uma variável ou um comentário echo define se as linhas digitadas devem ser impressas ou não, inclusive comandos com ; e comentários input solicita ao usuário que forneça algum dado de entrada
Entrada de dados por arquivo importdata( arquivo ) - Faz leitura dos dados de um arquivo e em forma de uma matriz Exemplo: dados = importdata( entrada.txt ) ou entrada = entrada.txt dados = importdata(entrada)
Utilizando a função fscanf - Semelhante com leitura de dados em C - Necessita de abrir o arquivo com a função fopen, assim como em C
Forma de leitura Matriz = fscanf (fid, template, size) fid é o arquivo a ser lido template é o formato da leitura size é a quantidade de dados a ser lido Arquivo a ser lido: fid = fopen( entrada.txt, r ) - o r significa read (leitura) - para escrita usa-se w (write)
Template de leitura inteiros = %d caracter = %c float = %f notação decimal = %e (1.434e+03) misto de float e decimal = %g (recomendo sempre usar este)
Tamanho da leitura Size pode ser especificado como: Inf lê o máximo que puder e armazena em um vetor coluna n lê n elementos armazenando em um vetor coluna [n Inf] lê o máximo que puder armazenando em uma matriz de n linhas [n n] lê os elementos armazenando em uma matriz n x n
Funções Cada função deve ser criada em apenas um arquivo O nome do arquivo deve ser o mesmo nome da função (com extensão.m) Podem ser utilizadas depois em outros arquivos e outras funções ou chamadas na linha de comando
Podem ter quantos retornos e quantos parâmetros necessários Deve ser seguida uma sintaxe padrão para construção Não precisa declarar os tipos de parâmetros ou retornos
Formato de funções function [a, b, c] = nome (par1, par2,.., parn)
Fluxo de controle If/else for while break case
If/else if <expressão lógica> else end <bloco de comandos> <bloco de comandos> *No Octave pode-se utilizar endif, porém o mesmo não é válido para o MATLAB
while while <expressão lógica> end <bloco de comandos>
for for i = 1:n end <bloco de comandos> *se n = 5, o loop acontecerá 5 vezes
Switch-case u = input( Escreva a unidade de medida: ); switch u case { polegadas, pol } y = x*2.54; case { metros, m } y = x/100; otherwise disp([ unidade desconhecida: u]) end
Medição de tempo de execução tic() começa a contagem toc() finaliza a contagem retornando o valor do tempo desde o último tic() tic() <bloco de comandos> t = toc() A variável t armazenará o tempo levado para executar o bloco de comandos
Armazenagem de dados dir mostra tudo que está em sua pasta atual save <nome_arquivo> salva todas as variáveis e conteúdo do workspace load <nome_arquivo> carrega um arquivo salvo com o comando save whos mostra tudo que há em seu workspace
clear limpa o workspace clc limpa os textos do terminal *Cuidado para não confundir e apagar todo seu workspace
Gráficos plot(x, y) - Plota um gráfico de y em função de x plot(x, y, z, w) - Plota dois gráficos numa mesma figura plot(x, y, 'param') - 'param' define tipo de linha, formato do marcador e a cor do gráfico. Não há ordem específica nem é preciso determinar os três.
semilogx (x, y) - Gera gráficos com y na escala linear e x na escala logarítmica semilogy (x, y) - Gera gráficos com x na escala linear e y na escala logarítmica loglog (x, y) - Gera gráficos com x e y nas escalas logarítmicas surf(x, y, z) ou surf(a) Gera um gráfico de superfície
ezplot('curva',[a,b]) - Plota a curva no intervalo [a,b] polar(ang, f, 'param') - Plota em coordenadas polares uma função f. plot3(x, y, z) - Plota gráficos em 3D contour(z) Plota as curvas de nível da matriz Z
Funções úteis figure( valor ) grid on/off hold on/off legend title( titulo ) xlabel( label ) ylabel( label) axis
Salvando gráfico f = figure() plot(x,y) saveas(f, 'image.png'); No Octave pode-se usar: print desp arquivo.jpg print( arquivo.png )
Parâmetros da função plot plot(x, y, parâmetro ) -opções no MATLAB
-opções no Octave
Resolução de sistemas lineares Forma direta: - temos a seguinte forma: A*x = b - x = inv(a)*b ou x = A\b Decomoposição LU: - [L, U, P] = lu (A)
[lambda V] = eig (A) matriz de autovalores e autovetores poly(a) polinômio característico da matriz
Polinômios Definido como um vetor em que cada posição é um coeficiente, começando com o de mais alta ordem
Operações com polinômios roots(p) retorna as raízes do polinômio p conv(p1,p2) faz a multiplicação do polinômio p1 pelo p2 [p,r] = deconv(p1,p2) armazena a divisão de p1 por p2 em p e o resto em r [r, p, k, e] = residue(a,b) faz a expansão em frações parcias de a/b [a, b] = residue(r, p, k, e) faz o inverso
Ajuste de curva Encontrar a função que melhor se ajusta a um grupo de coordenadas Utiliza o método dos quadrados mínimos - Método muito simples e amplamente utilizado - minimização do erro relativo dos pontos à curva - Tem que fazer muita conta!
polyfit(x,y,n): retorna o polinômio de grau n que se ajusta aos pontos dos vetores dados por x e y poly(vetor) retorna um polinômio cujas raízes são os elementos do vetor polyval(p,x): avalia o polinômio p para cada elemento de x
Integrais definidas e indefinidas O MATLAB pode ser usado para resolver integrais simples, duplas e triplas definidas ou indefinidas O Octave, porém, só resolve integrais indefinidas de polinômios Para encontrar a área de diversos tipos de função existem várias formas, tanto no MATLAB como no Octave
trapz(x,y) - Aproximação trapezoidal quad(f,a,b) - Quadratura Gaussiana quadv(f,a,b) - Regra de Simpson adaptada quadl(f,a,b) quadgk(f,a,b) quadcc(f,a,b) polyint(p,cte) - Integral indefinida de algum polinômio
Definição de funções matemáticas Função matemática - f(x) = x² + 2x + 1 Representação - @(x) x.^2 + 2*x +1 Fxy = @(x, y) sin(pi*x.*y).*sqrt(x.*y) Funções definidas dessa forma que são usadas nos métodos de integração
Integrais duplas e triplas dblquad(f, xa, xb, ya, yb) triplequad(f, xa, xb, ya, yb, za, zb)
Diferenciação Comando diff Funciona como derivação de função apenas no MATLAB Avalia apenas diferenças no Octave. Pode ser usado de forma a calcular derivadas em determinado ponto
Avaliação da derivada em um certo ponto: Dy = diff(y)./diff(x); Pode-se usar a derivada através do método das diferenças finitas também
Derivada no MATLAB Deve-se criar uma variável simbólica: syms x Função que utiliza esta variável f = sin(x) Mandar derivar diff(f)
Utilizando mais de uma variável syms s t f = sin(s*t); diff(f,t) Derivar em relação a t syms x n f = x^n diff(f)
Resolução de Equações Diferenciais dsolve MATLAB - Resolve equações diferenciais ordinárias e sistemas de equações diferenciais lsode Octave - Resolve equações diferenciais numericamente Transformada de Laplace (MATLAB)
dsolve
lsode Faz o mesmo que a dsolve, porém trabalha apenas com valores numéricos (vetor de dados) Um pouco mais complicada de utilizar
Transformada de Laplace Amplamente usada em simulação de sistemas dinâmicos Utiliza variáveis simbólicas - laplace(f) Faz a transformada - ilaplace(s) Faz a transformada inversa