COMPUTAÇÃO E PROGRAMAÇÃO 1º Semestre 2010/2011 MEMec, LEAN Ficha da Aula Prática 1: Introdução ao MATLAB Sumário das tarefas e objectivos da aula: 1. 2. 3. 4. 5. 6. Abrir a aplicação MATLAB e contactar com o ambiente de trabalho Identificar as componentes da janela do MATLAB Entender o conceito de “directoria de trabalho” Como obter ajuda no MATLAB Utilizar o MATLAB como ferramenta para execução de operações matemáticas Trabalhar com matrizes Enquadramento O MATLAB é um software computacional que pode ser utilizado para cálculo simples ou para cálculo científico avançado, integrando também funcionalidades de visualização gráfica e ambiente de programação. Possíveis aplicações do MATLAB incluem: Cálculo matemático e computação; Desenvolvimento de algoritmos; Aquisição de dados; Modelação, simulação e prototipagem de software; Análise, simulação e preparação de dados; Construção, análise, exploração e visualização de gráficos científicos e de engenharia. O MATLAB foi inicialmente criado com o objectivo de manipular matrizes de forma eficiente - o acrónimo MATLAB significa MATrix LABoratory. Hoje em dia, o MATLAB proporciona uma plataforma computacional de elevado desempenho que disponibiliza diversas funcionalidades, incluindo: Ambiente de trabalho; Interpretador; Linguagem de computação; Editor de programas; Bibliotecas de funções. Ao nível de linguagem de programação, o MATLAB permite o desenvolvimento de aplicações, incluindo desenvolvimento de interface gráfica. Os programas em MATLAB são escritos em m-files, ou seja ficheiros com extensão “.m”, podendo ser estruturados em funções ou scripts. Não é necessário compilar o programa uma vez que o MATLAB é uma linguagem interpretada. O código fonte deste tipo de ficheiros pode ser livremente visualizado e editado. José Borges, v1.1@2010 1 1. Abrir a aplicação MATLAB 1.1 Abrir o MATLAB 1 Clicar no ícone da aplicação existente no ambiente de trabalho e/ou no Start menu do Windows. 1.2 Abrir o MATLAB 1 Premir em simultâneo as teclas Windows + R. +R 2 Escrever “matlab” na prompt e, de seguida, prima a tecla ENTER ou clique no botão OK. José Borges, v1.1@2010 2 2. Identificar as componentes da janela do MATLAB Após inicialização do MATLAB deverá aparecer uma janela semelhante à que se apresenta na Figura 1. Identifique e explore as seguintes componentes do ambiente: Windows Menu Command Window Current Directory Workspace Command History Menu do Windows, Barra de Ferramentas e Atalhos Current Directory / Workspace Command History Command Window Figura 1: Janela com o ambiente de trabalho do MATLAB. José Borges, v1.1@2010 3 3. Entender o conceito de “directoria de trabalho” A “Current Directory” corresponde a uma directoria existente no disco rígido que é utilizada pelo MATLAB para armazenamento/leitura de dados e/ou acesso a funções locais durante a sessão de trabalho actual. Assumindo que no disco rígido existe uma directoria C:\Program Files\MATLAB\R2009a\work (NOTA: Substituir pela directoria adequada no seu computador!), a Figura 2 exibe a componente “Current Directory” da Barra de Ferramentas, que indica qual é a directoria de trabalho actual. Current Directory Figura 2: Detalhe da janela do MATLAB com a caixa de texto da Current Directory. Alteração da directoria de trabalho actual 3.1 Escolher uma nova directoria de trabalho pela linha de comandos 1 Na prompt da linha de comandos escrever o comando cd, seguido do caminho para a nova directoria entre pelicas 2 Premir a tecla ENTER 3.2 Escolher uma directoria de trabalho existente no grupo “Current Directory” 1 Clicar na seta junto à caixa de texto 2 Escolher uma das directorias disponíveis apresentadas como opção José Borges, v1.1@2010 4 3.3 Escolher uma nova directoria de trabalho por navegação no explorador de pastas 1 Clicar no botão de selecção junto à caixa de texto 2 Escolher a directoria pretendida na nova janela gerada pelo MATLAB 3.4 Aceder à directoria no nível acima do actual 1 Clicar no botão de mudança de nível selecção junto à caixa de texto Na prompt da linha de comandos escrever o comando cd .. seguido da tecla ENTER José Borges, v1.1@2010 5 4. Utilizar o MATLAB como ferramenta para a execução de operações matemáticas Cálculos Simples O MATLAB faz cálculos simples e científicos como uma calculadora. Por exemplo, suponha que pretende calcular o perímetro de um rectângulo com lados a = 3 cm e b = 7 cm. 4.1 Introdução directa da expressão matemática 1 Escrever na prompt do MATLAB a operação matemática para cálculo do perímetro, seguido da tecla ENTER >> 3 + 3 + 7 + 7 ans = 20 >> 3 * 2 + 7 * 2 ans = 20 4.2 NOTAS O resultado da operação fica guardado na variável temporária ans. A multiplicação tem precedência sobre a adição no MATLAB. 4.3 Utilização de variáveis na expressão matemática. 1 Criar duas variáveis a = 3 e b = 7 na prompt do MATLAB, seguido da tecla ENTER >> a = 3, b = 7 a = 3 b = 7 2 Escrever na prompt do MATLAB a operação matemática para cálculo do perímetro, seguido da tecla ENTER 4.4 >> perimetro = 2 * a + 2 * b perimetro = 20 NOTAS 4.5 O sinal de igual significa atribuição da operação à sua esquerda à variável à sua direita. O resultado da operação ficou guardado nas variável perimetro. HANDS-ON Escreva uma expressão matemática para o cálculo da área do rectângulo e atribua o resultado à variável area. Antes de carregar na tecla ENTER, coloque um ponto e vírgula ; no final da instrução. Averigúe o resultado após carregar na tecla ENTER. Escreva na linha de comandos o nome da variável area seguido da tecla ENTER. Justifique o que está a acontecer. José Borges, v1.1@2010 6 Expressões Numéricas e Aritméticas O MATLAB trabalha em notação decimal, hexadecimal, potência de 10 e exponencial em diversos formatos numéricos com aproximadamente 16 algarismos significativos na gama de 10-308 (limite inferior ou de underflow) a 10308 (limite superior ou de overflow). 4.6 Limites da representação numérica interna. 1 Criar as variáveis x = ey= >> x = 2e200 x = 2.0000e+200 >> y = 1e200 y = 1.0000e+200 2 Fazer o produto de x por y ( ) >> z = x * y ans = Inf 3 Criar a variável z = >> z = 2e-200 z = 2.0000e-200 4 Dividir z por y ( ) >> z / y ans = 0 As expressões podem ser construídas utilizando os operadores aritméticos abaixo indicados. 4.7 Operadores aritméticos + * / \ ^ 4.8 adição subtracção multiplicação divisão à direita divisão à esquerda exponenciação HANDS-ON Defina duas variáveis x = 5 e y = 2. Escreva expressões para o cálculo de: soma de x e y, . subtrai y a x, . multiplicação de x por y, divisão de x por y, . calculo de x elevado a y, José Borges, v1.1@2010 . . 7 A ordem pela qual são avaliadas as expressões no MATLAB é dada pelas seguintes regras: 1) as expressões são avaliadas da esquerda para a direita 2) em termos de operadores a prioridade de avaliação é dada por ordem decrescente de acordo com: i) potência tem mais alta precedência, ii) segue-se a multiplicação e divisão, que têm igual precedência, iii) segue-se a adição e subtracção, que têm igual precedência. 3) podem ser usados parêntesis “(“ e “)”para alterar a ordem de avaliação das expressões. A prioridade da avaliação no caso do uso de parêntesis é feita do interior para o exterior. 4.9 HANDS-ON Averigúe o resultado das seguintes expressões: 4+2*5^2+2*3 4 + 2 * (5 ^ 2 + 2) * 3 ((4 + 2) * 5) ^ 2 + 2 * 3 (4 + 2 * 5 ^ 2 + 2) * 3 4.10 NOTAS Para avaliar múltiplas expressões em paralelo deve digitar cada linha correspondente seguida de SHIFT+ENTER. No final pressione ENTER. Para que o MATLAB execute um comando sem exibir resultado basta colocar um ponto-evírgula no final do comando. As funções e variáveis são case-sensitive , isto é, “a” não é o mesmo que “A”. O editor possui Syntax Highlighting e Parentheses Matching 4.11 Utilização de separadores e comentários nas expressões , Permite separar comandos dados em uma mesma linha. ; Permite separar comandos dados em uma mesma linha. Se o último carácter da declaração é um ponto e vírgula, a impressão na tela é suprimida, mas atarefa é realizada. … Permite dividir uma expressão em várias linhas usando um espaço em branco e três pontos,"...", no final das linhas incompletas. % Permite introduzir comentários para documentar expressões e/ou linhas de código. O carácter de percentagem “%” inicia a linha de comentário, podendo seguir-se qualquer outro carácter. 4.12 HANDS-ON Escreva a instrução clear all na prompt do MATLAB e carregue na tecla ENTER Escreva as seguintes expressões na prompt do MATLAB e averigúe o resultado: o a = 3, b = 7, c = 2 * a + 2 * b % correcto o z = 2 * x + 2 * y, x = 3, y = 7 % determinação do perímetro José Borges, v1.1@2010 8 Variáveis Variáveis são entidades computacionais que associam uma etiqueta, ou nome, a uma zona na memória volátil do computador, sendo assim utilizadas para guardar informação. Regras para definição do nome das variáveis em MATLAB: Os nomes das variáveis iniciam-se sempre por uma letra, podendo seguir-se quaisquer outros caracteres alfanuméricos excepto espaços em branco ou caracteres de pontuação. Os nomes das variáveis podem consistir de até 19 caracteres. O MATLAB é case sensitive, isto é, distingue entre letras maiúsculas e minúsculas. 4.13 HANDS-ON (Baseado no Tópico 4.2) Defina as variáveis a = 3 e b = 7. Averigúe o resultado da seguinte expressão: perimetro = 2 * A + 2 * b. Escreva na prompt do MATLAB o nome da variável “a” e “b” e justifique o resultado obtido no ponto anterior. O MATLAB utiliza alguns nomes predefinidos para identificar variáveis específicas do programa. 4.14 Exemplos de nomes de variáveis predefinidos no MATLAB ans variável temporária usada para armazenar o resultado da última operação realizada no MATLAB pi número eps menor número tal que, quando adicionado a 1, cria um número maior que 1 no computador inf significa infinito NaN ou nan significa não é um número, por exemplo, 0/0 i ou j unidade imaginária ( ) nargin número de argumentos de entrada de uma função nargout número de argumentos de saída de uma função realmin menor número que o computador pode armazenar realmax maior número que o computador pode armazenar 4.15 NOTAS As variáveis podem ser redefinidas a qualquer momento pela atribuição de um novo valor, ainda que de um tipo numérico diferente do original. Se bem que é possível redefinir as variáveis predefinidas do MATLAB, tal é uma má prática de programação, podemos mesmo dificultar a depuração de erros no código do programa. José Borges, v1.1@2010 9 Funções para cálculo científico O MATLAB inclui um conjunto alargado de funções científicas predefinidas. A maioria destas funções é identificada pelo respectivo nome em Inglês, ou por um acrónimo significativo, e usam uma sintaxe similar à da escrita matemática. 4.16 Exemplos de funções predefinidas no MATLAB date indicação da data clock indicação da hora abs(x) valor absoluto de x cos(x) co-seno de x. sin(x) seno de x. tan(x) tangente de x. acos(x) arco cujo co-seno é x asin(x) arco cujo seno é x. atan(x) arco cuja tangente é x. exp(x) exponencial e x . gcd(x,y) máximo divisor comum de x e y. lcm(x,y) mínimo múltiplo comum de x e y. log(x) logaritmo de x na base e. log10(x) logaritmo de x na base 10. rem(x,y) resto da divisão de x por y. sqrt(x) raiz quadrada de x. tan(x) tangente de x. 4.17 Utilização de Funções Científicas. 1 Criar a variável x = 2. >> x = 2; 2 Calcular a raiz quadrada de x, dividir por 2 e atribuir a y. >> y = sqrt(x)/2 Calcular o arco cujo co-seno é y e atribuir à variável z. >> z = acos(y) z = 3 y = 0.7071 0.7854 4 Converter z de radianos para graus. >> z_graus = z*180/pi z_graus = 45 4.18 NOTAS As operações trigonométricas no MATLAB são realizadas em unidades de radianos. José Borges, v1.1@2010 10 Formatos Numéricos O MATLAB trabalha e armazena os dados numéricos em dupla precisão com 16 dígitos decimais. Mesmo quando definimos uma nova variável, por exemplo a = 6, a representação interna desta é na forma de um número real, logo a = 6,0. É possível fazer o cast do tipo e transformar uma variável, e.g., de real para inteira. A visualização das variáveis não segue a mesma regra do armazenamento e processamento: se uma variável tiver um valor com parte decimal nula, então é exibida na linha de comandos como se de um inteiro se tratasse. Quando um número é inteiro, o MATLAB apresenta-o como um inteiro mas utiliza uma representação interna real. Por omissão, o MATLAB exibe os números reais arredondados até à 4ª casa decimal. Caso os dígitos significativos sejam em número superior, então o valor é apresentado utilizando notação científica. O formato de visualização pode ser alterado pela utilização do comando format. 4.19 Modos de apresentação de dados numéricos (EXEMPLIFICADO COM NÚMERO ) format short 5 dígitos (formato default) 3.1416 format long 16 dígitos 3.141592653589793 format short e 5 dígitos mais expoente 3.1416e+000 format long e 16 dígitos mais expoente 3.141592653589793e+000 format rat Formato racional 355/113 format + Indicação do sinal (positivo, negativo ou zero) + format hex Formato hexadecimal 400921fb54442d18 4.20 Utilização do comando format 1 Calcular a raiz quadrada de 2. >> sqrt(2) ans = 1.4142 2 Mudar a representação para o modo de 16 dígitos e calcular a raiz quadrada de 2. >> format long >> sqrt(2) ans = 1.414213562373095 3 Mudar a representação para o modo hexadecimal e calcular a raiz quadrada de 2. >> format hex >> sqrt(2) ans = 3ff6a09e667f3bcd 4 Mudar a representação para o modo de 5 dígitos >> format short >> sqrt(2) ans = 1.4142 4.21 NOTAS A utilização do comando format altera apenas o formato de exibição numérica, e não a representação na memória interna gerida pelo MATLAB. José Borges, v1.1@2010 11 4.22 Divisão inteira vs. Divisão real 1 Fazer a divisão com resultado inteiro 10 / 5. >> 10 / 5 ans = 2 2 Fazer a divisão com resultado real 10 / 4. >> 10 / 4 ans = 2.5 3 4 Fazer a divisão inteira 10 / 4, i.e.: 10 4 2 2 Resto da divisão inteira de 10 / 4, i.e.: 10 4 2 2 José Borges, v1.1@2010 >> fix(10/4) ans = 2 >> rem(10,4) ans = 2 12 5. Como obter ajuda no MATLAB O sistema de ajuda no MATLAB está bastante desenvolvido e proporciona um suporte muito útil e eficaz na utilização da ferramenta, bem como nas actividades de programação. Existem dois modos para utilizar a ajuda do MATLAB: na forma de texto pela linha de comandos ou na forma gráfica através de uma GUI apropriada. Ajuda na linha de comandos 5.1 Obter ajuda na linha de comandos 1 Listar todas as toolboxes da instalação actual do MATLAB. >> help HELP topics: Documents\MATLAB - (No table of contents file) matlab\general matlab\ops - General purpose commands. Operators and special characters. matlab\lang matlab\elfun - Programming language constructs. Elementary math functions. matlab\specfun - Specialized math functions. (apenas se mostra um excerto) 2 Listar todas as funções de uma toolbox específica, neste caso a toolbox elfun que integra algumas funções matemáticas predefinidas no MATLAB. >> help elfun Elementary math functions. Trigonometric. sin - Sine. sind sinh - Sine of argument in degrees. - Hyperbolic sine. asin - Inverse sine. asind asinh - Inverse sine, result in degrees. - Inverse hyperbolic sine. cos cosd - Cosine. - Cosine of argument in degrees. cosh acos - Hyperbolic cosine. - Inverse cosine. acosd acosh - Inverse cosine, result in degrees. - Inverse hyperbolic cosine. tan - Tangent. (apenas se mostra um excerto) 3 Obter ajuda para uma função específica, neste caso a função seno. >> help sin SIN Sine of argument in radians. SIN(X) is the sine of the elements of X. See also asin, sind. Overloaded functions or methods (ones with the same name in other directories) help darray/sin.m help sym/sin.m Reference page in Help browser doc sin José Borges, v1.1@2010 13 Ajuda através da GUI do MATLAB 5.2 Utilização da GUI de ajuda no MATLAB 1 Clicar no botão de ajuda junto à caixa de texto 2 Escrever na prompt o nome da função que pretende pesquisar e carregar na tecla ENTER. José Borges, v1.1@2010 14 6. Trabalhar com matrizes Até ao momento foram apresentados casos de utilização do MATALAB com valores escalares. No entanto, o MATLAB é especialmente adequado para a manipulação de matrizes. Uma matriz é uma entidade matemática que agrega dados de um mesmo tipo (que poderão ser, por exemplo, tipo real ou complexo ). Dependendo das dimensões podem-se definir os seguintes casos: matrizes com dimensões , vectores linha com dimensões , vectores coluna com dimensões , escalares com dimensões . Por exemplo, a matriz pode ser definida como se segue, onde os elementos da matriz representa o número de colunas. , o escalar representa o número de linhas e o escalar Definição da matriz no MATLAB A criação de matrizes no MATLAB resulta da explicitação dos elementos da matriz entre parêntesis rectos “[“ e “]” e atribuição a uma variável. Os elementos da matriz são separados por vírgulas “,” ou espaços em branco “ “ no caso das linhas, e por ponto e vírgula no caso das colunas. À semelhança do caso dos escalares, o MATLAB não requer a declaração de tipos, mas todos os elementos são, obrigatoriamente, do mesmo tipo. 6.1 Criação de matrizes >> A = [1 2; 3 4] 1 Criar a matriz A = 1 2 3 4 >> A = [1,2; 3,4] A = 1 3 2 4 >> linha_1 = [1,2] linha_1 = 1 2 >> linha_2 = [3,4] linha_2 = 3 4 >> A = [linha_1; linha_2] A = 1 2 3 4 >> coluna_1 = [1;3] coluna_1 = 1 3 >> coluna_2 = [2;4] coluna_2 = 2 4 >> A = [coluna_1 coluna_2] A = José Borges, v1.1@2010 1 2 3 4 15 Os elementos da matriz podem ser acedidos pela explicitação dos índices respectivos na matriz ou através do operador “:”. 6.2 Acesso aos elementos da matriz 1 Aceder ao elemento da matriz A. >> A(1,2) ans = 2 2 Aceder à segunda linha, elementos da matriz A. e , >> [A(2,1) A(2,2)] ans = 3 4 >> A(2,:) ans = 3 3 Aceder à primeira coluna, elementos da matriz A. e , 4 >> A(:,1) ans = 1 3 As matrizes podem ser concatenadas ou redimensionadas, ou seja, podem-se remover ou acrescentar linhas e/ou colunas. 6.3 Manipulação de matrizes 1 Criar a matriz 2 3 Concatenar as matrizes A e B e atribuir à matriz C Eliminar a 3ª coluna de C >> B = [5 6; 7 8] B = 5 6 7 8 >> C = [A B] C = 1 2 5 6 3 4 7 8 >> C(:,3)=[] C = 1 3 4 Acrescentar um elemento à matriz C na posição linha = 3 e coluna = 2 com valor 9, ou seja, José Borges, v1.1@2010 2 4 6 8 >> C(3,2) = 9 C = 1 3 2 4 6 8 0 9 0 16 Algumas funções para criar matrizes particulares no MATLAB Existem funções para criar matrizes no MATLAB a partir da definição de parâmetros de entrada. 6.4 Funções para criar matrizes eye(n,m) criação de uma matriz identidade com dimensão zeros(n,m) criação de uma matriz de zeros ones(n,m) criação de uma matriz , i.e. preenchida com valores 0 unitária, i.e. preenchida com valores 1 diag(X) devolve a diagonal principal da matriz X rand(n,m) criação de uma matriz de valores aleatórios linspace(x,y,n) gera um vector com n pontosigualmente espaçados no intervalo x a y José Borges, v1.1@2010 17 Operações com Matrizes As operações com matrizes seguem regras semelhantes às anteriormente apresentadas no caso da operações com escalares. Uma grande diferença reside, por exemplo, no produto de matrizes que é bem definido apenas se o número de colunas da matriz da esquerda é igual ao número de linhas da matriz da direita. Se A é uma matriz e B é uma matriz , então seu produto AB é uma matriz com dimensões , então . A comutação de B por A só será possível se , pelo que o produto BA poderá nem sequer existir. 6.5 Operações com matrizes 1 Criar a constante K = 3 e as matrizes, , e >> K = 3 K = 3 >> A=[1 2 ; 3 4] A = 1 2 3 4 >> B=[-3;1] B = -3 1 >> C=[3 5 ; -5 2] C = 2 Somar A e B 3 5 -5 2 >> A + B ??? Error using ==> plus Matrix dimensions must agree. 3 Somar A e C >> A + C ans = 4 Multiplicar K por A 4 7 -2 6 >> K * A ans = 3 9 5 Multiplicar A por C >> A * C ans = -7 -11 6 7 Multiplicar C por A Multiplicar A por B 6 12 9 23 >> C * A ans = 18 26 1 -2 >> A * B ans = -1 -5 8 Multiplicar B por A >> B * A ??? Error using ==> mtimes Inner matrix dimensions must agree. José Borges, v1.1@2010 18 Para além da soma, subtracção e produto, há outras operações que também podem ser realizadas sobre matrizes. 6.6 Funções para realizar operações com as matrizes A^n implementa a exponenciação, i.e. assumindo tipo , , implementa um produto do inv(A) implementação da inversão da matrizes (é conhecido que a inversão de matrizes é uma operação pesada em termos computacionais) A / B implementa a divisão à esquerda de modo eficiente: A \ B implementa a divisão à direita de modo eficiente: A' apresenta a transposta de A det(A) calcula o determinante da matriz A size(A) apresenta as dimensões da matriz A 6.7 Operações com matrizes (continuação) 1 Criar as matrizes, >> A=[1,2;2,4]; >> C=[3,5;-5,2]; , 2 Inverter a matriz A (NOTA: A matriz A não tem inversa) >> inv(A) Warning: Matrix is singular to working precision. ans = Inf Inf 3 4 5 6 7 Inverter a matriz B Divisão à direita de A por B Divisão à esquerda de A por B Transposta da matriz A Transposta da matriz B >> inv(B) ans = 0.0645 -0.1613 0.1613 0.0968 >> A / B ans = 0.3871 0.0323 0.7742 0.0645 >> A \ B Warning: Matrix is singular to working precision. ans = -Inf -Inf Inf Inf >> A' ans = 1 2 2 4 >> B' ans = 3 5 José Borges, v1.1@2010 Inf Inf -5 2 19 8 9 Determinante da matriz A (NOTA: como o det = 0, conclui-se que a matriz A é “singular”, i.e. tem linhas linearmente dependentes. Relacionar este resultado com os exercícios 2 e 5.) >> det(A) Determinante da matriz B >> det(B) ans = ans = 0 31 José Borges, v1.1@2010 20