matlab abc - introdução ao...

18
Universidade Tecnol´ogica Federal do Paran´ a– UTFPR Departamento Acadˆ emico de Eletrˆonica – DAELN MATLAB ABC Introdu¸ ao ao MATLAB Gustavo B. Borba 1 1001 utilidades Todos lembramos do conhecido slogan 1001 utilidades das palhas de a¸ co Bombril, apesar de nunca algu´ em ter tentado catalogar cada uma delas. ´ E claro que algumas s˜ ao cl´ assicas. Por exemplo: atear fogo e gi- rar para animar a festa junina, fazer fogo dando um curto-circuito na tomada (n˜ ao tente fazer isso), en- gatar na anteninha da tv achando que vai melhorar arecep¸c˜ ao e at´ e limpar coisas. ao h´ a d´ uvidas de que o Bombril ´ e realmente vers´ atil e as donas de casa adoram ter sempre um por perto. Se vocˆ e j´ a usou o MATLAB ou sabe o que ´ e, j´ a deve ter entendido porque estamos falando do Bombril. Segundo a MathWorks, empresa que desenvolve o MATLAB, ele se trata de um ambiente para computa¸ ao cient´ ıfica. Segundo os engenheiros, programadores, cientistas e outros usu´ arios, o MATLAB ´ e uma indispens´ avel ferramenta para 1001 utilidades e sempre ´ e bom tˆ e-lo por perto. o pra ter uma id´ eia, em uma busca r´ apida na amazon.com por livros de ´ areas espec´ ıficas contendo MATLAB no t´ ıtulo, pode-se encontrar exemplares de pelo menos 18 ´ areas: Processamento de imagens etodos num´ ericos Economia Reconhecimento de padr˜ oes Explora¸ ao de dados ´ Algebra linear Processamento de sinais digitais Telecomunica¸c˜ oes Estat´ ıstica Sinais e sistemas Eletromagnetismo aquinas el´ etricas Processamento de biosinais Controle Mecˆ anica Aprendizagem de m´ aquina Oceanografia Neurociˆ encias Isso sem falar nos in´ umeros livros espec´ ıficos sobre MATLAB, como os da lista a seguir, dispon´ ıveis na biblioteca da UTFPR. Programa¸c˜ ao 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 programa¸ ao, Carlos Eugenio Vendrametto Ju- nior e Selma Helena de Vasconcelos Arenales, 2004 [2]. Na estante da biblioteca: 005.369 V453m. 1

Upload: ngoanh

Post on 11-Nov-2018

226 views

Category:

Documents


0 download

TRANSCRIPT

Universidade Tecnologica Federal do Parana – UTFPR

Departamento Academico de Eletronica – DAELN

MATLAB ABCIntroducao ao MATLAB

Gustavo B. Borba

1 1001 utilidades

Todos lembramos do conhecido slogan 1001 utilidadesdas palhas de aco Bombril, apesar de nunca alguemter tentado catalogar cada uma delas. E claro quealgumas sao classicas. Por exemplo: atear fogo e gi-rar para animar a festa junina, fazer fogo dando umcurto-circuito na tomada (nao tente fazer isso), en-gatar na anteninha da tv achando que vai melhorara recepcao e ate limpar coisas. Nao ha duvidas deque o Bombril e realmente versatil 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 desenvolveo MATLAB, ele se trata de um ambiente para computacao cientıfica. Segundoos engenheiros, programadores, cientistas e outros usuarios, o MATLAB e umaindispensavel ferramenta para 1001 utilidades e sempre e bom te-lo por perto.So pra ter uma ideia, em uma busca rapida na amazon.com por livros de areasespecıficas contendo MATLAB no tıtulo, pode-se encontrar exemplares de pelomenos 18 areas:

Processamento de imagens Metodos numericos Economia

Reconhecimento de padroes Exploracao de dados Algebra linearProcessamento de sinais digitais Telecomunicacoes EstatısticaSinais e sistemas Eletromagnetismo Maquinas eletricasProcessamento de biosinais Controle MecanicaAprendizagem de maquina Oceanografia Neurociencias

Isso sem falar nos inumeros livros especıficos sobre MATLAB, como os dalista a seguir, disponıveis na biblioteca da UTFPR.

� Programacao 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 estanteda biblioteca: 519.40285 M434mf 2.ed.

� MATLAB: fundamentos e programacao, Carlos Eugenio Vendrametto Ju-nior e Selma Helena de Vasconcelos Arenales, 2004 [2]. Na estante dabiblioteca: 005.369 V453m.

1

MATLAB ABC v0.2 nov.2013

� MATLAB com aplicacoes em engenharia, Amos Gilat, 2006 [3]. Na estanteda 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 (keyfeatures) e recursos oferecidos pelo MATLAB [7].

1. Linguagem de alto nıvel e ferramentas de desenvolvimento para a elaboracaoe analise rapida de algoritmos e aplicacoes.Significa que todas as ferramentas de desenvolvimento estao incluıdas: um editorpara a elaboracao dos programas; um debugger com recursos para a visualizacaode variaveis, execucao passo-a-passo e inclusao de breakpoints; uma janela decomando para a entrada de dados, execucao de programas e comandos e visu-alizacao dos resultados; uma ferramenta do tipo profiler, que realiza a analisede desempenho dos programas desenvolvidos para a melhoria de determinadaslinhas de codigo; um help completıssimo. Algumas caracterısitca importan-tes deste ambiente de desenvolvimento sao a sua facilidade de configuracao euso. Uma vez que o MATLAB tenha sido instalado corretamente, praticamentenao ha a necessidade de configuracoes complicadas como muitas vezes ocorreem outros ambientes para outras linguagens de programacao (inclusao de bi-bliotecas, configuracao do compilador, instalacao da documentacao e etc.). Ainterface grafica (ambiente propriamente dito) permite o acesso facil a grandemaioria dos recursos usados com frequencia. Para a execucao e depuracao deprogramas, por exemplo, esta disponıvel um janela chamada Workspace, naqual pode-se visualizar e editar, a partir de um simples clique duplo, todas asvariaveis do programa. Uma ilustracao da facilidade de uso do ambiente, esta nofato de muitos professores utilizarem o MATLAB para o ensino de programacao.Aquilo que tradicionalmente era feito utilizando-se pseudolinguagens e ambien-tes exclusivamente didaticos, pode ser realizado no ambiente e com a linguagemMATLAB [11,12].

2. Ferramentas graficas embutidas para a visualizacao de dados e ferramen-tas para a criacao de plots personalizados.Um ambiente de computacao cientıfica como o MATLAB nao poderia abrirmao de boas ferramentas para a elaboracao de graficos (plots). Na verdade,‘elaboracao de graficos’ e uma maneira bastante simples de fazer referencia aisto, ja que recentemente a visualizacao de dados (agora sim um nome maisjusto) esta assumindo o carater de uma nova area do conhecimento [14].

3. Funcoes matematicas para algebra linear, estatıstica, analise de Fourier,filtragem, otimizacao e resolucao de equacoes diferenciais.Muito da capacidade do MATLAB em atender a diferentes areas, como menci-onado anteriormente, e devida a existencia dos modulos contendo funcoes espe-cializadas. Cada um destes mudulos e chamado no MATLAB de toolbox [8] e evendido 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 construcao de aplicacoes com interfaces graficas per-sonalizadas.5. Funcoes para a integracao de algoritmos basados em MATLAB com aplicacoese linguagens externas, como C, Java, .NET e Microsoft Excel.Observe que a caracterıstica 1 menciona tambem aplicacoes. Aqui, elas saomencionadas com mais enfase. Embora nao tenhamos a necessidade de utilizarestes recursos nesta disciplina, e interessante conhece-los para adquirirmos umaboa visao geral do MATLAB. Vamos definir uma aplicacao como um programaque nao necessita de um ambiente especıfico para executar (o sistema opera-cional nao conta!), como o Microsoft Word. Um programa convencional paraMATLAB nao e uma aplicacao porque ‘so roda dentro do MATLAB’. Porem,e possıvel transformar programas para MATLAB em aplicacoes, utilizando in-clusive interfaces graficas, isto e, janelas com botoes, campos para a entradade dados e visualizacao de resultados. Alem disso, e possıvel integrar um pro-grama do MATLAB com codigos escritos em outras linguagens (C, Java, etc.)ou com outras aplicacoes. Em outras palavras, e possıvel, a partir do ambienteMATLAB, fazer o seu codigo comunicar-se com codigos em outras linguagense tambem com aplicacoes (outros programas). Muitos programadores utilizamo recurso da chamada de codigos em C (chamados de arquivos MEX no MA-TLAB [5]) por uma questao de desempenho – caso uma determinada parte doprograma MATLAB seja considerada muito lenta, e possıvel escrever esta parteem C para substituir a parte correspondente do programa MATLAB.

2 2+2

Se estivessemos estudando uma nova linguagem de programacao (tudo bem,de certa forma estamos), provavelmente nosso primeiro programa escreveriana tela a mensagem Hello, world , e so. Quem ja estudou C deve lembrardo printf("Ola, mundo");. No MATLAB, talvez o mais coerente sejatransformar o Imprimindo ‘Hello, world’ na tela em algo como Calculando 2+2.A seguir, sao descritas as tres maneiras basicas de calcular 2+2, ou melhor, derequisitar comandos ao MATLAB: atraves da Command Window, atraves deum script ou atraves de uma funcao.

2.1 Calculando 2+2 na Command Window

Considerando que o MATLAB ja foi instalado, vamos abrı-lo. O ambiente quevoce ve e chamado de desktop do MATLAB. O desktop default (padrao) e omostrado 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 configuracao default: menuDesktop → Desktop Layout → Default. Ainda nomenu Desktop, verifique se as seguintes janelas estaoativas (com D): Command Window, Command His-tory, Current Directory, Workspace, Editor, VariableEditor, Titles.

Figura 1: Configuracao default do desktop do MATLAB e cada um dos seus elementos.

Current Directory: e o diretorio (pasta) de trabalho. E neste diretorio que

4

MATLAB ABC v0.2 nov.2013

serao salvos os seus programas e tambem onde o MATLAB espera encontrar osarquivos 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 maistarde). Os arquivos mais comuns do MATLAB sao os scripts, com extencao .m,e as varaveis, com extensao .mat. Em breve vamos aborda-los com mais deta-lhes. Tambem podem estar neste diretorio arquivos contendo os dados a seremprocessados ou salvos pelos seus programas MATLAB, como imagens, audio,comma-separated values, etc.

PDICA E possıvel configurar O MATLAB para que, logo ao seraberto, o Current Directory seja o da sua preferencia.Para isso, clique com o botao direito no ıcone do MA-TLAB no desktop do Windows e escolha a opcao Pro-perties. Na janela MATLAB version Properties, editeo campo Start in.

Command Window: e nesta janela de comando, ou prompt, que sao inse-ridos os comandos e visualizadas as saıdas (respostas) do MATLAB. Digite 2+2<enter>.

>> 2+2ans =

4

5

MATLAB ABC v0.2 nov.2013

PDICA E provavel que na Command Window do seu MATLABexista um espaco de uma linha entre o 2+2, ans e 4.E possıvel suprimir estas linhas vazias para economi-zar espaco na Command Window. Para isso, va nomenu File → Preferences. . .. Na janela Preferences,clique em Command Window do lado esquerdo e altereo parametro Numeric Display de loose para compact.Outra maneira de efetuar esta configuracao e atravesda linha de comando, digitando o comando formatcompact.

Workspace: apresenta todas as variaveis criadas, tambem chamado de baseWorkspace. Observe na linha de comando que o resultado de 2+2 foi arma-zenado automaticamente em uma variavel com o nome ans (answer). Assim,o Workspace contem agora uma variavel chamada ans, cujo conteudo e 4. Seinserirmos agora 2+3, por exemplo, o conteudo da variavel ans sera sobrescritacom o valor 5. Entao, o mais prudente e armazenar os resultados dos comandosnas nossas proprias variaveis. Por exemplo:

>> a = 2+2a =

4>> b = 2+3b =

5

Command History: armazena o historico 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 conteudo das variaveis. Aodar dois cliques sobre o nome da variavel no Workspace, o Variable Editor eaberto automaticamente e o conteudo da variavel 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 paracalcular 2+2 na linha de comando, mas ainda nao fizemos um programa para

6

MATLAB ABC v0.2 nov.2013

MATLAB. Antes desse proximo passo, atencao para uma informacao daquelasque geralmente so aparecem nas entrelinhas: no MATLAB, os programassao chamados de scripts. Um script MATLAB e um arquivo .m com varioscomandos em sequencia. Para nao restarem duvidas: ao ser executado o script,os comandos nele contidos sao executados na sequencia em que aparecem. Afinalde contas, um script e um programa.

Vamos elaborar um script para realizar os mesmos calculos sofisticados querealizamos anteriormente.

Passo 1. Na janela Editor do desktop do MATLAB, requisite um novo arquivoM (M-File) clicando no ıcone de uma folha em branco (New M-File). Sepreferir, tambem e possıvel fazer isto no menu File → New → Blank M-File, ou ainda atraves do atalho Ctrl+N. Dentro da janela Editor digitea mesma sequencia de comandos. Por enquanto, nao se preocupe com oshighlights em cor laranja.

Passo 2. Salve o script, clicando no ıcone do disquete ou no menu File → Save,ou ainda atraves do atalho Ctrl+S. Vamos salvar com o nome meuPrimS-cript. Como se trata de um script, o MATLAB sugere automaticamentea extencao .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.

Otimo, agora o seu primeiro scriptzinho esta funcionando, salvo e podeser copiado e executado em qualquer MATLAB. Caso exista tambem um ar-quivo com o mesmo nome do seu script e extencao .asv (neste caso meuPrimS-cript.asv), sem problemas. Estes arquivos sao gerados automaticamente peloMATLAB para backup (asv significa autosave), como e o caso dos arquivos.tmp (temporary) do Microsoft Word, por exemplo. Nao e necessario copiareste arquivo para rodar o seu script em outra maquina.

PDICA E interessante manter as configuracoes padrao do au-tosave do MATLAB. Se for necessario altera-las, o ca-minho e menu File → Preferences. . .. Na janela Prefe-rences, clique em Editor/Debugger – Autosave do ladoesquerdo.

Uma vez que o script fez a mesma coisa que os comandos que havıamos digi-tado anteriormente na Command Window, nao vimos alteracao no workspace.Mas voce deve ter notado que os resultados foram mostrados na Command Win-dow. Se nao, pode rodar o script a vontade, n + 1 vezes. Mas ao inves de ir

7

MATLAB ABC v0.2 nov.2013

ate a Command Window e escrever meuPrimScript, basta estar com a janelaEditor ativada (selecionada) e usar a tecla de atalho F5. Isto e o mesmo queclicar no ıcone que lembra uma tecla play da janela Editor, o Save and run. Ob-serve tambem que, ao fazer alguma alteracao no conteudo do script, o nome doarquivo presente no topo da janela Editor recebe um ‘*’ no final (“asterıstico”,como dizem la na minha terra natal). Isto indica que as suas alteracoes naoforam salvas. Entao, antes de executar o seu script, sempre e bom salva-lo. Ometodo mais pratico e usando o Save and run a partir do atalho F5.

Na maioria das vezes nao e necessario mostrar os resultados de todos oscomandos na Command Window. Inserindo um ‘;’ apos o comando, ele e execu-tado mas a exibicao do resultado na Command Window nao e realizada. Testeo ‘;’ no nosso script:

a = 2+2;b = 2+3;

Antes de executar observe que, ao inserir o ‘;’, o highlight em cor laranjasobre o ‘=’ desaparece. Na verdade, o MATLAB estava nos oferecendo esta dicatodo o tempo. Note que ha um traco cor laranja na borda direita do Editor,na linha sem o ‘;’. Estes tracos sao Warnings (avisos, advertencias). Ao passaro mouse sobre o Warning, a mensagem correspondente e exibida, como ilustraa Figura 2. Para limpar a Command Window e ter certeza de que o scriptnao mostrou nenhuma saıda, basta digitar o comando clc (Clear CommandWindow). Digite clc na Command Window e depois rode novamente o script.

Figura 2: Os tracos em cor laranja na borda direira do Editor sao os Warnings. Aopassar o mouse a mensagem e mostrada.

Como pudemos observar, as variaveis criadas por um script vao para oWorkspace e, se no Workspace ja existir uma variavel com o mesmo nome,ela sera sobrescrita. Ao mesmo tempo, as variaveis que estao no Workspacepodem ser acessadas a partir de um script. Vamos aproveitar as variaveis a eb do workspace e testar esta afirmacao. Apague o conteudo do nosso script,transformando-o em:

c = a+b;

Apos executa-lo, existira uma variavel c com valor 9 no Workspace. Istoso ocorreu porque o script acessou as variaveis a (valor 4) e b (valor 5) que jaestavam no workspace.

Assim, uma pratica recomendavel e limpar o Workspace logo no inıcio doscript, para evitar confusoes. O comando para excluir todas as variaveis doWorkspace e clear. Este comando pode ser seguido por nomes de variaveis,caso se deseje excluir variaveis 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 noinıcio do script atual

clear allc = a+b;

o MATLAB retornara um erro ao executa-lo. A mensagem de erro e

??? Undefined function or variable ’a’.

Error in ==> meuSegScript at 2c = a+b;

Acontece que requisitamos uma soma das variaveis a e b, mas as variaveisnao existem. Entao, o estranho mesmo seria se o MATLAB nao retornasse umerro. E possıvel clicar sobre o erro na Command Window para ir diretamentepara a linha do script que gerou o erro. Este e um recurso interessante para adepuracao 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 funcao

Direto ao ponto: uma funcao e um bloco de codigo com um nome. Pode rece-ber e retornar parametros e ser chamada de diferentes partes de um programa.Simples e genial, pois o codigo “encapsulado na forma de uma funcao” pode serreutilizado quando necessario, ao inves de ser repetido dentro do programa, oque seria mais trabalhoso e ocuparia mais espaco em memoria. Alem disso, asfuncoes sao um recurso valioso para o gerenciamento da complexidade de umprograma. As funcoes podem ser criadas (ou definidas) pelo usuario – deno-minadas user-defined, ou ja estarem predefinidas no ambiente – denominadasbuilt-in.

2.3.1 Funcoes user-defined

No MATLAB, as funcoes tambem sao escritas em arquivos .m, assim como osscripts, mas existem diferencas importantes entre os dois, especialmente:

� Uma funcao pode receber e retornar parametros “no proprio nome”, umscript nao.

� Um script utiliza o base Workspace. Uma funcao possui seu proprio Works-pace e comunica-se com o base Workspace atraves dos parametros de en-trada e saıda.

Ao inves de calcularmos o valor da soma de duas constantes (2+2), vamoscriar uma funcao para calcular a soma de dois numeros quaisquer.

9

MATLAB ABC v0.2 nov.2013

Passo 1. Requisite um novo arquivo M e insira o corpo da funcao, como mos-trado abaixo. k1 e k2 sao os parametros de entrada e s e o parametro desaıda. A sintaxe e sempre esta: parametro(s) de entrada nos parentesesapos o nome da funcao e parametro(s) de saıda antes do =.

function s = meuPrimFun(k1,k2)

s = k1+k2;

end

Passo 2. Salve a funcao. Observe que o MATLAB sugere um arquivo .m como mesmo nome da funcao. Neste caso, meuPrimFun.m.

Passo 3. Chame a funcao a partir da Command Window. Deve-se inserir osparametros de entrada e a variavel de saıda:

>> d = meuPrimFun(4,5)d =

7

Ou entao podemos passar para a funcao duas variaveis, ao inves de duasconstantes:

>> p = 4;>> q = 5;>> e = meuPrimFun(p,q)e =

7

Observe que as variaveis internas da funcao, k1, k2 e s, nao aparecemno base Workspace. Outro detalhe importante e que o MATLAB reconhece afuncao pelo nome do arquivo .m, e nao pelo nome da funcao declarado na linhade codigo iniciada por function. Obviamente, e importante manter o mesmonome para evitar confusoes.

2.3.2 Funcoes built-in

Conforme mencionado anteriormente, o MATLAB disponibiliza um grande numerode funcoes para diferentes aplicacoes. Como um exemplo simples, vamos utilizara funcao exp, que calcula o valor de ex. Na Command Window:

>> f = exp(1)f =

2.718281828459046

Para acessar a documentacao da funcao a partir da Command Window,pode-se utilizar o comando help exp. Neste caso, a descricao e mostrada naforma de texto, na propria Command Window. Para acessar a GUI (GraphicalUser Interface) do Help do MATLAB a partir da Command Window, o comandoe doc exp. Prefira sempre o Help com a GUI, ja que e muito mais agradavele completo.

10

MATLAB ABC v0.2 nov.2013

Segundo a nossa terminologia, todas as funcoes predefinidas do MATLABsao denominadas built-in (a contraparte de user-defined). Em geral, a literaturasobre o MATLAB adota esta mesma terminologia. Porem, se voce encontrarum matlaber mais conservador por aı, pode ser que ele te explique que existemtres tipos de funcoes predefinidas no MATLAB. De maneira simplificada:

� Funcoes built-in: a MathWorks nao disponibiliza o codigo fonte destasfuncoes. A funcao exp e um exemplo. Para visualizar as informacoes dasfuncoes do MATLAB, pode-se usar o comando which seguido do nomeda funcao. Digite o comando a seguir e observe o retorno. Alem do campobuilt-in, e possıvel saber o caminho da funcao.

>> which expbuilt-in (C:\Program Files\MATLAB\toolbox\matlab\

elfun\@double\exp)

� Funcoes do plain MATLAB : este termo tambem e uma convencao adotadapelos usuarios do MATLAB. Plain MATLAB e o MATLAB basico, aqueledistribuıdo quando adquire-se somente o MATLAB e nenhuma toolboxextra ou add-on. A funcao mean para o calculo da media e um exemplode funcao do plain MATLAB.

>> which meanC:\Program Files\MATLAB\R2009a\toolbox\matlab\

datafun\mean.m

� Funcoes pertencentes a uma toolbox : sao as funcoes que fazem parte de al-gum modulo para aplicacao especıfica, denominado toolbox. E importantelembrar que, se o seu programa MATLAB utiliza alguma destas funcoes,ele so podera ser executado em uma versao do MATLAB que tambempossua a toolbox em questao. A funcao imread para ler um arquivo deimagem e um exemplo.

>> which imreadC:\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 cadaelemento e acessado a partir de um ındice. Entao, em computacao, matrizese vetores geralmente estao na categoria dos arrays. Ja um escalar (numero

11

MATLAB ABC v0.2 nov.2013

isolado) nao pertence a categoria dos arrays. No MATLAB, como as matrizessao as queridinhas, a terminologia e um pouco diferente, conforme descrito nositens a seguir e exemplificado na Figura 3.

� Matriz (matrix): uma estrutura de dados bidimensional, retangular. Anotacao para as dimensoes de uma matriz e numero de linhas-por-numero de colunas.

� Escalar (single number): uma matriz de dimensoes 1-por-1.

� Vetor linha (row vector): uma matriz de dimensoes 1-por-n.

� Vetor coluna (column vector): uma matriz de dimensoes n-por-1.

� Array multidimensional : um array com mais de duas dimensoes. Saoextensoes 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 colunade 4 elementos(matriz 4-por-1)

Escalar(matriz 1-por-1)

Figura 3: Exemplos de estruturas de dados do tipo matriz, escalar, vetor linha, vetorcoluna e array multidimensional. Os numeros dentro dos parenteses sao os ındicespara o acesso dos elementos. A estrutura basica sempre e a matriz. O array multi-dimensional e uma matriz com mais de duas dimensoes. Neste exemplo, tres: linhas,colunas e paginas.

Para criar uma matriz, o metodo mais simples e utilizando o operador col-chetes:

>> a = [-1 0 1; 2 3 4; 5 6 7]a =

-1 0 12 3 45 6 7

Os elementos de uma mesma linha sao separados por espaco. O ponto e vırgulainicia uma nova linha. Tambem e possıvel separar os elementos de uma mesmalinha por vırgula, mas a notacao mais utilizada e com espacos.

12

MATLAB ABC v0.2 nov.2013

>> a = [-1,0,1; 2,3,4; 5,6,7]a =

-1 0 12 3 45 6 7

Entao, um vetor linha e

>> b = [8 9 10 0]b =

8 9 10 0

e um vetor coluna

>> c = [12; 13; 14; 0]c =

1213140

Um escalar, como ja vimos anteriormente

>> d = 16d =

16

Observe a descricao de cada uma destas variaveis no Workspace, ou utilize ocomando whos para listar as variaveis do Workspace:

>> whosName Size Bytes Class

a 3x3 72 doubleb 1x4 32 doublec 4x1 32 doubled 1x1 8 double

O detalhe interessante e que o escalar d tambem e uma matriz, de dimensoes1x1.

Para indexar (acessar ou enderecar) os elementos das matrizes, utiliza-se anotacao

nome(ındice_da_linha,ındice_da_coluna)

Como vetores possuem uma unica dimensao, a notacao 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 dasegunda 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, tambem e possıvel atribuir novos valores nas posicoes desejadas:

>> a(3,3) = 7a =

-1 0 12 3 45 6 7

>> b(4) = 11b =

8 9 10 11>> c(4) = 15c =

12131415

O operador apostrofo retorna a matriz transposta, aquela obtida a partir detroca de linhas por colunas:

>> at = a’at =

-1 2 50 3 61 4 7

Assim, um vetor linha pode ser transformado facilmente em um vetor coluna evice-versa:

>> bt = b’bt =

89

1011

>> 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

131415

Ao acessar um elemento fora das dimensoes maximas da matriz, um erro eretornado:

>> a(1,4)??? Attempted to access a(1,4); index out of bounds becausesize(a)=[3,3].

>> b(5)??? Attempted to access b(5); index out of bounds becausenumel(b)=4.

>> c(6)??? Attempted to access c(6); index out of bounds becausenumel(c)=4.

Agora, ATENCAO! Ao atribuir um valor a um elemento fora das dimensoesmaximas da matriz, as dimensoes da matriz sao ampliadas para acomodar onovo elemento e os elementos que nao foram especificados recebem valor zero.Lembre que todas as estruturas sao consideradas matrizes, inclusive um escalar.Por exemplo:

>> a(3,4) = 7a =

-1 0 1 02 3 4 05 6 7 7

>> b(5) = 11b =

8 9 10 11 11>> c(6) = 15c =

121314150

15>> d(4) = 16d =

16 0 0 16

Antes de achar que isto e estranho, observe que este comportamento esta co-erente com o fato do MATLAB nao requisitar a declaracao de variaveis: se epermitido fazer k = 3 sem avisar o MATLAB que k e um escalar, tambem deveser 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 espaco parak. Por questoes de desempenho, e recomendavel evitar esta alocacao dinamica

15

MATLAB ABC v0.2 nov.2013

dentro de um loop e pre-alocar todo o espaco necessario para a matriz. Masisso e assunto para mais tarde.

O operador colchete pode ser utilizado ainda para concatenar matrizes. Aconcatenacao so e permitida entre dimensoes equivalentes. A Figura 4 ilus-tra diferentes possibilidades de concatenacao e situacoes nas quais um erro eretornado, pois as dimensoes nas quais a concatenacao e requisitada nao saoequivalentes. Por exemplo, as matrizes p e r nao podem ser concatenadas ver-ticalmente porque nao possuem o mesmo numero de colunas. As matrizes s e vtransposta nao podem ser concatenadas horizontalmente porque nao possuemo mesmo numero 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 concatenacao de matrizes usando o operador colchetes. p, q,r e s sao as matrizes originais, t, u, v, x, y, z e w sao resultados das concatenacoes.v e y retornam erro pois as dimensoes nas quais a concatenacao e requisitada nao saoequivalentes.

Indexar vetores com um unico ındice e absolutamente logico. Mas como oMATLAB adora matrizes, a notacao nome(linha,coluna) e aceita tambempara a indexacao de vetores, embora provavelmente voce nao va utilizar estaindexacao, ja que e redundante. De qualquer forma, basta lembrar que uma dasdimensoes (linha ou coluna) e sempre igual a 1:

>> b(1,5)ans =

11>> c(5,1)ans =

0

Como o MATLAB e muito versatil, tambem e possıvel indexar matrizescom a notacao nome(ındice). Pode parecer pouco logico, mas e um recursoutilizado, como veremos mais adiante. Este tipo de indexacao e chamada de

16

MATLAB ABC v0.2 nov.2013

indexacao linear (linear indexing). Os ındices sao incrementados ao longo dascolunas, uma vez que o MATLAB sempre armazena as estruturas de dados emuma unica coluna, independente do seu formato original. Por exemplo:

>> a(5)ans =

3

Ainda falta criar um array. O operador dois pontos ira nos auxiliar nestatarefa e em muitas outras.

3.2 Operador dois pontos ‘:’ (colon)

3.3 Funcoes para criar, concatenar e reformatar matrizes

3.4 Funcoes para obter as dimensoes das matrizes

4 Pedindo ajuda

ATENCAO

Este documento MATLAB ABC estaem elaboracao. Por enquanto e so. Masnao fique desapontado, por aı ha mui-tas outras boas opcoes de leitura para obanheiro.

Referencias

[1] Stephen J. Chapman. Programacao em MATLAB para engenheiros. CEN-CAGE Learning, 2a edition, 2010.

[2] Carlos Eugenio Vendrametto Junior; Selma Helena de Vasconcelos Arena-les. MATLAB: fundamentos e programacao. 2004.

[3] Amos Gilat. MATLAB com aplicacoes 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. YuriRojan, 2005.

[12] Khalid Sayood. Learning Programming using MATLAB (Synthesis Lectureson Electrical Engineering). 2006.

[13] Brian D. Hahn; D. T. Valentine. Essential MATLAB for engineers andscientists. Butterworth Heinemann, 3rd edition, 2007.

[14] Wikipedia. Data visualization. http://en.wikipedia.org/wiki/Data_visualization, Sep. 2012.

18