Baixe o app para aproveitar ainda mais
Prévia do material em texto
Universidade Tecnolo´gica Federal do Parana´ – UTFPR Departamento Acadeˆmico de Eletroˆnica – DAELN MATLAB ABC Introduc¸a˜o ao MATLAB Gustavo B. Borba 1 1001 utilidades Todos lembramos do conhecido slogan 1001 utilidades das palhas de ac¸o Bombril, apesar de nunca algue´m ter tentado catalogar cada uma delas. E´ claro que algumas sa˜o cla´ssicas. Por exemplo: atear fogo e gi- rar para animar a festa junina, fazer fogo dando um curto-circuito na tomada (na˜o tente fazer isso), en- gatar na anteninha da tv achando que vai melhorar a recepc¸a˜o e ate´ limpar coisas. Na˜o ha´ du´vidas de que o Bombril e´ realmente versa´til e as donas de casa adoram ter sempre um por perto. Se voceˆ ja´ usou o MATLAB ou sabe o que e´, ja´ deve ter entendido porque estamos falando do Bombril. Segundo a MathWorks, empresa que desenvolve o MATLAB, ele se trata de um ambiente para computac¸a˜o cient´ıfica. Segundo os engenheiros, programadores, cientistas e outros usua´rios, o MATLAB e´ uma indispensa´vel ferramenta para 1001 utilidades e sempre e´ bom teˆ-lo por perto. So´ pra ter uma ide´ia, em uma busca ra´pida na amazon.com por livros de a´reas espec´ıficas contendo MATLAB no t´ıtulo, pode-se encontrar exemplares de pelo menos 18 a´reas: Processamento de imagens Me´todos nume´ricos Economia Reconhecimento de padro˜es Explorac¸a˜o de dados A´lgebra linear Processamento de sinais digitais Telecomunicac¸o˜es Estat´ıstica Sinais e sistemas Eletromagnetismo Ma´quinas ele´tricas Processamento de biosinais Controle Mecaˆnica Aprendizagem de ma´quina Oceanografia Neurocieˆncias Isso sem falar nos inu´meros livros espec´ıficos sobre MATLAB, como os da lista a seguir, dispon´ıveis na biblioteca da UTFPR. Programac¸a˜o em MATLAB para engenheiros, Stephen J. Chapman, 2010 [1]. Na estante da biblioteca: 005.36 C466p 2. ed. MATLAB 7: fundamentos, Elia Yathie Matsumoto, 2006 [9]. Na estante da biblioteca: 519.40285 M434mf 2.ed. MATLAB: fundamentos e programac¸a˜o, Carlos Eugenio Vendrametto Ju- nior e Selma Helena de Vasconcelos Arenales, 2004 [2]. Na estante da biblioteca: 005.369 V453m. 1 MATLAB ABC v0.2 nov.2013 MATLAB com aplicac¸o˜es em engenharia, Amos Gilat, 2006 [3]. Na estante da biblioteca: 005.36 G463m 2. ed. Essential MATLAB for engineers and scientists, Brian D. Hahn and D. T. Valentine, 2007 [13]. Na estante da biblioteca: 620.00285 H148e 3. ed. Introduction to MATLAB 7 for engineers, William J. Palm III, 2005 [10]. Na estante da biblioteca: 005.369 P171i. A seguir ha´ uma pequena lista comentada das principais caracter´ısicas (key features) e recursos oferecidos pelo MATLAB [7]. 1. Linguagem de alto n´ıvel e ferramentas de desenvolvimento para a elaborac¸a˜o e ana´lise ra´pida de algoritmos e aplicac¸o˜es. Significa que todas as ferramentas de desenvolvimento esta˜o inclu´ıdas: um editor para a elaborac¸a˜o dos programas; um debugger com recursos para a visualizac¸a˜o de varia´veis, execuc¸a˜o passo-a-passo e inclusa˜o de breakpoints; uma janela de comando para a entrada de dados, execuc¸a˜o de programas e comandos e visu- alizac¸a˜o dos resultados; uma ferramenta do tipo profiler, que realiza a ana´lise de desempenho dos programas desenvolvidos para a melhoria de determinadas linhas de co´digo; um help complet´ıssimo. Algumas caracter´ısitca importan- tes deste ambiente de desenvolvimento sa˜o a sua facilidade de configurac¸a˜o e uso. Uma vez que o MATLAB tenha sido instalado corretamente, praticamente na˜o ha´ a necessidade de configurac¸o˜es complicadas como muitas vezes ocorre em outros ambientes para outras linguagens de programac¸a˜o (inclusa˜o de bi- bliotecas, configurac¸a˜o do compilador, instalac¸a˜o da documentac¸a˜o e etc.). A interface gra´fica (ambiente propriamente dito) permite o acesso fa´cil a` grande maioria dos recursos usados com frequ¨eˆncia. Para a execuc¸a˜o e depurac¸a˜o de programas, por exemplo, esta´ dispon´ıvel um janela chamada Workspace, na qual pode-se visualizar e editar, a partir de um simples clique duplo, todas as varia´veis do programa. Uma ilustrac¸a˜o da facilidade de uso do ambiente, esta´ no fato de muitos professores utilizarem o MATLAB para o ensino de programac¸a˜o. Aquilo que tradicionalmente era feito utilizando-se pseudolinguagens e ambien- tes exclusivamente dida´ticos, pode ser realizado no ambiente e com a linguagem MATLAB [11,12]. 2. Ferramentas gra´ficas embutidas para a visualizac¸a˜o de dados e ferramen- tas para a criac¸a˜o de plots personalizados. Um ambiente de computac¸a˜o cient´ıfica como o MATLAB na˜o poderia abrir ma˜o de boas ferramentas para a elaborac¸a˜o de gra´ficos (plots). Na verdade, ‘elaborac¸a˜o de gra´ficos’ e´ uma maneira bastante simples de fazer refereˆncia a isto, ja´ que recentemente a visualizac¸a˜o de dados (agora sim um nome mais justo) esta´ assumindo o cara´ter de uma nova a´rea do conhecimento [14]. 3. Func¸o˜es matema´ticas para a´lgebra linear, estat´ıstica, ana´lise de Fourier, filtragem, otimizac¸a˜o e resoluc¸a˜o de equac¸o˜es diferenciais. Muito da capacidade do MATLAB em atender a` diferentes a´reas, como menci- onado anteriormente, e´ devida a` existeˆncia dos mo´dulos contendo func¸o˜es espe- cializadas. Cada um destes mu´dulos e´ chamado no MATLAB de toolbox [8] e e´ vendido separadamente (Add-On products). Para o processamento de imagens, por exemplo, vamos utilizar a Image Processing Toolbox [6]. 2 MATLAB ABC v0.2 nov.2013 4. Ferramentas para a construc¸a˜o de aplicac¸o˜es com interfaces gra´ficas per- sonalizadas. 5. Func¸o˜es para a integrac¸a˜o de algoritmos basados em MATLAB com aplicac¸o˜es e linguagens externas, como C, Java, .NET e Microsoft Excel. Observe que a caracter´ıstica 1 menciona tambe´m aplicac¸o˜es. Aqui, elas sa˜o mencionadas com mais eˆnfase. Embora na˜o tenhamos a necessidade de utilizar estes recursos nesta disciplina, e´ interessante conheceˆ-los para adquirirmos uma boa visa˜o geral do MATLAB. Vamos definir uma aplicac¸a˜o como um programa que na˜o necessita de um ambiente espec´ıfico para executar (o sistema opera- cional na˜o conta!), como o Microsoft Word. Um programa convencional para MATLAB na˜o e´ uma aplicac¸a˜o porque ‘so´ roda dentro do MATLAB’. Pore´m, e´ poss´ıvel transformar programas para MATLAB em aplicac¸o˜es, utilizando in- clusive interfaces gra´ficas, isto e´, janelas com boto˜es, campos para a entrada de dados e visualizac¸a˜o de resultados. Ale´m disso, e´ poss´ıvel integrar um pro- grama do MATLAB com co´digos escritos em outras linguagens (C, Java, etc.) ou com outras aplicac¸o˜es. Em outras palavras, e´ poss´ıvel, a partir do ambiente MATLAB, fazer o seu co´digo comunicar-se com co´digos em outras linguagens e tambe´m com aplicac¸o˜es (outros programas). Muitos programadores utilizam o recurso da chamada de co´digos em C (chamados de arquivos MEX no MA- TLAB [5]) por uma questa˜o de desempenho – caso uma determinada parte do programa MATLAB seja considerada muito lenta, e´ poss´ıvel escrever esta parte em C para substituir a parte correspondente do programa MATLAB. 2 2+2 Se estive´ssemos estudando uma nova linguagem de programac¸a˜o (tudo bem, de certa forma estamos), provavelmente nosso primeiro programa escreveria na tela a mensagem Hello, world , e so´. Quem ja´ estudou C deve lembrar do printf("Ola´, mundo");. No MATLAB, talvez o mais coerente seja transformar o Imprimindo ‘Hello, world’ na tela em algo como Calculando 2+2. A seguir, sa˜o descritas as treˆs maneiras ba´sicas de calcular 2+2, ou melhor, de requisitar comandos ao MATLAB: atrave´s da Command Window, atrave´s de um script ou atrave´s de uma func¸a˜o. 2.1 Calculando 2+2 na Command Window Considerando que o MATLAB ja´ foi instalado, vamos abr´ı-lo. O ambiente que voceˆ veˆ e´ chamado de desktop do MATLAB. O desktop default (padra˜o) e´ o mostrado na Figura 1. Vamos conhecer cada um dos principais elementos dodesktop e aproveitar para matar a curiosidade a respeito do resultado de 2+2. 3 MATLAB ABC v0.2 nov.2013 PDICA Para colocar o desktop na configurac¸a˜o default: menu Desktop → Desktop Layout → Default. Ainda no menu Desktop, verifique se as seguintes janelas esta˜o ativas (com D): Command Window, Command His- tory, Current Directory, Workspace, Editor, Variable Editor, Titles. Figura 1: Configurac¸a˜o default do desktop do MATLAB e cada um dos seus elementos. Current Directory: e´ o direto´rio (pasta) de trabalho. E´ neste direto´rio que 4 MATLAB ABC v0.2 nov.2013 sera˜o salvos os seus programas e tambe´m onde o MATLAB espera encontrar os arquivos que voceˆ eventualmente ira´ utilizar nos seus programas ou nos coman- dos inseridos na linha de comando (ainda existe o Path, mas e´ assunto para mais tarde). Os arquivos mais comuns do MATLAB sa˜o os scripts, com extenc¸a˜o .m, e as vara´veis, com extensa˜o .mat. Em breve vamos aborda´-los com mais deta- lhes. Tambe´m podem estar neste direto´rio arquivos contendo os dados a serem processados ou salvos pelos seus programas MATLAB, como imagens, a´udio, comma-separated values, etc. PDICA E´ poss´ıvel configurar O MATLAB para que, logo ao ser aberto, o Current Directory seja o da sua prefereˆncia. Para isso, clique com o bota˜o direito no ı´cone do MA- TLAB no desktop do Windows e escolha a opc¸a˜o Pro- perties. Na janela MATLAB version Properties, edite o campo Start in. Command Window: e´ nesta janela de comando, ou prompt, que sa˜o inse- ridos os comandos e visualizadas as sa´ıdas (respostas) do MATLAB. Digite 2+2 <enter>. >> 2+2 ans = 4 5 MATLAB ABC v0.2 nov.2013 PDICA E´ prova´vel que na Command Window do seu MATLAB exista um espac¸o de uma linha entre o 2+2, ans e 4. E´ poss´ıvel suprimir estas linhas vazias para economi- zar espac¸o na Command Window. Para isso, va´ no menu File → Preferences. . .. Na janela Preferences, clique em Command Window do lado esquerdo e altere o paraˆmetro Numeric Display de loose para compact. Outra maneira de efetuar esta configurac¸a˜o e´ atrave´s da linha de comando, digitando o comando format compact. Workspace: apresenta todas as varia´veis criadas, tambe´m chamado de base Workspace. Observe na linha de comando que o resultado de 2+2 foi arma- zenado automaticamente em uma varia´vel com o nome ans (answer). Assim, o Workspace conte´m agora uma varia´vel chamada ans, cujo conteu´do e´ 4. Se inserirmos agora 2+3, por exemplo, o conteu´do da varia´vel ans sera´ sobrescrita com o valor 5. Enta˜o, o mais prudente e´ armazenar os resultados dos comandos nas nossas pro´prias varia´veis. Por exemplo: >> a = 2+2 a = 4 >> b = 2+3 b = 5 Command History: armazena o histo´rico dos comando inseridos. Na Com- mand Window, e´ poss´ıvel ‘navegar’ pelos comando inseridos utilizando as teclas <↑> e <↓>. Variable Editor: permite visualisar e editar o conteu´do das varia´veis. Ao dar dois cliques sobre o nome da varia´vel no Workspace, o Variable Editor e´ aberto automaticamente e o conteu´do da varia´vel pode ser editado. Editor: e´ nesta janela que voceˆ vai escrever os seus programas para MATLAB. 2.2 Calculando 2+2 em um script Ate´ o momento, sabemos explicar o que e´ o MATLAB e como usa´-lo para calcular 2+2 na linha de comando, mas ainda na˜o fizemos um programa para 6 MATLAB ABC v0.2 nov.2013 MATLAB. Antes desse pro´ximo passo, atenc¸a˜o para uma informac¸a˜o daquelas que geralmente so´ aparecem nas entrelinhas: no MATLAB, os programas sa˜o chamados de scripts. Um script MATLAB e´ um arquivo .m com va´rios comandos em sequeˆncia. Para na˜o restarem du´vidas: ao ser executado o script, os comandos nele contidos sa˜o executados na sequeˆncia em que aparecem. Afinal de contas, um script e´ um programa. Vamos elaborar um script para realizar os mesmos ca´lculos sofisticados que realizamos anteriormente. Passo 1. Na janela Editor do desktop do MATLAB, requisite um novo arquivo M (M-File) clicando no ı´cone de uma folha em branco (New M-File). Se preferir, tambe´m e´ poss´ıvel fazer isto no menu File → New → Blank M- File, ou ainda atrave´s do atalho Ctrl+N. Dentro da janela Editor digite a mesma sequeˆncia de comandos. Por enquanto, na˜o se preocupe com os highlights em cor laranja. Passo 2. Salve o script, clicando no ı´cone do disquete ou no menu File → Save, ou ainda atrave´s do atalho Ctrl+S. Vamos salvar com o nome meuPrimS- cript. Como se trata de um script, o MATLAB sugere automaticamente a extenc¸a˜o .m. Observe que o arquivo meuPrimScript.m, depois de salvo, aparece na janela Current Directory. Passo 3. Execute o script, digitando meuPrimScript na Command Window. O´timo, agora o seu primeiro scriptzinho esta´ funcionando, salvo e pode ser copiado e executado em qualquer MATLAB. Caso exista tambe´m um ar- quivo com o mesmo nome do seu script e extenc¸a˜o .asv (neste caso meuPrimS- cript.asv), sem problemas. Estes arquivos sa˜o gerados automaticamente pelo MATLAB para backup (asv significa autosave), como e´ o caso dos arquivos .tmp (temporary) do Microsoft Word, por exemplo. Na˜o e´ necessa´rio copiar este arquivo para rodar o seu script em outra ma´quina. PDICA E´ interessante manter as configurac¸o˜es padra˜o do au- tosave do MATLAB. Se for necessa´rio altera´-las, o ca- minho e´ menu File → Preferences. . .. Na janela Prefe- rences, clique em Editor/Debugger – Autosave do lado esquerdo. Uma vez que o script fez a mesma coisa que os comandos que hav´ıamos digi- tado anteriormente na Command Window, na˜o vimos alterac¸a˜o no workspace. Mas voceˆ deve ter notado que os resultados foram mostrados na Command Win- dow. Se na˜o, pode rodar o script a` vontade, n + 1 vezes. Mas ao inve´s de ir 7 MATLAB ABC v0.2 nov.2013 ate´ a Command Window e escrever meuPrimScript, basta estar com a janela Editor ativada (selecionada) e usar a tecla de atalho F5. Isto e´ o mesmo que clicar no ı´cone que lembra uma tecla play da janela Editor, o Save and run. Ob- serve tambe´m que, ao fazer alguma alterac¸a˜o no conteu´do do script, o nome do arquivo presente no topo da janela Editor recebe um ‘*’ no final (“aster´ıstico”, como dizem la´ na minha terra natal). Isto indica que as suas alterac¸o˜es na˜o foram salvas. Enta˜o, antes de executar o seu script, sempre e´ bom salva´-lo. O me´todo mais pra´tico e´ usando o Save and run a partir do atalho F5. Na maioria das vezes na˜o e´ necessa´rio mostrar os resultados de todos os comandos na Command Window. Inserindo um ‘;’ apo´s o comando, ele e´ execu- tado mas a exibic¸a˜o do resultado na Command Window na˜o e´ realizada. Teste o ‘;’ no nosso script: a = 2+2; b = 2+3; Antes de executar observe que, ao inserir o ‘;’, o highlight em cor laranja sobre o ‘=’ desaparece. Na verdade, o MATLAB estava nos oferecendo esta dica todo o tempo. Note que ha´ um trac¸o cor laranja na borda direita do Editor, na linha sem o ‘;’. Estes trac¸os sa˜o Warnings (avisos, adverteˆncias). Ao passar o mouse sobre o Warning, a mensagem correspondente e´ exibida, como ilustra a Figura 2. Para limpar a Command Window e ter certeza de que o script na˜o mostrou nenhuma sa´ıda, basta digitar o comando clc (Clear Command Window). Digite clc na Command Window e depois rode novamente o script. Figura 2: Os trac¸os em cor laranja na borda direira do Editor sa˜o os Warnings. Ao passar o mouse a mensagem e´ mostrada. Como pudemos observar, as varia´veis criadas por um script va˜o para o Workspace e, se no Workspace ja´ existir uma varia´vel com o mesmo nome, ela sera´ sobrescrita. Ao mesmo tempo, as varia´veis que esta˜o no Workspace podem ser acessadas a partir de um script. Vamos aproveitar as varia´veis a e b do workspace e testar esta afirmac¸a˜o. Apague o conteu´do do nosso script, transformando-o em: c = a+b; Apo´s executa´-lo, existira´ uma varia´vel c com valor 9 no Workspace. Istoso´ ocorreu porque o script acessou as varia´veis a (valor 4) e b (valor 5) que ja´ estavam no workspace. Assim, uma pra´tica recomenda´vel e´ limpar o Workspace logo no in´ıcio do script, para evitar confuso˜es. O comando para excluir todas as varia´veis do Workspace e´ clear. Este comando pode ser seguido por nomes de varia´veis, caso se deseje excluir varia´veis espec´ıficas. Por exemplo: clear a b, enquanto 8 MATLAB ABC v0.2 nov.2013 clear all e´ o mesmo que apenas clear. Se inserirmos um clear all no in´ıcio do script atual clear all c = a+b; o MATLAB retornara´ um erro ao executa´-lo. A mensagem de erro e´ ??? Undefined function or variable ’a’. Error in ==> meuSegScript at 2 c = a+b; Acontece que requisitamos uma soma das varia´veis a e b, mas as varia´veis na˜o existem. Enta˜o, o estranho mesmo seria se o MATLAB na˜o retornasse um erro. E´ poss´ıvel clicar sobre o erro na Command Window para ir diretamente para a linha do script que gerou o erro. Este e´ um recurso interessante para a depurac¸a˜o de scripts mais extensos. Para deixar nosso meuPrimScript.m funcional: clear all a = 4; b = 5; c = a+b; 2.3 Calculando 2+2 em uma func¸a˜o Direto ao ponto: uma func¸a˜o e´ um bloco de co´digo com um nome. Pode rece- ber e retornar paraˆmetros e ser chamada de diferentes partes de um programa. Simples e genial, pois o co´digo “encapsulado na forma de uma func¸a˜o” pode ser reutilizado quando necessa´rio, ao inve´s de ser repetido dentro do programa, o que seria mais trabalhoso e ocuparia mais espac¸o em memo´ria. Ale´m disso, as func¸o˜es sa˜o um recurso valioso para o gerenciamento da complexidade de um programa. As func¸o˜es podem ser criadas (ou definidas) pelo usua´rio – deno- minadas user-defined, ou ja´ estarem predefinidas no ambiente – denominadas built-in. 2.3.1 Func¸o˜es user-defined No MATLAB, as func¸o˜es tambe´m sa˜o escritas em arquivos .m, assim como os scripts, mas existem diferenc¸as importantes entre os dois, especialmente: Uma func¸a˜o pode receber e retornar paraˆmetros “no pro´prio nome”, um script na˜o. Um script utiliza o base Workspace. Uma func¸a˜o possui seu pro´prio Works- pace e comunica-se com o base Workspace atrave´s dos paraˆmetros de en- trada e sa´ıda. Ao inve´s de calcularmos o valor da soma de duas constantes (2+2), vamos criar uma func¸a˜o para calcular a soma de dois nu´meros quaisquer. 9 MATLAB ABC v0.2 nov.2013 Passo 1. Requisite um novo arquivo M e insira o corpo da func¸a˜o, como mos- trado abaixo. k1 e k2 sa˜o os paraˆmetros de entrada e s e´ o paraˆmetro de sa´ıda. A sintaxe e´ sempre esta: paraˆmetro(s) de entrada nos pareˆnteses apo´s o nome da func¸a˜o e paraˆmetro(s) de sa´ıda antes do =. function s = meuPrimFun(k1,k2) s = k1+k2; end Passo 2. Salve a func¸a˜o. Observe que o MATLAB sugere um arquivo .m com o mesmo nome da func¸a˜o. Neste caso, meuPrimFun.m. Passo 3. Chame a func¸a˜o a partir da Command Window. Deve-se inserir os paraˆmetros de entrada e a varia´vel de sa´ıda: >> d = meuPrimFun(4,5) d = 7 Ou enta˜o podemos passar para a func¸a˜o duas varia´veis, ao inve´s de duas constantes: >> p = 4; >> q = 5; >> e = meuPrimFun(p,q) e = 7 Observe que as varia´veis internas da func¸a˜o, k1, k2 e s, na˜o aparecem no base Workspace. Outro detalhe importante e´ que o MATLAB reconhece a func¸a˜o pelo nome do arquivo .m, e na˜o pelo nome da func¸a˜o declarado na linha de co´digo iniciada por function. Obviamente, e´ importante manter o mesmo nome para evitar confuso˜es. 2.3.2 Func¸o˜es built-in Conforme mencionado anteriormente, o MATLAB disponibiliza um grande nu´mero de func¸o˜es para diferentes aplicac¸o˜es. Como um exemplo simples, vamos utilizar a func¸a˜o exp, que calcula o valor de ex. Na Command Window: >> f = exp(1) f = 2.718281828459046 Para acessar a documentac¸a˜o da func¸a˜o a partir da Command Window, pode-se utilizar o comando help exp. Neste caso, a descric¸a˜o e´ mostrada na forma de texto, na pro´pria Command Window. Para acessar a GUI (Graphical User Interface) do Help do MATLAB a partir da Command Window, o comando e´ doc exp. Prefira sempre o Help com a GUI, ja´ que e´ muito mais agrada´vel e completo. 10 MATLAB ABC v0.2 nov.2013 Segundo a nossa terminologia, todas as func¸o˜es predefinidas do MATLAB sa˜o denominadas built-in (a contraparte de user-defined). Em geral, a literatura sobre o MATLAB adota esta mesma terminologia. Pore´m, se voceˆ encontrar um matlaber mais conservador por a´ı, pode ser que ele te explique que existem treˆs tipos de func¸o˜es predefinidas no MATLAB. De maneira simplificada: Func¸o˜es built-in: a MathWorks na˜o disponibiliza o co´digo fonte destas func¸o˜es. A func¸a˜o exp e´ um exemplo. Para visualizar as informac¸o˜es das func¸o˜es do MATLAB, pode-se usar o comando which seguido do nome da func¸a˜o. Digite o comando a seguir e observe o retorno. Ale´m do campo built-in, e´ poss´ıvel saber o caminho da func¸a˜o. >> which exp built-in (C:\Program Files\MATLAB\toolbox\matlab\ elfun\@double\exp) Func¸o˜es do plain MATLAB : este termo tambe´m e´ uma convenc¸a˜o adotada pelos usua´rios do MATLAB. Plain MATLAB e´ o MATLAB ba´sico, aquele distribu´ıdo quando adquire-se somente o MATLAB e nenhuma toolbox extra ou add-on. A func¸a˜o mean para o ca´lculo da me´dia e´ um exemplo de func¸a˜o do plain MATLAB. >> which mean C:\Program Files\MATLAB\R2009a\toolbox\matlab\ datafun\mean.m Func¸o˜es pertencentes a uma toolbox : sa˜o as func¸o˜es que fazem parte de al- gum mo´dulo para aplicac¸a˜o espec´ıfica, denominado toolbox. E´ importante lembrar que, se o seu programa MATLAB utiliza alguma destas func¸o˜es, ele so´ podera´ ser executado em uma versa˜o do MATLAB que tambe´m possua a toolbox em questa˜o. A func¸a˜o imread para ler um arquivo de imagem e´ um exemplo. >> which imread C:\Program Files\MATLAB\R2009a\toolbox\matlab\ imagesci\imread.m O comando ver lista as toolboxes dispon´ıveis no seu MATLAB. 3 Matrix laboratory Ja´ que MATLAB significa MATrix LABoratory, e´ de se imaginar que a estru- tura de dados do tipo matriz desempenhe um papel de destaque no ambiente. Inclusive, que ha´ quem diga que “tudo no MATLAB e´ tratado como matriz”. Faz sentido [4]. 3.1 Matriz, vetor e array Um array (arranjo) pode ser definido como um conjunto de dados no qual cada elemento e´ acessado a partir de um ı´ndice. Enta˜o, em computac¸a˜o, matrizes e vetores geralmente esta˜o na categoria dos arrays. Ja´ um escalar (nu´mero 11 MATLAB ABC v0.2 nov.2013 isolado) na˜o pertence a` categoria dos arrays. No MATLAB, como as matrizes sa˜o as queridinhas, a terminologia e´ um pouco diferente, conforme descrito nos itens a seguir e exemplificado na Figura 3. Matriz (matrix): uma estrutura de dados bidimensional, retangular. A notac¸a˜o para as dimenso˜es de uma matriz e´ nu´mero de linhas-por-nu´mero de colunas. Escalar (single number): uma matriz de dimenso˜es 1-por-1. Vetor linha (row vector): uma matriz de dimenso˜es 1-por-n. Vetor coluna (column vector): uma matriz de dimenso˜es n-por-1. Array multidimensional : um array com mais de duas dimenso˜es. Sa˜o extenso˜es das matrizes. e(1,1,2) e(1,2,2) e(1,3,2) e(2,1,2) e(2,2,2) e(2,3,2) e(3,1,1) e(3,2,2) e(3,3,2) a(1,1) a(1,2) a(1,3) a(2,1) a(2,2) a(2,3) a(3,1) a(3,2) a(3,3) e(1,1,1) e(1,2,1) e(1,3,1) e(2,1,1) e(2,2,1) e(2,3,1) e(3,1,1) e(3,2,1) e(3,3,1) b(1) b(2) b(3) b(4) d c(1) c(2) c(3) c(4) Matriz 3-por-3 Array 3-por-3-por-2 Vetor linha de 4 elementos (matriz 1-por-4) Vetor coluna de 4 elementos (matriz 4-por-1) Escalar (matriz 1-por-1) Figura 3: Exemplos de estruturas de dados do tipo matriz, escalar, vetor linha, vetor coluna e array multidimensional. Os nu´meros dentro dos pareˆnteses sa˜o os ı´ndices para o acessodos elementos. A estrutura ba´sica sempre e´ a matriz. O array multi- dimensional e´ uma matriz com mais de duas dimenso˜es. Neste exemplo, treˆs: linhas, colunas e pa´ginas. Para criar uma matriz, o me´todo mais simples e´ utilizando o operador col- chetes: >> a = [-1 0 1; 2 3 4; 5 6 7] a = -1 0 1 2 3 4 5 6 7 Os elementos de uma mesma linha sa˜o separados por espac¸o. O ponto e v´ırgula inicia uma nova linha. Tambe´m e´ poss´ıvel separar os elementos de uma mesma linha por v´ırgula, mas a notac¸a˜o mais utilizada e´ com espac¸os. 12 MATLAB ABC v0.2 nov.2013 >> a = [-1,0,1; 2,3,4; 5,6,7] a = -1 0 1 2 3 4 5 6 7 Enta˜o, um vetor linha e´ >> b = [8 9 10 0] b = 8 9 10 0 e um vetor coluna >> c = [12; 13; 14; 0] c = 12 13 14 0 Um escalar, como ja´ vimos anteriormente >> d = 16 d = 16 Observe a descric¸a˜o de cada uma destas varia´veis no Workspace, ou utilize o comando whos para listar as varia´veis do Workspace: >> whos Name Size Bytes Class a 3x3 72 double b 1x4 32 double c 4x1 32 double d 1x1 8 double O detalhe interessante e´ que o escalar d tambe´m e´ uma matriz, de dimenso˜es 1x1. Para indexar (acessar ou enderec¸ar) os elementos das matrizes, utiliza-se a notac¸a˜o nome(ı´ndice_da_linha,ı´ndice_da_coluna) Como vetores possuem uma u´nica dimensa˜o, a notac¸a˜o e´ nome(ı´ndice) Lembre que no MATLAB o ı´ndice do primeiro elemento e´ 1 (one-based indexing. A contraparte e´ o zero-based indexing). Por exemplo, para obter o elemento da segunda linha e terceira coluna da matriz a: >> a(2,3) ans = 1 13 MATLAB ABC v0.2 nov.2013 O terceiro elemento dos vetores b e c: >> b(3) ans = 10 >> c(3) ans = 14 Obviamente, tambe´m e´ poss´ıvel atribuir novos valores nas posic¸o˜es desejadas: >> a(3,3) = 7 a = -1 0 1 2 3 4 5 6 7 >> b(4) = 11 b = 8 9 10 11 >> c(4) = 15 c = 12 13 14 15 O operador apo´strofo retorna a matriz transposta, aquela obtida a partir de troca de linhas por colunas: >> at = a’ at = -1 2 5 0 3 6 1 4 7 Assim, um vetor linha pode ser transformado facilmente em um vetor coluna e vice-versa: >> bt = b’ bt = 8 9 10 11 >> ct = c’ ct = 12 13 14 15 Da mesma forma, o nosso vetor coluna c poderia ter sido criado assim: >> c = [12 13 14 15]’ c = 12 14 MATLAB ABC v0.2 nov.2013 13 14 15 Ao acessar um elemento fora das dimenso˜es ma´ximas da matriz, um erro e´ retornado: >> a(1,4) ??? Attempted to access a(1,4); index out of bounds because size(a)=[3,3]. >> b(5) ??? Attempted to access b(5); index out of bounds because numel(b)=4. >> c(6) ??? Attempted to access c(6); index out of bounds because numel(c)=4. Agora, ATENC¸A˜O! Ao atribuir um valor a um elemento fora das dimenso˜es ma´ximas da matriz, as dimenso˜es da matriz sa˜o ampliadas para acomodar o novo elemento e os elementos que na˜o foram especificados recebem valor zero. Lembre que todas as estruturas sa˜o consideradas matrizes, inclusive um escalar. Por exemplo: >> a(3,4) = 7 a = -1 0 1 0 2 3 4 0 5 6 7 7 >> b(5) = 11 b = 8 9 10 11 11 >> c(6) = 15 c = 12 13 14 15 0 15 >> d(4) = 16 d = 16 0 0 16 Antes de achar que isto e´ estranho, observe que este comportamento esta´ co- erente com o fato do MATLAB na˜o requisitar a declarac¸a˜o de varia´veis: se e´ permitido fazer k = 3 sem avisar o MATLAB que k e´ um escalar, tambe´m deve ser poss´ıvel fazer k(2,4) = 3 sem avisar que e´ uma matriz. E se depois requi- sitarmos k(3,6) = 6.2, o MATLAB aloca dinamicamente mais espac¸o para k. Por questo˜es de desempenho, e´ recomenda´vel evitar esta alocac¸a˜o dinaˆmica 15 MATLAB ABC v0.2 nov.2013 dentro de um loop e pre´-alocar todo o espac¸o necessa´rio para a matriz. Mas isso e´ assunto para mais tarde. O operador colchete pode ser utilizado ainda para concatenar matrizes. A concatenac¸a˜o so´ e´ permitida entre dimenso˜es equivalentes. A Figura 4 ilus- tra diferentes possibilidades de concatenac¸a˜o e situac¸o˜es nas quais um erro e´ retornado, pois as dimenso˜es nas quais a concatenac¸a˜o e´ requisitada na˜o sa˜o equivalentes. Por exemplo, as matrizes p e r na˜o podem ser concatenadas ver- ticalmente porque na˜o possuem o mesmo nu´mero de colunas. As matrizes s e v transposta na˜o podem ser concatenadas horizontalmente porque na˜o possuem o mesmo nu´mero de linhas. p r q 4 0 8.9 6 8 4 1 2 3.5 7 s 9.3 6 4 6 3.7 1 2 4.4 9 t = [r p] 6 8 4 1 2 3.5 7 2 3.5 7 4 0 8.9 4 0 8.9 u = [p; q; q] v = [p; r] 2 3.5 7 6 8 4 1 2 3.5 7 6 8 4 ERRO ERRO x = [s u] 9.3 6 4 2 3.5 7 6 3.7 1 4 0 8.9 2 4.4 9 4 0 8.9 y = [s r’] 9.3 6 4 6 6 3.7 1 8 2 4.4 9 4 1 z = [s; p] 9.3 6 4 6 3.7 1 2 4.4 9 2 3.5 7 w = [z r’] 9.3 6 4 6 6 3.7 1 8 2 4.4 9 4 2 3.5 7 1 Figura 4: Exemplos de concatenac¸a˜o de matrizes usando o operador colchetes. p, q, r e s sa˜o as matrizes originais, t, u, v, x, y, z e w sa˜o resultados das concatenac¸o˜es. v e y retornam erro pois as dimenso˜es nas quais a concatenac¸a˜o e´ requisitada na˜o sa˜o equivalentes. Indexar vetores com um u´nico ı´ndice e´ absolutamente lo´gico. Mas como o MATLAB adora matrizes, a notac¸a˜o nome(linha,coluna) e´ aceita tambe´m para a indexac¸a˜o de vetores, embora provavelmente voceˆ na˜o va´ utilizar esta indexac¸a˜o, ja´ que e´ redundante. De qualquer forma, basta lembrar que uma das dimenso˜es (linha ou coluna) e´ sempre igual a 1: >> b(1,5) ans = 11 >> c(5,1) ans = 0 Como o MATLAB e´ muito versa´til, tambe´m e´ poss´ıvel indexar matrizes com a notac¸a˜o nome(ı´ndice). Pode parecer pouco lo´gico, mas e´ um recurso utilizado, como veremos mais adiante. Este tipo de indexac¸a˜o e´ chamada de 16 MATLAB ABC v0.2 nov.2013 indexac¸a˜o linear (linear indexing). Os ı´ndices sa˜o incrementados ao longo das colunas, uma vez que o MATLAB sempre armazena as estruturas de dados em uma u´nica coluna, independente do seu formato original. Por exemplo: >> a(5) ans = 3 Ainda falta criar um array. O operador dois pontos ira´ nos auxiliar nesta tarefa e em muitas outras. 3.2 Operador dois pontos ‘:’ (colon) 3.3 Func¸o˜es para criar, concatenar e reformatar matrizes 3.4 Func¸o˜es para obter as dimenso˜es das matrizes 4 Pedindo ajuda ATENC¸A˜O Este documento MATLAB ABC esta´ em elaborac¸a˜o. Por enquanto e´ so´. Mas na˜o fique desapontado, por a´ı ha´ mui- tas outras boas opc¸o˜es de leitura para o banheiro. Refereˆncias [1] Stephen J. Chapman. Programac¸a˜o em MATLAB para engenheiros. CEN- CAGE Learning, 2a edition, 2010. [2] Carlos Eugenio Vendrametto Junior; Selma Helena de Vasconcelos Arena- les. MATLAB: fundamentos e programac¸a˜o. 2004. [3] Amos Gilat. MATLAB com aplicac¸o˜es em engenharia. Bookman, 2a edi- tion, 2006. [4] MathWorks. Creating and concatenating matrices. http://www.mathworks.com/help/matlab/math/ creating-and-concatenating-matrices.html?s_tid=doc_ 12b, Oct. 2012. [5] MathWorks. Ducumentation center - introducing mex-files. http://www.mathworks.com/help/matlab/matlab_external/ introducing-mex-files.html, Sep. 2012. 17 MATLAB ABC v0.2 nov.2013 [6] MathWorks. Image processing toolbox overview. http://www. mathworks.com/products/image/, Sep. 2012. [7] MathWorks. Matlab – key features. http://www.mathworks.com/ products/matlab/description1.html, Sep. 2012. [8] MathWorks. Products and services. http://www.mathworks.com/ products/, Sep. 2012. [9] Elia Yathie Matsumoto. MATLAB 7: fundamentos. Erica, 2006. [10] William J. Palm III. Introduction to MATLAB 7 for engineers. McGraw- Hill, 2005. [11] Yuri Rojan. Learn Programming and Mathematics with MATLAB. Yuri Rojan, 2005. [12] Khalid Sayood. Learning Programming using MATLAB (Synthesis Lectures on Electrical Engineering).2006. [13] Brian D. Hahn; D. T. Valentine. Essential MATLAB for engineers and scientists. Butterworth Heinemann, 3rd edition, 2007. [14] Wikipedia. Data visualization. http://en.wikipedia.org/wiki/ Data_visualization, Sep. 2012. 18 1001 utilidades 2+2 Calculando 2+2 na Command Window Calculando 2+2 em um script Calculando 2+2 em uma função Funções user-defined Funções built-in Matrix laboratory Matriz, vetor e array Operador dois pontos `:' (colon) Funções para criar, concatenar e reformatar matrizes Funções para obter as dimensões das matrizes Pedindo ajuda
Compartilhar