Introdução ao MATLAB Antonio C. Roque, Rodrigo F. O. Pena e Renan O. Shimoura 15 de março de 2017 O MATLAB (MATrix LABoratory) é um ambiente de programação, visualização e análise de dados de alto nível com ampla utilização em pesquisa básica e aplicada, ensino e nos meios profissionais das mais diversas áreas. Ele possui linguagem própria, mas também interpreta outras linguagens como, por exemplo, C. O MATLAB foi escrito em C e em Java mas, por ser de alto nível, é de fácil uso pois utiliza uma linguagem interpretada que é facilitada ao usuário. Como sua linguagem é interpretada e não compilada, o MATLAB é, em geral, mais lento que linguagens de baixo nível como C e Fortran. Ele é uma ferramenta multiplataforma, ou seja, não é restrito a um sistema operacional único. O MATLAB não é um software livre, sua licença é paga e deve ser adquirida pelo site da MathWorks (www.mathworks.com). A USP compra e disponibiliza licenças para alunos e professores em www.cce.usp.br. Além disso, também pode-se adquirir toolboxes que já possuem diversas funções pré-definidas para engenharias, processamento paralelo, processamento de imagens, bioinformática, dentre outras. Um overview do MATLAB pode ser visto em www.mathworks.com/products/matlab/?s_cid=wiki_matlab_2. 1 Elementos básicos do MATLAB Supondo que o MATLAB já está instalado no seu computador, para abrir o programa você deve clicar (ou dar um duplo clique) sobre o ícone do MATLAB na área de trabalho do seu computador. O ambiente do MATLAB é divido em várias janelas que podem ser customizadas de acordo com a necessidade do usuário. O ambiente padrão do MATLAB contem quatro janelas: Command Window, Current Folder, Workspace e Command History. 1. Command Window: Esta é a janela onde você digita os comandos para executar e obter respostas do MATLAB. Os comandos devem ser digitados no prompt de comando, indicado por "> >". O que for digitado aqui é executado imediatamente. 2. Current Folder: esta é a janela que lista todas as pastas e arquivos que estão atualmente armazenados no diretório indicado. Você pode visualizar os conteúdos de diretórios e pastas diferentes da maneira usual em um ambiente de janelas, clicando nas setas ou nos ícones dos diretórios. 3. Workspace: esta é a janela que lista todas as variáveis atualmente armazenadas para a execução dos programas. 4. Command History: janela que exibe todos os comandos recentes digitados no prompt de comando. Ela é bastante útil para relembrar o que foi feito nas sessões anteriores. 1.1 O MATLAB como uma calculadora O MATLAB pode ser usado como uma calculadora. Tente os seguintes comandos (a resposta a cada operação será dada como um "" seguido da resposta): > > 3+4 7 > > 8-3 1
5 > > 12*6 72 > > 7/13 0.5385 > > 5 + 3 * 8 29 > > (5 + 3) * 8 64 > > 3ˆ4 81 Tente agora: > > 3/5 0.6000 > > ans*3 1.8000 > > ans^2 3.2400 > > 2^500 3.2734e+150 Note que o símbolo "e" representa aqui notação científica. > > 2e3 2000 > > 2*10^3 2000 Veja agora operações envolvendo funções trigonométricas, logarítmicas, etc: > > sqrt(9) 3 > > sin(3/2*pi) 2
-1 > > log(2.7183) 1.0000 > > exp(log(3)) 3.0000 Note que a função log no MATLAB é o log e ou ln, o logaritmo natural. Se você quiser calcular o log 10 deve usar log10. > > exp(log10(10)) 2.7183 O formato padrão do MATLAB de mostrar os resultados numéricos é com quatro dígitos após a vírgula. Existem, porém, outras maneiras de mostrar esses resultados. Por exemplo, o formato "long" mostra os números com 16 dígitos após a vírgula, que é a maneira como o MATLAB representa os números internamente; o formato "short" representa os números com 4 dígitos após a vírgula (é o padrão do MATLAB); e o formato "bank" representa os números com dois dígitos depois da vírgula. > > log(2.7183) 1.0000 > > format long > > log(2.7183) 1.000006684913988 > > format bank > > log(2.7183) 1.00 > > format short > > log(2.7183) 1.0000 Dicas: Digitando a tecla de SETA PARA CIMA no prompt de comando recupera o comando que foi executado anteriormente. Desta forma, você pode re-executar muitos comandos já executados anteriormente sem precisar digitá-los novamente. O comando help é extremamente útil para programar em MATLAB. Basta digitar help + nome_do_comando que o próprio MATLAB dará todas as explicações sobre o comando e seu uso com exemplos incluídos. Por exemplo, digite help factorial no prompt de comando para entender como executar a função fatorial de um número em MATLAB. Os seguintes símbolos são usados pelo MATLAB para comparar dois números: > (maior que); >= (maior ou igual que); < (menor que); <= (menor ou igual que); ~= (diferente); e == (igual). Por exemplo, com eles se pode mconstruir expressões lógicas que retornam como resposta o número 1 se a 3
expressão for verdadeira ou o número 0 se a expressão for falsa. > > 7 > 3 1 > > 4==9 0 > > 5 <= 5 ans 1 1.2 Variáveis e outras estruturas de dados Para atribuir um valor a uma variável em MATLAB usa-se o operador "=": > > 3 3 > > x^2 9 Observe que a variável x, que atualmente possui o valor 2, está indicada na janela Workspace. Se você atribuir outro valor a ela, por exemplo digitando, > > x + 1 4 o valor atribuído a x na janela Workspace muda para 4. Os nomes das variáveis em MATLAB podem conter apenas caracteres alfanuméricos (letras e números) e o símbolo underscore "_" (espaços entre caracteres não são permitidos). Obrigatoriamente, o primeiro caracter do nome de uma variável deve ser uma letra e o número máximo de caracteres no nome de uma variável deve ser 255. Em MATLAB, letras em caixa alta e caixa baixa são consideradas caracteres diferentes ("a" é diferente de "A"). Dica: Uma boa prática em programação (não só em MATLAB) é dar nomes às variáveis que tenham significado, isto é, que estejam associados àquilo que as variáveis representam. Por exemplo, é melhor chamar uma variável que representa o número de pessoas de npessoas do que de x. Para limpar uma variável da área de trabalho (Workspace) usa-se o comando clear. > > clear x > > Se você digitar o comando clear ou clear all, isso irá remover todas as variáveis da área de trabalho. Se você digitar clc, isto irá limpar a tela, mas não removerá nenhuma variável da área de trabalho. Para que você não precise ver todas as variáveis que você declara em MATLAB, acrescente um ponto-e-vírgula ";" ao fim da declaração. Veja a diferença: > > y = 10 y = 10 4
> > y = 10; > > Em MATLAB, todas as variáveis são consideradas como matrizes. Mesmo um único número, por exemplo 3, é considerado como uma matriz 1 1. Palavras são consideradas como matrizes de números. Veja abaixo como criar as seguintes matrizes: [1 3 5 7] [ ] 1 3 5 7 y = 2 4 6 8 > > [1,3,5,7] 1 3 5 7 > > > > [1 3 5 7] 1 3 5 7 > > > > [1 3 5 7]; > > y = [1 3 5 7; 2 4 6 8] y = 1 3 5 7 2 4 6 8 > > clear y > > y = [x; 2 4 6 8] y = 1 3 5 7 2 4 6 8 Para criar uma matriz vazia: > > MatrizVazia = [ ] MatrizVazia = [ ] Para saber o tamanho de uma matriz usa-se o comando size. > > s size(x) s 1 4 > > sy = size(y) sy = 2 4 Note que o comando size(a) retorna uma matriz 1 2 onde o primeiro elemento dá o número de linhas da matriz A e o segundo elemento dá o número de colunas de A. O comando size permite que se especifique o tamanho de apenas uma das dimensões (linhas ou colunas) usando a forma size(a,dim): size(a,1) retornará o número de linhas de A e size(a,2) retornará o número de colunas de A. 5
> > linhas_y = size(y,1) linhas_y = 2 > > colunas_y = size(y,2) colunas_y = 4 O comando length(a) retorna o tamanho da maior dimensão da matriz A: > > length(y) 4 Muitas vezes queremos gerar matrizes que tenham uma dada estrutura ou padrão. Por exemplo, podemos querer uma matriz que tenha todos os elementos entre 1 e 100 espaçados de um em um. Para gerar matrizes desse tipo em MATLAB usa-se o operador dois pontos ":" com a seguinte sintaxe: valor inicial : incremento : valor final Digite os seguintes comandos e veja o que acontece: > > 1:1:100 Lembre-se que para evitar que o resultado seja mostrado na tela deve-se usar o ponto-e-vírgula. Tente agora: > > 1:1:100; Como é muito comum usar incrementos unitários, se nenhum incremento for especificado o MATLAB usará o valor padrão 1. Tente o exemplo: > > 1:100; Os incrementos podem ser negativos. Tente o exemplo: > > 2:-0.3:0 2.0000 1.7000 1.4000 1.1000 0.8000 0.5000 0.2000 Note que se os incrementos não terminarem exatamente no valor final especificado eles param no último valor antes dele. Outro exemplo: > > 2:1.3:9 2.0000 3.3000 4.6000 5.9000 7.2000 8.5000 Uma maneira de criar um conjunto de n número igualmente espaçados entre dois números especificados, a e b, é usar a função linspace. A sintaxe é linspace(a,b,n). Veja o exemplo: > > linspace(2,8,10) Columns 1 through 7 2.0000 2.6667 3.3333 4.0000 4.6667 5.3333 6.0000 Columns 8 through 10 6.6667 7.3333 8.0000 6
Duas matrizes úteis são aquelas cujos elementos são todos zeros ou uns. Elas são criadas em MA- TLAB usando as funções zeros e ones. Veja os exemplos: > > zeros(3,5) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 > > y = ones(5,3) y = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 Matrizes em MATLAB podem ser criadas por concatenação de outras matrizes, onde as matrizes ou funções dentro dos colchetes mais internos são calculadas primeiro. Veja o exempoo abaixo, que mostra uma maneira de gerar a matriz: 1 2 3 4 5 6 2 4 6 8 0 0 7 6 2 5 9 3 > > [ [ zeros(2,3)], [ones(2,3)]; 1:6; 2:2:8,0,0; [7, 6, 2, 5, 9, 3] ] 1 2 3 4 5 6 2 4 6 8 0 0 7 6 2 5 9 3 A maneira de se referir ao elemento de uma matriz A que está na linha i e na coluna j é pela notação A(i,j). Por exemplo, seja a matriz A definida acima: > > A(2,3) 0 > > A(2,4) 1 > > A(3,6) 6 Para obter os elementos da linha 4 e colunas 3 e 5 e atribuí-los à variável a: > > a = A(4, [3,5]) a = 6 0 7
Para obter todos os elementos da segunda linha de A: > > A(2, 1:6) ou > > A(2, 1:size(A,2)) ou ainda > > A(2, 1:end) ou ainda outra maneira > > A(2, :) Para matrizes unidimensionais (vetores), a notação é A(i). Por exemplo, seja B = [5 4 2 7 9 3]: > > B(3) 2 > > B([2, 5, 6]) 4 9 3 > > B(4:6) 7 9 3 Pode-se alterar os elementos de uma dada matriz ou vetor. Por exemplo, seja [1 2 3 4 5 6]. > > [1 2 3 4 5 6] 1 2 3 4 5 6 > > A(3) = 7 1 2 7 4 5 6 > > A(1:3) = 2 2 2 2 4 5 6 > > A(3:6) = [1 1 1 1] 8
2 2 1 1 1 1 Seja a matriz A: > > [1 2 3 4 5; 6 7 8 9 10; 11 12 13 14 15; 16 17 18 19 20]; Para atribuir o valor 0 a todos os elementos da primeira linha: > > A(1,:) = 0 0 0 0 0 0 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 E para atribuir o valor 42 a todos os elementos da terceira coluna: > > A(:,3) = 42 0 0 42 0 0 6 7 42 9 10 11 12 42 14 15 16 17 42 19 20 Suponha que você queira atribuir o valor 27 a todos os elementos da matriz A que sejam maiores ou iguais a 14 na terceira linha, mas que você não saiba quais são esses elementos. Para descobrir quais são os índices das colunas dos elementos da terceira linha da matriz A cujos valores são maiores ou iguais a 14 usa-se o comando find: > > find(a(3,:) >= 14) 3 4 5 Com apenas um comando pode-se trocar todos os elementos da terceira linha de A que são maiores ou iguais a 14 por 27: > > A(3,find(A(3,:) >= 14))=27 0 0 42 0 0 6 7 42 9 10 11 12 27 27 27 16 17 42 19 20 1.2.1 Álgebra matricial básica Operações envolvendo matrizes e escalares são feitas sem maiores problemas em MATLAB. É preciso lembrar apenas que os operadores "*", "/" e "^" se referem em MATLAB a multiplicação, divisão e potenciação de matrizes, respectivamente. Para se fazer multiplicação, divisão e potenciação elemento a elemento deve-se usar a notação ".*", "./" e ".^" respectivamente. Sejam as matrizes: [ ] 1 2 [ 3 4 ] 5 6 B = 7 8 Estude os seguintes exemplos: > > [1 2; 3 4] 1 2 3 4 9
> > B = [5 6; 7 8] B = 5 6 7 8 > > A1 = A + 2 A1 = 3 4 5 6 > > A2 = A - 2 A2 = -1 0 1 2 > > A3 = 2*A A3 = 2 4 6 8 > > A4 = A*2 A4 = 2 4 6 8 > > A5 = A/2 A5 = 0.5000 1.0000 1.5000 2.0000 > > A6 = A.^2 A6 = 1 4 9 16 Note o ponto antes de "^". isto garante que cada elemento de A é elevado ao quadrado separadamente. Se você não tivesse usado o ponto a operação que o MATLAB faria seria a multiplicação matricial de A por A: A^2 = A*A. Veja abaixo: > > A7 = A*A A7 = 7 10 15 22 > > A8 = A^2 A8 = 7 10 15 22 Exemplos de multiplicação, divisão e potenciação elemento-a-elemento de duas matrizes são dados abaixo: > > C = A.*B C = 5 12 21 32 10
> > D = A./B D = 0.2000 0.3333 0.4286 0.5000 > > E = A.^B E = 1 64 2187 65536 A transposta de uma matriz é calculada em MATLAB usando-se o apóstrofe " ": > > F = A F = 1 3 2 4 > > G = B G = 5 7 6 8 1.3 Gráficos Ver arquivo Gráficos em MATLAB 1.4 Funções e scripts A fazer 1.5 Programando em MATLAB Abaixo, veja a diferença de alguns programas implementados em C e em Matlab: Código 1 em C : Multiplicação de vetores //Multiplicação de Vetores Início #include <stdio.h> int main(){ int A[3], B[3], C[3]; //Declaração dos vetores for(int i = 0; i < 3; i++){ //preenchendo os vetores } A[i] = i+1; B[i] = A[i]*A[i]; for(int i=0; i < 3; i++) //multiplicando C[i] = A[i]*B[i]; for(int i=0; i < 3; i++) printf("c[%d] = %d \n",i, C[i]); //imprimindo o resultado 11
} return 0; //Fim de Código Código 1 em Matlab : Multiplicação de vetores % Multiplicação de Vetores Início [1 2 3]; B = A.*A; C = A.*B % Fim de Código Observações: O código em Matlab utiliza ponto + operação para indicar que a multiplicação é feita "ponto a ponto", ou seja, cada elemento i será multiplicado pelo seu correspondente i no outro vetor. Observe também que para imprimir o resultado basta tirar o ";" da variável. Aliás, nem seria necessário o uso de uma variável C, o usuário poderia simplesmente escrever A.*B que o resultado seria exibido. Código 2 em C : Multiplicação de matrizes //Multiplicação Matrizes Início #include <stdio.h> int main(){ int linhas = 3, colunas = 3; int aux_soma; //auxiliar para somar os produtos int matriz1[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int matriz2[3][3]={{9,8,7},{6,5,4},{3,2,1}}; int resultado[linhas][colunas]; for(int i = 0; i < linhas; i++) } for(int j = 0; j < colunas; j++){ //imprimindo o resultado for(int i = 0; i < linhas; i++) } return 0; aux_soma=0; for(int k = 0; k<linhas; k++) aux_soma+=matriz1[i][k]*matriz2[k][j]; //soma os produtos resultado[i][j]= aux_soma; //coloca o resultado da soma na matriz resultado for(int j = 0; j < colunas; j++){ } //Fim de Código printf("%d ", resultado[i][j]); //printf("\n"); 12
Código 2 em Matlab : Multiplicação de matrizes %Multiplicação Matrizes Início matriz1 = [1 2 3; 4 5 6; 7 8 9]; matriz2 = [9 8 7; 6 5 4; 3 2 1]; matriz1*matriz2 %Fim de código 13