Vous êtes sur la page 1sur 18

Universidade Tecnológica Federal do Paraná – UTFPR

Departamento Acadêmico de Eletrônica – DAELN

MATLAB ABC
Introdução ao MATLAB

Gustavo B. Borba

1 1001 utilidades
Todos lembramos do conhecido slogan 1001 utilidades
das palhas de aço Bombril, apesar de nunca alguém
ter tentado catalogar cada uma delas. É claro que
algumas são clássicas. Por exemplo: atear fogo e gi-
rar para animar a festa junina, fazer fogo dando um
curto-circuito na tomada (não tente fazer isso), en-
gatar na anteninha da tv achando que vai melhorar
a recepção e até limpar coisas. Não há dúvidas de
que o Bombril é realmente versátil e as donas de casa
adoram ter sempre um por perto.
Se você já usou o MATLAB ou sabe o que é, já deve ter entendido porque
estamos falando do Bombril. Segundo a MathWorks, empresa que desenvolve
o MATLAB, ele se trata de um ambiente para computação cientı́fica. Segundo
os engenheiros, programadores, cientistas e outros usuários, o MATLAB é uma
indispensável ferramenta para 1001 utilidades e sempre é bom tê-lo por perto.
Só pra ter uma idéia, em uma busca rápida na amazon.com por livros de áreas
especı́ficas contendo MATLAB no tı́tulo, pode-se encontrar exemplares de pelo
menos 18 áreas:
Processamento de imagens Métodos numéricos Economia
Reconhecimento de padrões Exploração de dados Álgebra linear
Processamento de sinais digitais Telecomunicações Estatı́stica
Sinais e sistemas Eletromagnetismo Máquinas elétricas
Processamento de biosinais Controle Mecânica
Aprendizagem de máquina Oceanografia Neurociências

Isso sem falar nos inúmeros livros especı́ficos sobre MATLAB, como os da
lista a seguir, disponı́veis na biblioteca da UTFPR.

ˆ Programaçã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 programaçã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 aplicaçõ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 há 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 elaboração


e análise rápida de algoritmos e aplicações.
Significa que todas as ferramentas de desenvolvimento estão incluı́das: um editor
para a elaboração dos programas; um debugger com recursos para a visualização
de variáveis, execução passo-a-passo e inclusão de breakpoints; uma janela de
comando para a entrada de dados, execução de programas e comandos e visu-
alização dos resultados; uma ferramenta do tipo profiler, que realiza a análise
de desempenho dos programas desenvolvidos para a melhoria de determinadas
linhas de código; um help completı́ssimo. Algumas caracterı́sitca importan-
tes deste ambiente de desenvolvimento são a sua facilidade de configuração e
uso. Uma vez que o MATLAB tenha sido instalado corretamente, praticamente
não há a necessidade de configurações complicadas como muitas vezes ocorre
em outros ambientes para outras linguagens de programação (inclusão de bi-
bliotecas, configuração do compilador, instalação da documentação e etc.). A
interface gráfica (ambiente propriamente dito) permite o acesso fácil à grande
maioria dos recursos usados com freqüência. Para a execução e depuração de
programas, por exemplo, está disponı́vel um janela chamada Workspace, na
qual pode-se visualizar e editar, a partir de um simples clique duplo, todas as
variáveis do programa. Uma ilustração da facilidade de uso do ambiente, está no
fato de muitos professores utilizarem o MATLAB para o ensino de programação.
Aquilo que tradicionalmente era feito utilizando-se pseudolinguagens e ambien-
tes exclusivamente didáticos, pode ser realizado no ambiente e com a linguagem
MATLAB [11, 12].

2. Ferramentas gráficas embutidas para a visualização de dados e ferramen-


tas para a criação de plots personalizados.
Um ambiente de computação cientı́fica como o MATLAB não poderia abrir
mão de boas ferramentas para a elaboração de gráficos (plots). Na verdade,
‘elaboração de gráficos’ é uma maneira bastante simples de fazer referência a
isto, já que recentemente a visualização de dados (agora sim um nome mais
justo) está assumindo o caráter de uma nova área do conhecimento [14].

3. Funções matemáticas para álgebra linear, estatı́stica, análise de Fourier,


filtragem, otimização e resolução de equações diferenciais.
Muito da capacidade do MATLAB em atender à diferentes áreas, como menci-
onado anteriormente, é devida à existência dos módulos contendo funções espe-
cializadas. Cada um destes múdulos é chamado no MATLAB de toolbox [8] 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 construção de aplicações com interfaces gráficas per-


sonalizadas.
5. Funções para a integração de algoritmos basados em MATLAB com aplicações
e linguagens externas, como C, Java, .NET e Microsoft Excel.
Observe que a caracterı́stica 1 menciona também aplicações. Aqui, elas são
mencionadas com mais ênfase. Embora não tenhamos a necessidade de utilizar
estes recursos nesta disciplina, é interessante conhecê-los para adquirirmos uma
boa visão geral do MATLAB. Vamos definir uma aplicação como um programa
que não necessita de um ambiente especı́fico para executar (o sistema opera-
cional não conta!), como o Microsoft Word. Um programa convencional para
MATLAB não é uma aplicação porque ‘só roda dentro do MATLAB’. Porém,
é possı́vel transformar programas para MATLAB em aplicações, utilizando in-
clusive interfaces gráficas, isto é, janelas com botões, campos para a entrada
de dados e visualização de resultados. Além disso, é possı́vel integrar um pro-
grama do MATLAB com códigos escritos em outras linguagens (C, Java, etc.)
ou com outras aplicações. Em outras palavras, é possı́vel, a partir do ambiente
MATLAB, fazer o seu código comunicar-se com códigos em outras linguagens
e também com aplicações (outros programas). Muitos programadores utilizam
o recurso da chamada de códigos em C (chamados de arquivos MEX no MA-
TLAB [5]) por uma questão de desempenho – caso uma determinada parte do
programa MATLAB seja considerada muito lenta, é possı́vel escrever esta parte
em C para substituir a parte correspondente do programa MATLAB.

2 2+2
Se estivéssemos estudando uma nova linguagem de programação (tudo bem,
de certa forma estamos), provavelmente nosso primeiro programa escreveria
na tela a mensagem Hello, world , e só. Quem já estudou C deve lembrar
do printf("Olá, mundo");. No MATLAB, talvez o mais coerente seja
transformar o Imprimindo ‘Hello, world’ na tela em algo como Calculando 2+2.
A seguir, são descritas as três maneiras básicas de calcular 2+2, ou melhor, de
requisitar comandos ao MATLAB: através da Command Window, através de
um script ou através de uma função.

2.1 Calculando 2+2 na Command Window


Considerando que o MATLAB já foi instalado, vamos abrı́-lo. O ambiente que
você vê é chamado de desktop do MATLAB. O desktop default (padrão) é o
mostrado na Figura 1. Vamos conhecer cada um dos principais elementos do
desktop e aproveitar para matar a curiosidade a respeito do resultado de 2+2.

3
MATLAB ABC v0.2 nov.2013

P DICA Para colocar o desktop na configuração default: menu


Desktop → Desktop Layout → Default. Ainda no

D
menu Desktop, verifique se as seguintes janelas estão
ativas (com ): Command Window, Command His-
tory, Current Directory, Workspace, Editor, Variable
Editor, Titles.

Figura 1: Configuração default do desktop do MATLAB e cada um dos seus elementos.

Current Directory: é o diretório (pasta) de trabalho. É neste diretório que

4
MATLAB ABC v0.2 nov.2013

serão salvos os seus programas e também onde o MATLAB espera encontrar os


arquivos que você eventualmente irá utilizar nos seus programas ou nos coman-
dos inseridos na linha de comando (ainda existe o Path, mas é assunto para mais
tarde). Os arquivos mais comuns do MATLAB são os scripts, com extenção .m,
e as varáveis, com extensão .mat. Em breve vamos abordá-los com mais deta-
lhes. Também podem estar neste diretório arquivos contendo os dados a serem
processados ou salvos pelos seus programas MATLAB, como imagens, áudio,
comma-separated values, etc.

P DICA É possı́vel configurar O MATLAB para que, logo ao ser


aberto, o Current Directory seja o da sua preferência.
Para isso, clique com o botão direito no ı́cone do MA-
TLAB no desktop do Windows e escolha a opção Pro-
perties. Na janela MATLAB version Properties, edite
o campo Start in.

Command Window: é nesta janela de comando, ou prompt, que sã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

P DICA É provável que na Command Window do seu MATLAB


exista um espaço de uma linha entre o 2+2, ans e 4.
É possı́vel suprimir estas linhas vazias para economi-
zar espaço na Command Window. Para isso, vá no
menu File → Preferences. . .. Na janela Preferences,
clique em Command Window do lado esquerdo e altere
o parâmetro Numeric Display de loose para compact.
Outra maneira de efetuar esta configuração é através
da linha de comando, digitando o comando format
compact.

Workspace: apresenta todas as variáveis criadas, também chamado de base


Workspace. Observe na linha de comando que o resultado de 2+2 foi arma-
zenado automaticamente em uma variável com o nome ans (answer). Assim,
o Workspace contém agora uma variável chamada ans, cujo conteúdo é 4. Se
inserirmos agora 2+3, por exemplo, o conteúdo da variável ans será sobrescrita
com o valor 5. Então, o mais prudente é armazenar os resultados dos comandos
nas nossas próprias variáveis. Por exemplo:
>> a = 2+2
a =
4
>> b = 2+3
b =
5
Command History: armazena o histórico dos comando inseridos. Na Com-
mand Window, é possı́vel ‘navegar’ pelos comando inseridos utilizando as teclas
<↑> e <↓>.

Variable Editor: permite visualisar e editar o conteúdo das variáveis. Ao


dar dois cliques sobre o nome da variável no Workspace, o Variable Editor é
aberto automaticamente e o conteúdo da variável pode ser editado.

Editor: é nesta janela que você vai escrever os seus programas para MATLAB.

2.2 Calculando 2+2 em um script


Até o momento, sabemos explicar o que é o MATLAB e como usá-lo para
calcular 2+2 na linha de comando, mas ainda não fizemos um programa para

6
MATLAB ABC v0.2 nov.2013

MATLAB. Antes desse próximo passo, atenção para uma informação daquelas
que geralmente só aparecem nas entrelinhas: no MATLAB, os programas
são chamados de scripts. Um script MATLAB é um arquivo .m com vários
comandos em sequência. Para não restarem dúvidas: ao ser executado o script,
os comandos nele contidos são executados na sequência em que aparecem. Afinal
de contas, um script é um programa.
Vamos elaborar um script para realizar os mesmos cá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, também é possı́vel fazer isto no menu File → New → Blank M-
File, ou ainda através do atalho Ctrl+N. Dentro da janela Editor digite
a mesma sequência de comandos. Por enquanto, nã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 através do atalho Ctrl+S. Vamos salvar com o nome meuPrimS-
cript. Como se trata de um script, o MATLAB sugere automaticamente
a extençã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.
Ótimo, agora o seu primeiro scriptzinho está funcionando, salvo e pode
ser copiado e executado em qualquer MATLAB. Caso exista também um ar-
quivo com o mesmo nome do seu script e extenção .asv (neste caso meuPrimS-
cript.asv ), sem problemas. Estes arquivos são gerados automaticamente pelo
MATLAB para backup (asv significa autosave), como é o caso dos arquivos
.tmp (temporary) do Microsoft Word, por exemplo. Não é necessário copiar
este arquivo para rodar o seu script em outra máquina.

P DICA É interessante manter as configurações padrão do au-


tosave do MATLAB. Se for necessário alterá-las, o ca-
minho é 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, não vimos alteração no workspace.
Mas você deve ter notado que os resultados foram mostrados na Command Win-
dow. Se não, pode rodar o script à vontade, n + 1 vezes. Mas ao invés de ir

7
MATLAB ABC v0.2 nov.2013

até a Command Window e escrever meuPrimScript, basta estar com a janela


Editor ativada (selecionada) e usar a tecla de atalho F5. Isto é o mesmo que
clicar no ı́cone que lembra uma tecla play da janela Editor, o Save and run. Ob-
serve também que, ao fazer alguma alteração no conteúdo do script, o nome do
arquivo presente no topo da janela Editor recebe um ‘*’ no final (“asterı́stico”,
como dizem lá na minha terra natal). Isto indica que as suas alterações não
foram salvas. Então, antes de executar o seu script, sempre é bom salvá-lo. O
método mais prático é usando o Save and run a partir do atalho F5.
Na maioria das vezes não é necessário mostrar os resultados de todos os
comandos na Command Window. Inserindo um ‘;’ após o comando, ele é execu-
tado mas a exibição do resultado na Command Window não é 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 há um traço cor laranja na borda direita do Editor,
na linha sem o ‘;’. Estes traços são Warnings (avisos, advertências). Ao passar
o mouse sobre o Warning, a mensagem correspondente é exibida, como ilustra
a Figura 2. Para limpar a Command Window e ter certeza de que o script
nã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 traços em cor laranja na borda direira do Editor são os Warnings. Ao


passar o mouse a mensagem é mostrada.

Como pudemos observar, as variáveis criadas por um script vão para o


Workspace e, se no Workspace já existir uma variável com o mesmo nome,
ela será sobrescrita. Ao mesmo tempo, as variáveis que estão no Workspace
podem ser acessadas a partir de um script. Vamos aproveitar as variáveis a e
b do workspace e testar esta afirmação. Apague o conteúdo do nosso script,
transformando-o em:
c = a+b;
Após executá-lo, existirá uma variável c com valor 9 no Workspace. Isto
só ocorreu porque o script acessou as variáveis a (valor 4) e b (valor 5) que já
estavam no workspace.
Assim, uma prática recomendável é limpar o Workspace logo no inı́cio do
script, para evitar confusões. O comando para excluir todas as variáveis do
Workspace é clear. Este comando pode ser seguido por nomes de variáveis,
caso se deseje excluir variáveis especı́ficas. Por exemplo: clear a b, enquanto

8
MATLAB ABC v0.2 nov.2013

clear all é o mesmo que apenas clear. Se inserirmos um clear all no


inı́cio do script atual

clear all
c = a+b;
o MATLAB retornará um erro ao executá-lo. A mensagem de erro é
??? Undefined function or variable ’a’.

Error in ==> meuSegScript at 2


c = a+b;
Acontece que requisitamos uma soma das variáveis a e b, mas as variáveis
não existem. Então, o estranho mesmo seria se o MATLAB não retornasse um
erro. É possı́vel clicar sobre o erro na Command Window para ir diretamente
para a linha do script que gerou o erro. Este é um recurso interessante para a
depuraçã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 função


Direto ao ponto: uma função é um bloco de código com um nome. Pode rece-
ber e retornar parâmetros e ser chamada de diferentes partes de um programa.
Simples e genial, pois o código “encapsulado na forma de uma função” pode ser
reutilizado quando necessário, ao invés de ser repetido dentro do programa, o
que seria mais trabalhoso e ocuparia mais espaço em memória. Além disso, as
funções são um recurso valioso para o gerenciamento da complexidade de um
programa. As funções podem ser criadas (ou definidas) pelo usuário – deno-
minadas user-defined, ou já estarem predefinidas no ambiente – denominadas
built-in.

2.3.1 Funções user-defined


No MATLAB, as funções também são escritas em arquivos .m, assim como os
scripts, mas existem diferenças importantes entre os dois, especialmente:

ˆ Uma função pode receber e retornar parâmetros “no próprio nome”, um


script não.
ˆ Um script utiliza o base Workspace. Uma função possui seu próprio Works-
pace e comunica-se com o base Workspace através dos parâmetros de en-
trada e saı́da.

Ao invés de calcularmos o valor da soma de duas constantes (2+2), vamos


criar uma função para calcular a soma de dois números quaisquer.

9
MATLAB ABC v0.2 nov.2013

Passo 1. Requisite um novo arquivo M e insira o corpo da função, como mos-


trado abaixo. k1 e k2 são os parâmetros de entrada e s é o parâmetro de
saı́da. A sintaxe é sempre esta: parâmetro(s) de entrada nos parênteses
após o nome da função e parâmetro(s) de saı́da antes do =.
function s = meuPrimFun(k1,k2)

s = k1+k2;

end
Passo 2. Salve a função. Observe que o MATLAB sugere um arquivo .m com
o mesmo nome da função. Neste caso, meuPrimFun.m.
Passo 3. Chame a função a partir da Command Window. Deve-se inserir os
parâmetros de entrada e a variável de saı́da:
>> d = meuPrimFun(4,5)
d =
7
Ou então podemos passar para a função duas variáveis, ao invés de duas
constantes:
>> p = 4;
>> q = 5;
>> e = meuPrimFun(p,q)
e =
7

Observe que as variáveis internas da função, k1, k2 e s, não aparecem


no base Workspace. Outro detalhe importante é que o MATLAB reconhece a
função pelo nome do arquivo .m, e não pelo nome da função declarado na linha
de código iniciada por function. Obviamente, é importante manter o mesmo
nome para evitar confusões.

2.3.2 Funções built-in


Conforme mencionado anteriormente, o MATLAB disponibiliza um grande número
de funções para diferentes aplicações. Como um exemplo simples, vamos utilizar
a função exp, que calcula o valor de ex . Na Command Window:
>> f = exp(1)
f =
2.718281828459046

Para acessar a documentação da função a partir da Command Window,


pode-se utilizar o comando help exp. Neste caso, a descrição é mostrada na
forma de texto, na própria Command Window. Para acessar a GUI (Graphical
User Interface) do Help do MATLAB a partir da Command Window, o comando
é doc exp. Prefira sempre o Help com a GUI, já que é muito mais agradável
e completo.

10
MATLAB ABC v0.2 nov.2013

Segundo a nossa terminologia, todas as funções predefinidas do MATLAB


são denominadas built-in (a contraparte de user-defined ). Em geral, a literatura
sobre o MATLAB adota esta mesma terminologia. Porém, se você encontrar
um matlaber mais conservador por aı́, pode ser que ele te explique que existem
três tipos de funções predefinidas no MATLAB. De maneira simplificada:

ˆ Funções built-in: a MathWorks não disponibiliza o código fonte destas


funções. A função exp é um exemplo. Para visualizar as informações das
funções do MATLAB, pode-se usar o comando which seguido do nome
da função. Digite o comando a seguir e observe o retorno. Além do campo
built-in, é possı́vel saber o caminho da função.

>> which exp


built-in (C:\Program Files\MATLAB\toolbox\matlab\
elfun\@double\exp)
ˆ Funções do plain MATLAB : este termo também é uma convenção adotada
pelos usuários do MATLAB. Plain MATLAB é o MATLAB básico, aquele
distribuı́do quando adquire-se somente o MATLAB e nenhuma toolbox
extra ou add-on. A função mean para o cálculo da média é um exemplo
de função do plain MATLAB.
>> which mean
C:\Program Files\MATLAB\R2009a\toolbox\matlab\
datafun\mean.m
ˆ Funções pertencentes a uma toolbox : são as funções que fazem parte de al-
gum módulo para aplicação especı́fica, denominado toolbox. É importante
lembrar que, se o seu programa MATLAB utiliza alguma destas funções,
ele só poderá ser executado em uma versão do MATLAB que também
possua a toolbox em questão. A função imread para ler um arquivo de
imagem é 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
Já que MATLAB significa MATrix LABoratory, é de se imaginar que a estru-
tura de dados do tipo matriz desempenhe um papel de destaque no ambiente.
Inclusive, que há quem diga que “tudo no MATLAB é 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 é acessado a partir de um ı́ndice. Então, em computação, matrizes
e vetores geralmente estão na categoria dos arrays. Já um escalar (número

11
MATLAB ABC v0.2 nov.2013

isolado) não pertence à categoria dos arrays. No MATLAB, como as matrizes


são as queridinhas, a terminologia é um pouco diferente, conforme descrito nos
itens a seguir e exemplificado na Figura 3.

ˆ Matriz (matrix): uma estrutura de dados bidimensional, retangular. A


notação para as dimensões de uma matriz é número de linhas-por-número de colunas.
ˆ Escalar (single number): uma matriz de dimensões 1-por-1.
ˆ Vetor linha (row vector): uma matriz de dimensões 1-por-n.
ˆ Vetor coluna (column vector): uma matriz de dimensões n-por-1.
ˆ Array multidimensional : um array com mais de duas dimensões. São
extensões das matrizes.

a(1,1) a(1,2) a(1,3) b(1) b(2) b(3) b(4) c(1)

Vetor linha de 4 elementos


a(2,1) a(2,2) a(2,3) (matriz 1-por-4) c(2)

Array 3-por-3-por-2
a(3,1) a(3,2) a(3,3) c(3)
e(1,1,2) e(1,2,2) e(1,3,2)
Matriz 3-por-3
c(4)
e(2,1,2) e(2,2,2) e(2,3,2)
Vetor coluna
d e(1,1,1) e(1,2,1) e(1,3,1) de 4 elementos
(matriz 4-por-1)
e(3,1,1) e(3,2,2) e(3,3,2)
Escalar
(matriz 1-por-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)

Figura 3: Exemplos de estruturas de dados do tipo matriz, escalar, vetor linha, vetor
coluna e array multidimensional. Os números dentro dos parênteses são os ı́ndices
para o acesso dos elementos. A estrutura básica sempre é a matriz. O array multi-
dimensional é uma matriz com mais de duas dimensões. Neste exemplo, três: linhas,
colunas e páginas.

Para criar uma matriz, o método mais simples é 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 são separados por espaço. O ponto e vı́rgula
inicia uma nova linha. Também é possı́vel separar os elementos de uma mesma
linha por vı́rgula, mas a notação mais utilizada é com espaç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
Então, um vetor linha é
>> 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 já vimos anteriormente
>> d = 16
d =
16
Observe a descrição de cada uma destas variáveis no Workspace, ou utilize o
comando whos para listar as variá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 é que o escalar d também é uma matriz, de dimensões
1x1.
Para indexar (acessar ou endereçar) os elementos das matrizes, utiliza-se a
notação
nome(ı́ndice_da_linha,ı́ndice_da_coluna)
Como vetores possuem uma única dimensão, a notação é
nome(ı́ndice)
Lembre que no MATLAB o ı́ndice do primeiro elemento é 1 (one-based indexing.
A contraparte é 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, também é possı́vel atribuir novos valores nas posiçõ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 apó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 dimensões máximas da matriz, um erro é


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, ATENÇÃO! Ao atribuir um valor a um elemento fora das dimensões
máximas da matriz, as dimensões da matriz são ampliadas para acomodar o
novo elemento e os elementos que não foram especificados recebem valor zero.
Lembre que todas as estruturas sã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 é estranho, observe que este comportamento está co-
erente com o fato do MATLAB não requisitar a declaração de variáveis: se é
permitido fazer k = 3 sem avisar o MATLAB que k é um escalar, também deve
ser possı́vel fazer k(2,4) = 3 sem avisar que é uma matriz. E se depois requi-
sitarmos k(3,6) = 6.2, o MATLAB aloca dinamicamente mais espaço para
k. Por questões de desempenho, é recomendável evitar esta alocação dinâmica

15
MATLAB ABC v0.2 nov.2013

dentro de um loop e pré-alocar todo o espaço necessário para a matriz. Mas


isso é assunto para mais tarde.
O operador colchete pode ser utilizado ainda para concatenar matrizes. A
concatenação só é permitida entre dimensões equivalentes. A Figura 4 ilus-
tra diferentes possibilidades de concatenação e situações nas quais um erro é
retornado, pois as dimensões nas quais a concatenação é requisitada não são
equivalentes. Por exemplo, as matrizes p e r não podem ser concatenadas ver-
ticalmente porque não possuem o mesmo número de colunas. As matrizes s e v
transposta não podem ser concatenadas horizontalmente porque não possuem
o mesmo número de linhas.
p s v = [p; r]
z = [s; p]
2 3.5 7 9.3 6 4 ERRO
2 3.5 7
9.3 6 4
q 6 3.7 1
6 8 4 1
6 3.7 1
4 0 8.9 2 4.4 9
x = [s u] 2 4.4 9
r
9.3 6 4 2 3.5 7 2 3.5 7
6 8 4 1
6 3.7 1 4 0 8.9
w = [z r’]
t = [r p] 2 4.4 9 4 0 8.9
9.3 6 4 6
6 8 4 1 2 3.5 7
y = [s r’]
6 3.7 1 8
u = [p; q; q] 9.3 6 4 6
2 4.4 9 4
2 3.5 7 6 3.7 1 8
2 3.5 7 1
4 0 8.9 2 4.4 9 4

4 0 8.9 1
ERRO

Figura 4: Exemplos de concatenação de matrizes usando o operador colchetes. p, q,


r e s são as matrizes originais, t, u, v, x, y, z e w são resultados das concatenações.
v e y retornam erro pois as dimensões nas quais a concatenação é requisitada não são
equivalentes.

Indexar vetores com um único ı́ndice é absolutamente lógico. Mas como o


MATLAB adora matrizes, a notação nome(linha,coluna) é aceita também
para a indexação de vetores, embora provavelmente você não vá utilizar esta
indexação, já que é redundante. De qualquer forma, basta lembrar que uma das
dimensões (linha ou coluna) é sempre igual a 1:
>> b(1,5)
ans =
11
>> c(5,1)
ans =
0
Como o MATLAB é muito versátil, também é possı́vel indexar matrizes
com a notação nome(ı́ndice). Pode parecer pouco lógico, mas é um recurso
utilizado, como veremos mais adiante. Este tipo de indexação é chamada de

16
MATLAB ABC v0.2 nov.2013

indexação linear (linear indexing). Os ı́ndices são incrementados ao longo das


colunas, uma vez que o MATLAB sempre armazena as estruturas de dados em
uma única coluna, independente do seu formato original. Por exemplo:
>> a(5)
ans =
3
Ainda falta criar um array. O operador dois pontos irá nos auxiliar nesta
tarefa e em muitas outras.

3.2 Operador dois pontos ‘:’ (colon)

3.3 Funções para criar, concatenar e reformatar matrizes


3.4 Funções para obter as dimensões das matrizes

4 Pedindo ajuda

ATENÇÃO

Este documento MATLAB ABC está


em elaboração. Por enquanto é só. Mas
não fique desapontado, por aı́ há mui-
tas outras boas opções de leitura para o
banheiro.

Referências
[1] Stephen J. Chapman. Programaçã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 programação. 2004.
[3] Amos Gilat. MATLAB com aplicaçõ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