Buscar

Introdução ao MATLAB

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

Outros materiais

Perguntas Recentes