Você está na página 1de 34

UNIVERSIDADE FEDERAL DO RIO DE JANEIRO

COPPE

PROGRAMA DE ENGENHARIA BIOMDICA

FUNDAMENTOS
DE
MATLAB

Autor: Maurcio Cagy

Reviso 2.1 Maro de 2013


Programa de Engenharia Biomdica - COPPE - UFRJ

Mini-Curso de Matlab

ndice / Ementa

Prefcio............................................................................................................................. 3
1. O Que o Matlab?.................................................................................................... 4
2. Tipos de Variveis do Matlab................................................................................... 5
3. Escalares, Vetores, Matrizes e Strings...................................................................... 6
4. Indexao de Matrizes e Vetores. ............................................................................. 8
5. Operaes Algbricas Bsicas: Escalares, Matriciais e Elemento-a-Elemento...... 10
6. Operaes com Strings ........................................................................................... 12
7. Operaes Lgicas.................................................................................................. 14
8. Clusulas de Loops e Condicionais. ....................................................................... 16
9. Comandos de Entrada e Sada de Dados. ............................................................... 19
10. Salvando e Recuperando Variveis. ....................................................................... 21
11. Funes de Grficos 2D e 3D................................................................................. 22
12. Alguns Comandos teis. ........................................................................................ 26
13. Construo de Programas e Funes. ..................................................................... 27
14. Hierarquia de Variveis (Locais e Globais)............................................................ 30
15. Objetos e Suas Propriedades (get e set)........................................................... 31
16. Os Toolboxes do Matlab. ........................................................................................ 33

2
Prefcio

O presente texto visa ao estabelecimento de conceitos fundamentais do Matlab,


que possam ser utilizados tanto nas suas verses 4.X ou 5.X quanto nas mais atuais.
Com isto, espera-se que o leitor consiga, por si s, desenvolver o seu conhecimento
sobre esta poderosssima ferramenta e estabelea-se como um experto.
Por ser este trabalho uma abordagem mais conceitual do que prtica, no
incluindo exerccios mas somente exemplos, no se faz mister, e at desaconselho, que
o leitor esteja com um computador ligado sua frente durante a leitura do mesmo, por
considerar este mtodo altamente desconfortvel.
Sugiro que se faa a leitura deste pequeno texto de uma s vez (se necessrio,
repetidas vezes), e s ento que se utilize o computador. A ento, pode-se empreg-lo
(embora ache que isto no ser necessrio) como um guia rpido. Creio que o sistema
de ajuda do Matlab, embora reconhecidamente no exemplar mas em constante
melhoramento, seja mais que suficiente para o aprofundamento dos recursos deste
aplicativo.

3
Mini-Curso de Matlab

1. O Que o Matlab?

O Matlab um ambiente de interpretao de comandos baseados em operaes


numricas matriciais. O seu enorme poder no que se refere a operaes com matrizes o
faz indicado como base de desenvolvimento de clculos em inmeros ramos de cincias
exatas, principalmente da engenharia.
Pelo fato de permitir a criao de arquivos tipo texto com uma seqncia de
comandos (os chamados arquivos .m), o ambiente Matlab , por vezes, chamado de
linguagem de programao, o que criticado por alguns. Estes se apiam no fato de o
Matlab no gerar arquivos executveis, ou seja, programas que funcionam por si s; os
arquivos .m s so executveis dentro do ambiente Matlab.
Entretanto, uma linguagem de programao definida no dicionrio Aurlio
como uma linguagem em que se expressa um conjunto de aes de forma aceitvel
pelo computador, o que permite a incluso do Matlab nesta classificao.
Um comando no Matlab , primeira vista, uma expresso matemtica na qual
se definem uma ou mais operaes. Por exemplo, se digitarmos o comando a=1,
estamos criando uma varivel denominada a, qual atribudo o valor 1. Se, em
seguida, digitarmos os comandos b=2 e c=a+b, sero criadas as variveis b (com o
valor 2) e c (com o valor 3, resultante da operao de 1+2).
Os trs comandos ditos acima, se digitados tais como mostrado, sero seguidos
de respostas do Matlab apresentando em tela os valores das variveis. Para que isto
no acontea, devemos finalizar cada comando com um ponto-e-vrgula. Desta forma,
as operaes so realizadas sem nos serem apresentados os resultados.
Apesar de no ser recomendado em alguns casos (por diminuir a clareza dos
comandos), podem-se digitar vrios comandos seguidos em uma mesma linha. Basta
que, no final de cada um deles, seja includa uma vrgula ou um ponto-e-vrgula. No
primeiro caso, o resultado da operao retornado e, no segundo, no.
Se, no terceiro comando do exemplo acima, fosse digitado apenas a+b, o
resultado da operao seria automaticamente atribudo a uma varivel denominada ans,
ficando, ento, nela armazenado. Entretanto, deve-se tomar cuidado ao se utilizar
comandos desta forma, pois o contedo da varivel ans modificado por um comando
seguinte no qual no esteja explcito um nome para a varivel que receber o resultado.

4
Mini-Curso de Matlab

Quanto ajuda do Matlab, por muitos tida como insuficiente e no muito


esclarecedora, existem duas formas de se acess-la: atravs da barra de menu ou atravs
de linha de comando. Na barra de menu, basta selecionar a opo Help, que exibir as
opes Table of Contents e Index habilitadas; a opo Help Selected se encontra, na
maioria das vezes, desabilitada (a seguir isto ser esclarecido).
A primeira opo abre uma janela de ajuda por hipertexto, onde as funes
esto classificadas em categorias. A segunda opo abre um ndice de todas as funes
ordenadas alfabeticamente, tambm sob a forma de hipertexto. J a opo Help
Selected s se torna habilitada quando o nome de uma funo estiver selecionado na
janela de comando do Matlab; ento, quando selecionada esta opo, a ajuda referente a
esta funo diretamente acessada.
No caso de acesso ajuda atravs de linha de comando, basta se fazer uso do
comando help. Se digitado sozinho, sero mostradas todas as categorias em que esto
classificadas as funes; se vier acompanhado do nome de uma categoria, sero listadas
todas as funes contidas nesta classificao; se for acompanhado do nome de uma
funo, ser listada a ajuda referente a esta funo.
Deve-se adiantar que apenas algumas das funes do Matlab so do tipo built-
in, ou seja, contidas no executvel do Matlab (Matlab.exe). Grande parte das funes,
na verdade, so combinaes das funes e comandos bsicos do tipo built-in em
arquivos de cdigo-fonte que recebem a extenso .m. Estes arquivos sero abordados
mais frente na gerao de programas e funes em Matlab.

2. Tipos de Variveis do Matlab.

O Matlab (at as ltimas variaes da verso 4.2) possui, basicamente, apenas


trs tipos de variveis. Estes tipos so: Real, Complexo e Caracter. As variveis no
precisam ter seus tipos definidos antes de sua utilizao e podem t-los modificados a
qualquer momento.
O tipo real, mais comumente utilizado, representa um formato do tipo ponto
flutuante de 8 Bytes (64 bits) por elemento matricial. Mesmo um nmero inteiro estar
enquadrado neste tipo de varivel.

5
Mini-Curso de Matlab

O tipo complexo equivale a dois elementos de 8 Bytes, um representando a parte


real e outro, a parte imaginria; so ocupados, pois, 128 bits por elemento matricial.
Vale notar que um nmero puramente imaginrio tambm ocupar estes 128 bits, uma
vez que no existe um tipo para nmeros puramente imaginrios.
J o tipo caracter, apesar de representar um nmero inteiro entre 0 e 255 (que o
ndice correspondente a um caracter no cdigo ASCII), ocupa tambm 8 Bytes, o que
significa um grande desperdcio (um caracter poderia caber em apenas 1 Byte). Isto
evidencia a ineficincia do Matlab em operaes com textos (este inconveniente j foi
superado nas verses 5.X).
Para qualquer destes trs tipos bsicos de variveis, o Matlab apresenta dois
valores especiais que representam operaes indevidas, que em uma linguagem usual
de programao, poderiam, at mesmo, travar a mquina. So eles: Inf e NaN. O
primeiro significa infinito e resultado da diviso de um nmero finito por zero. O
segundo significa Not-a-Number e oriundo de operaes cujo resultado indefinido,
como zero dividido por zero ou infinito dividido por infinito. Vale notar que, ao se
dividir um nmero finito por Inf, obtemos como resultado o valor zero.

3. Escalares, Vetores, Matrizes e Strings.

Na verdade, qualquer varivel, no Matlab, tratada como uma matriz. Portanto,


um nmero escalar corresponde a uma matriz 1x1 (uma linha por uma coluna).
Entretanto, um nmero escalar (ou uma matriz 1x1) reconhecido pelo Matlab como tal
e, desta forma, objeto de algumas regalias, como ser visto na prxima seo.
Os vetores, por sua vez, so matrizes que possuem apenas uma linha ou apenas
uma coluna. Por conseguinte, so denominados, respectivamente, de vetores-linha e
vetores-coluna. Deve-se tomar cuidado com isto, pois algumas funes do Matlab
retornam valores (quando vetores) como vetores-linha e outras, como vetores-coluna.
Tambm deve-se prestar ateno, como ser abordado na prxima seo, com as
operaes entre vetores de espcies diferentes.
J uma string uma cadeia de caracteres. Geralmente, uma string se apresenta
sob a forma de um vetor (usualmente, linha, mas pode-se apresentar como coluna), mas

6
Mini-Curso de Matlab

existem, tambm, strings sob a forma de matrizes. Deve-se notar que, neste caso, todas
as linhas (ou todas as colunas) da matriz de caracteres devem possuir o mesmo nmero
de elementos, incluindo espaos em branco.
At agora, vimos que o Matlab opera com matrizes (1x1), (1xn), (nx1) ou
(mxn). No obstante, existe uma matriz especial no Matlab, que definida como uma
matriz vazia, ou, em outras palavras, uma matriz 0x0 (por vezes, encontram-se matrizes
de tamanho nx0 ou 0xn, que tambm so reconhecidas como vazias).
Agora, veremos como montar matrizes no Matlab:

a) a=1; gera um escalar;


b) a=[1 2 3 4]; ou a=[1,2,3,4]; ou a=1:4; ou a=[1:4]; geram um vetor linha;
devemos notar que as duas ltimas notaes significam um vetor formado pela
seqncia dos nmeros inteiros de 1 a 4;
c) a=[1;2;3;4]; ou a=[1 2 3 4]; ou a=[1,2,3,4]; ou a=[1:4]; geram um vetor
coluna; note que o sinal de aspas simples aps as trs ltimas notaes representa
transposio (ou seja, o que era linha passa a ser coluna e vice-versa). Como j se deve
ter percebido, a separao dos elementos por espaos em branco ou por vrgulas resulta
em uma linha, enquanto que a separao por pontos-e-vrgulas resulta em uma coluna
(ou, mais rigorosamente, o ponto-e-vrgula representa final de linha);
d) a=1:2:10; ou a=[1:2:10]; geram um vetor-linha cujos elementos so a
seqncia de 1 at 10 em passos de 2, ou seja [1 3 5 7 9]. Como o ltimo elemento do
intervalo (10, no caso) no corresponde ao primeiro elemento (1) somado a um mltiplo
inteiro do passo (2 vezes n), ele automaticamente descartado;
e) a=10:-2:1; ou a=[10:-2:1]; geram, assim com acima, uma seqncia de
nmeros, s que, agora, de 10 at 1 com decremento de 2 entre os elementos, ou seja, o
vetor-linha [10 8 6 4 2];
f) a=[1 2 3;4 5 6]; ou a=[1,2,3;4,5,6]; ou a=[1:3;4:6]; geram uma matriz 2x3;
g) a=texto; ou a=[texto]; gera uma string sob a forma de um vetor-linha;
note que as aspas simples, agora, delimitam uma seqncia de caracteres ao se formar
uma string.
h) a=[texto]; gera uma string sob a forma de vetor-coluna; identifique as
aspas simples delimitadoras de caracteres e a aspa simples que denota transposio.
i) a=[texto;teste]; gera uma string sob a forma de matriz 2x5;

7
Mini-Curso de Matlab

j) a=[ ]; gera uma matriz vazia.

Obs.: 1) Notao cientfica: a=1.234e8; significa 1,234 x 108;


2) : a=pi;
3) Nmeros imaginrios: a=i; ou a=j; representam o valor 0+1.i;
4) Caso se utilize os valores nominais pi, i, ou j, deve-se tomar o cuidado de no
se criarem variveis com estes nomes.
5) Existe um nmero especial denominado eps (epsilo), que representa um
nmero bastante pequeno til na preveno de divises por zeros ou operaes similares
(eps=2,22.10-16).

Existem algumas funes especiais que ajudam na criao de vetores e matrizes.


So elas:
ones(n,m) - cria uma matriz (ou vetor) de n linhas e m colunas apenas com
elementos unitrios;
zeros(n,m) - cria uma matriz (ou vetor) de n linhas e m colunas apenas com zeros;
rand(n,m) - cria uma matriz (ou vetor) de n linhas e m colunas com valores
aleatrios distribudos uniformemente entre 0 e 1;
randn(n,m) - cria uma matriz (ou vetor) de n linhas e m colunas com valores
aleatrios seguindo uma distribuio normal de mdia nula e varincia unitria;
eye(m) - cria uma matriz-identidade de ordem m.

4. Indexao de Matrizes e Vetores.

Os elementos de uma matriz ou de um vetor podem ser indexados


individualmente ou conjuntamente, bastando seguir o nome da varivel por parnteses
indicando a ordem (no caso de vetores) ou os ndices de linha e coluna (no caso de
matrizes) do(s) elemento(s) desejado(s). Estes ndices podem ser escalares ou vetores, e
sua utilizao se d da seguinte forma:
- seja a matriz A=[1 2 3;4 5 6;7 8 9];

8
Mini-Curso de Matlab

- se desejarmos obter o elemento da segunda linha e terceira coluna, basta fazermos


A(2,3), e o valor retornado ser 6;
- se desejarmos obter toda a primeira coluna, fazemos A(:,1), e o valor retornado ser
[1; 4; 7];
- se quisermos toda a segunda linha: A(2,:) retornar [4 5 6];
- se quisermos os elementos da segunda e terceira linhas e da primeira e segunda
colunas: A([2,3],[1,2]) ou A(2:3,1:2) retornar [4 5;7 8];
- se quisermos obter todos os elementos da matriz lidos coluna a coluna formando um
vetor coluna, basta fazermos: A(:), que retornar [1;4;7;2;5;8;3;6;9].

Obs. 1: no caso de vetores, obviamente, basta indicar um ndice, que determinar a


ordem do elemento dentro do vetor. Neste caso, no importa se o vetor do tipo linha
ou coluna.
Obs. 2: se, para matrizes, for utilizado apenas um ndice m, ser retornado o elemento
que corresponderia m-sima posio caso a matriz fosse tornada um vetor atravs da
operao A(:) (ou seja, percorrida coluna a coluna). Assim, se fizssemos A(6), isto
corresponderia a indicar o valor 8.

Atribuio de valor a um elemento de uma matriz ou vetor.


Para se atribuir um valor a um elemento de uma matriz ou vetor, basta indexar
devidamente este elemento e usar, normalmente, a operao de atribuio. Por exemplo,
se for empregado o comando A(2,3)=12; alterar apenas o elemento da segunda linha
terceira coluna da matriz A, que ficar com a seguinte composio: [1 2 3;4 5 12;7 8 9].

Atribuio de valores a um subconjunto de elementos de uma matriz ou vetor.


Para se atribuir um mesmo valor a um subconjunto de elementos de uma matriz
ou vetor, a partir da verso 5.X, basta indexar devidamente estes elementos e realizar a
atribuio deste valor como um escalar. Por exemplo, se for empregado o comando
A(2,1:3)=12; alterar todos os trs elementos da segunda linha da matriz A, que ficar
com a seguinte composio: [1 2 3;12 12 12;7 8 9].
Por outro lado, para se atriburem valores distintos para cada elemento, deve-se
obedecer correspondncia de dimenses entre o conjunto que ser alterado e os valores

9
Mini-Curso de Matlab

que sero atribudos. Por exemplo: A(2,1:2)=[10 11]; alterar os dois primeiros
elementos da segunda linha da matriz A, que ficar com a seguinte composio: [1 2
3;10 11 6;7 8 9].
Obs.: antes da verso 5.X, qualquer operao de atribuio devia obedecer
correspondncia de dimenses, mesmo no caso em que um mesmo valor fosse atribudo
ao subconjunto de elementos. Deste modo o comando anlogo primeira atribuio
desta seo deveria ter a seguinte sintaxe: A(2,1:3)=12*ones(1,3);.

5. Operaes Algbricas Bsicas: Escalares, Matriciais e Elemento-a-Elemento.

O Matlab permite que se faam as operaes bsicas de soma, subtrao,


multiplicao, diviso e potenciao de forma bastante simples e verstil, de acordo com
o tipo de varivel com que se esteja lidando. Os operadores so +, -, *, /, \ e ^.
A priori, as operaes algbricas so tidas como operaes matriciais, que
correspondem s operaes com escalares se os mesmos forem considerados matrizes
1x1. Entretanto, o Matlab reconhece a escalaridade das matrizes 1x1, atribuindo-lhes
os privilgios de escalares. Portanto, pode-se somar, subtrair, multiplicar ou dividir uma
matriz por um escalar sem a preocupao de se incidir em erro. Por outro lado, deve-se
tomar cuidado ao se dividir um escalar por uma matriz, caso em que esta deve ser
quadrada e inversvel.

Obs.: no caso de divises entre escalares, a/b equivale a b\a.

Quanto s operaes matriciais, pouco se tem a dizer, bastando serem


observadas as regras de operaes com matrizes. Ou seja, nos casos de soma e
subtrao, os operandos devem possuir mesmo tamanho; no caso de produto, os
operandos devem apresentar tamanho da seguinte forma: [lxm] * [mxn]; j na
potenciao, a matriz deve ser quadrada.
A nica operao que merece uma maior ateno a diviso, que possui dois
operadores (/ e \). Na verdade, o que o Matlab faz numa diviso o produto de um
operando com o inverso do outro. O operador utilizado indicar qual operando ser
invertido. Por exemplo:

10
Mini-Curso de Matlab

- na diviso A / B, o que ocorre A * (1/B);


- na diviso A \ B temos (1/A) * B.

Isto pode ser melhor exemplificado na soluo de sistemas de equaes lineares:


- se temos o sistema determinado por A.x=b, onde x e b so vetores coluna (como
mais comum), a soluo se d por x=A\b. Isto se deve ao fato de um vetor coluna (x) ser
o resultado do produto de uma matriz quadrada (no caso, o inverso de A) por outro vetor
coluna (que b);
- j se o sistema fosse determinado por y.A=b, onde y e b so vetores linha, a soluo
seria obtida atravs da expresso y=b/A. Analogamente, temos, neste caso, que um
vetor linha (y) resultado do produto de um vetor linha (b) por uma matriz quadrada (o
inverso de A).

Obs.: o Matlab possui um operador unrio especial para inverso de matrizes (ou
escalares) que o inv( ). Mais uma vez, chamamos a ateno ao fato de que seu
argumento deve ser uma matriz quadrada.

Em relao s operaes do tipo elemento a elemento, como o prprio nome


sugere, o que ocorre uma operao entre os elementos de posio correspondente nos
dois operandos. Portanto, de se esperar que os dois operandos possuam mesmo
tamanho. Sabemos que este j e o caso da soma e da subtrao; j nas demais operaes,
para determinar que elas devem ser realizadas elemento a elemento, seu operador deve
ser precedido de um ponto: .*, ./, .\, .^. Por exemplo:
- [2 3 4] .^ [5 4 3] retornar [32 81 64];
- [2 3 4] .* [5 4 3] retornar [10 12 12];
- [30 20 40] ./ [3 4 5] retornar [10 5 8];
- o mesmo resultado ser obtido na expresso [3 4 5] .\ [30 20 40].

Obs.: a funo sqrt(x) calcula a raiz quadrada de um escalar ou dos elementos de um


vetor ou de uma matriz; j a funo sqrtm(A) calcula a matriz-raiz-quadrada de A.

O Matlab tambm possui funes trigonomtricas (diretas, tipo seno, e inversas,


tipo arco-seno), exponenciais e logartmicas, que so funes de carter elemento a

11
Mini-Curso de Matlab

elemento. Por serem funes, os argumentos de entrada devem ser postos entre
parnteses aps o nome da funo. Por exemplo:
sin(x) - seno;
cos(x) - cosseno;
tan(x) - tangente;
sinh(x) - seno-hiperblico;
cosh(x) - cosseno-hiperblico;
tanh(x) - tangente-hiperblica;
asin(x) - arco-seno;
acos(x) - arco-cosseno;
atan(x) - arco-tangente;
atan2(y,x) - arco-tangente de quatro quadrantes, onde os sinais da ordenada (y) e da
abscissa (x) so considerados para definir o quadrante onde se encontram; o
resultado se encontra no intervalo [-,];
asinh(x) - arco-seno-hiperblico;
acosh(x) - arco-cosseno-hiperblico;
atanh(x) - arco-tangente-hiperblica;
exp(x) - ex;
log(x) - logaritmo neperiano (logex);
log10(x) - logaritmo na base 10 (log10x);

Para maiores detalhes digite help elfun na linha de comando.

6. Operaes com Strings

Como visto anteriormente, as strings so vetores ou matrizes cujos elementos


so nmeros inteiros entre 0 e 255, representando o cdigo ASCII dos caracteres.
Quando vetores, o mais comum que sejam vetores-linha. Quando matrizes, cada linha
da matriz corresponde a uma linha de um texto; neste caso, todas as linhas devem
possuir mesmo nmero de caracteres (incluindo espaos em branco).

12
Mini-Curso de Matlab

O intercmbio entre nmeros e caracteres se d atravs das funes abs e setstr.


Por exemplo, seja n um vetor com os seguintes elementos: [116 101 120 116 111]. O
comando s=setstr(n) resultar em um vetor s contendo a string texto. Por sua vez, o
comando m=abs(s) criar um vetor numrico m idntico a n.
Em geral, o Matlab (verso 4.X) trata as strings como vetores numricos
comuns. Assim sendo, strings (e elementos de strings) podem ser somadas,
multiplicadas, etc. Adicionalmente, a operao de concatenao de strings feita
simplesmente utilizando-se colchetes. Por exemplo, se quisermos concatenar a string s
com o texto nmero 1, basta digitar:
t=[s, nmero 1];
ou, equivalentemente,
t=[s nmero 1];
Os comandos acima apenas so vlidos por tanto a string s quanto o texto seguinte
serem vetores-linha (strings devem ser concatenadas assim como o so quaisquer
vetores ou matrizes). Deve-se notar que os delimitadores de strings para o Matlab so as
aspas simples.
Abaixo, so apresentadas algumas funes manipuladoras de strings (para
maiores detalhes, digite help strfun na linha de comando):
isstr(s) - retorna 1 (verdadeiro) se s for uma string e 0 caso contrrio;
blanks(N) - cria uma string com N espaos vazios (vetor-linha);
deblank(s) - remove todos os espaos vazios existentes no final de uma string;
strcmp(s,t) - retorna 1 se a string s for idntica string t;
findstr(s,t) - retorna o(s) ndice(s) em que a string menor se encontra na maior;
lower(s) - converte a string s em minsculas;
upper(s) - converte a string s em maisculas;
num2str(n) - transforma o nmero n em uma string contendo os caracteres
correspondentes a todos os seus algarismos;
str2num(s) - converte uma string s que possua caracteres numricos em um
nmero.

13
Mini-Curso de Matlab

7. Operaes Lgicas.

A priori, o leitor deve estar imaginando como so possveis operaes lgicas no


Matlab, sendo ele um ambiente que trata todos os nmeros como ponto flutuante de
dupla preciso, no existindo o tipo booleano. O que o Matlab faz para resolver este
problema muito simples: o nmero 0 (zero) considerado o valor booleano falso;
qualquer outro nmero real considerado como verdadeiro, seja positivo ou negativo;
um nmero puramente imaginrio no vlido para operaes lgicas. No obstante,
para compensar esta caracterstica do Matlab, o resultado de qualquer operao lgica
restringe-se aos valores 0 (falso) ou 1 (verdadeiro). Vemos abaixo os operadores lgicos
do Matlab:
~ no;
& e;
| ou;
xor ou exclusivo.

Obs.: a operao de ou exclusivo no se d por meio de um operador lgico (como as


demais operaes), mas por meio de uma funo. Desta forma:
- a operao de no A dada por: ~A;
- a operao de A e B dada por: A & B;
- a operao de A ou B, por: A | B;
- j a operao de A ou-exclusivo B denotada por: xor(A,B).

Deve-se notar que, pela natureza do Matlab, so impossveis as operaes


lgicas do tipo bit-a-bit. Entretanto, todas elas podem ser realizadas vetorialmente, ou
seja, operando um elemento de um vetor com o elemento de posio correspondente de
um outro vetor. No preciso dizer que ambos os vetores devem ter mesmo tamanho.
Alm das operaes lgicas, o Matlab tambm permite as operaes relacionais,
que so as operaes que comparam nmeros; todas retornam ou 0 ou 1. So elas:
== igual relacional; no confundir com o igual de atribuio (=);
~= diferente;
> maior que;

14
Mini-Curso de Matlab

< menor que;


>= maior ou igual;
<= menor ou igual.

Adicionalmente, o Matlab inclui funes lgicas muito teis e que podem


simplificar rotinas complexas a apenas uma linha de cdigo. Elas so listadas abaixo:
any algum elemento verdadeiro (pelo menos um);
all todos os elementos so verdadeiros.

Obs.: as funes acima possuem aplicabilidade bvia em vetores, ou seja, elas testam se
algum ou todos os elementos de um vetor so verdadeiros. J a seu emprego com
matrizes no to bvio: o que elas fazem testar coluna por coluna da matriz como se
fossem vetores independentes, e o resultado retornado sob a forma de um vetor linha
(cada elemento corresponde ao resultado da coluna correspondente). Desta forma, se
quisermos, por exemplo, testar se algum ou todos os elementos de uma matriz so
verdadeiros, o que devemos fazer , respectivamente, any(any(A)) ou all(all(A)), sendo
A a matriz.
Outras funes lgicas no menos importantes, mas de uso mais restrito, so
apresentadas abaixo. Para se obterem informaes sobre suas sintaxes, use a ajuda do
Matlab.
exist testa se uma varivel est definida no ambiente;
isnan retorna verdadeiro para elementos NaN;
isinf retorna verdadeiro para elementos infinitos;
finite retorna verdadeiro para elementos finitos;
isempty testa se uma matriz vazia (dimenso [0x0]);
isreal testa se uma matriz real;
issparse testa se uma matriz esparsa;
isstr testa se uma varivel uma string, ou seja, uma cadeia de caracteres;
isglobal testa se uma varivel global (a hierarquia das variveis, ou seja,
locais e globais, ser explicada mais adiante).

15
Mini-Curso de Matlab

8. Clusulas de Loops e Condicionais.

Existem, no Matlab, trs clusulas que se enquadram nesta categoria: if


(puramente condicional), for (loop) e while (loop condicional). Elas possuem aplicao
similar s clusulas de mesma natureza encontradas em outras linguagens de
programao. Entretanto, por estarmos lidando com uma linguagem interpretada, as
clusulas de iterao (loop) demandam muito tempo, uma vez que, para cada iterao,
feita uma nova interpretao da linha de comando. No caso do for, sabe-se que
possvel sua substituio por operaes matriciais em grande parte das vezes, o que
acarreta uma considervel economia de tempo; mas isto nem sempre possvel.
A clusula de if possui utilizao em casos onde se deseja que um comando (ou
um bloco de comandos) seja realizado apenas se uma expresso lgica (condio) for
verdadeira. A clusula de for repete um bloco de comandos um nmero determinado de
vezes. J a clusula de while repete um bloco de comandos enquanto uma expresso
lgica for verdadeira.
A sintaxe do if dada abaixo:

if <expresso lgica>,
comando 1;
comando 2;

comando n;
else,
comando n+1;

comando n+m;
end

O que a estrutura acima faz realizar os comandos 1 a n se a expresso lgica


for verdadeira, e, opcionalmente, os comandos n+1 a n+m se a expresso for falsa (o
que determinado pelo comando else).

16
Mini-Curso de Matlab

Obs.: deve-se salientar (e a mesma observao vale para os demais comandos) que as
vrgulas aps os comandos if e else no so necessrias no caso de digitao em linhas
diferentes (como o caso do modelo acima), mas apenas em situaes em que toda a
estrutura digitada em uma mesma linha. Outra observao muito importante, e que
tambm vale para todas as clusulas, que deve-se, sempre, termin-las com o comando
end. Esta caracterstica muito til na identificao de estruturas dentro de outras.

Como no existe, no Matlab 4.X, estruturas do tipo switch (como na linguagem


C) ou case (como no Pascal), existe, dentro da clusula if, a opo elseif, que permite a
utilizao de vrias expresses lgicas para determinar comportamento do programa
dentro de uma mesma estrutura if. A sua utilizao modelada abaixo:

if <expresso lgica 1>,


comando 1;
elseif <expresso lgica 2>,
comando 2;

elseif <expresso lgica n>,
comando n;
else,
comando n+1;
end

A sintaxe do for dada abaixo:

for varivel=vetor,
comando 1;
comando 2;

comando n;
end

17
Mini-Curso de Matlab

O que a estrutura acima faz o seguinte: sendo vetor um vetor de comprimento


m, os comandos 1 a n sero repetidos m vezes, sendo atribudo seqencialmente
varivel auxiliar varivel um elemento de vetor. O vetor pode ser uma varivel j
definida anteriormente no programa ou pode ser definido na linha do for, no
precisando ser constitudo de elementos ordenados. No caso em que se queira que
varivel seja simplesmente um contador, pode-se usar a seguinte forma: for
varivel=1:m, end.

A sintaxe do while apresentada a seguir:

while <expresso lgica>,


comando 1;
comando 2;

comando n;
end

Ou seja, o bloco de comandos ser repetido enquanto a expresso lgica for


verdadeira. Deve-se chamar ateno ao fato de que a expresso lgica testada antes da
execuo do bloco de comandos. Portanto, se a expresso for inicialmente falsa, o bloco
nunca executado. Outras linguagens, como o Pascal, possuem clusulas do tipo repeat
until, que faz o teste da expresso no final, sendo o bloco executado ao menos uma
vez.

Alguns comandos teis a serem utilizados com as clusulas vistas neste captulo
so:
break termina a execuo de um loop;
return retorna para a funo ou programa chamador;
error termina a execuo de uma funo ou de um programa, exibindo
uma mensagem de erro na tela e soando um alarme sonoro.

18
Mini-Curso de Matlab

9. Comandos de Entrada e Sada de Dados.

Aqui, vamos abordar algumas funes que permitem que o Matlab se comunique
com o usurio ou com arquivos de disco. No que concerne comunicao com o
usurio, existem as funes abaixo:
disp(X) se X for uma cadeia de caracteres (string), o texto existente nesta
varivel apresentado na tela; se for uma varivel numrica, o seu contedo
exibido sem ser acompanhado do nome da varivel;
x=input(texto,s) apresenta a mensagem texto na janela de comando e
interrompe o andamento do programa at que o usurio entre com um valor,
que ser atribudo varivel x; se o argumento opcional s for utilizado, o
Matlab considerar que a informao a ser digitada pelo usurio uma string,
no precisando, portanto, vir entre aspas simples;
x=menu(Pergunta,Opo 1,,Opo n) abre uma janela de dilogo
com o texto Pergunta e n botes com rtulos Opo 1 a Opo n e
interrompe a execuo do programa at que um dos botes seja pressionado;
atribudo, ento, varivel x o valor numrico correspondente ao boto
selecionado (1 a n);
pause interrompe a execuo do programa at que o usurio pressione
uma tecla; se possuir um argumento numrico de entrada (pause(n)), o
programa sofrer uma pausa de n segundos e, ento, prosseguir
normalmente;

Em relao s funes de comunicao com arquivos, temos listadas abaixo as


principais:
fid=fopen(caminho\arquivo, cl) abre arquivo com a clusula de
abertura cl e atribui varivel fid um nmero identificador para este arquivo
dentro do Matlab; a clusula de abertura, se for r, determina que o arquivo
apenas para leitura; se for w, determina que o arquivo para escrita e o cria
se necessrio; se for omitida a clusula, o Matlab assume que o arquivo
apenas para leitura; se no for possvel a abertura do arquivo, fid recebe o
valor -1; ver ajuda da funo para outras clusulas e opes;

19
Mini-Curso de Matlab

x=fread(fid,[m,n],f) l mxn elementos do arquivo identificado por fid sob


o formato f e os atribui varivel x, que ser de tamanho mxn e ter seus
elementos preenchidos coluna por coluna; o formato determina como os
valores esto armazenados no arquivo (char, integer, float, etc.); se o
segundo argumento de entrada for um escalar n, x ser um vetor com n
elementos; se for inf, todo o arquivo lido; ver ajuda para maiores
informaes;
contador=fwrite(fid,x,f) escreve os elementos da matriz x coluna por
coluna no arquivo identificado por fid sob o formato f; a varivel contador
receber o nmero de elementos salvos com sucesso; ver ajuda para outras
informaes;
flag=fseek(fid,n,p) altera a posio corrente (ponteiro) do arquivo
identificado por fid; dado um offset de n bytes em relao posio
determinada por p, que pode ser bof (incio do arquivo), eof (final do
arquivo) ou cof (posio corrente do arquivo); a varivel flag recebe o valor
0 em caso de sucesso e -1 em caso de falha;
posio=ftell(fid) atribui varivel posio o valor do ponteiro do
arquivo identificado por fid; este valor dado em bytes contados a partir do
incio do arquivo;
flag=fclose(fid) fecha o arquivo identificado por fid e atribui 0 varivel
flag em caso de sucesso e -1 em caso de falha; fclose all fecha todos os
arquivos abertos em uma sesso de Matlab.

Obs.: as funes fread e fwrite manipulam o arquivo a partir do valor corrente do seu
ponteiro e modificam este valor para o final do bloco lido ou escrito; portanto, se um
arquivo possuir um formato complexo, com vrios formatos de elementos, podem-se
seqenciar vrias funes fread ou fwrite, cada uma utilizando um determinado
formato.

Dica: se for desejado armazenar em uma varivel do Matlab o tamanho em bytes de um


arquivo identificado por fid, pode-se fazer uso da seqncia de comandos abaixo,
colocadas imediatamente aps a abertura do arquivo:

20
Mini-Curso de Matlab

fseek(fid, 0, eof);
tamanho=ftell(fid); %Tamanho do arquivo em bytes
fseek(fid, 0, bof);

Obs.: o caracter de percentual (%) apresentado acima denota linha de comentrio; tudo
o que estiver sua direita at o final da linha ser negligenciado pelo Matlab (ver
captulo 10).

10. Salvando e Recuperando Variveis.

O Matlab possui duas funes (save e load), que permitem que o usurio
salve/recupere, facilmente, variveis no/do disco. Suas sintaxes so descritas abaixo:
save arquivo varivel_1 varivel_n salva em um arquivo chamado
arquivo.mat as variveis varivel_1 at varivel_n; se forem suprimidos os
nomes das variveis, todas as variveis existentes no ambiente sero salvas;
se o comando vier seguido pela clusula -ascii, o arquivo salvo em formato
texto, usando oito dgitos ASCII (neste caso, no atribuda ao arquivo a
extenso .mat); ver ajuda deste comando para maiores detalhes;
load arquivo carrega as variveis salvas em arquivo.mat; se o arquivo
estiver em formato ASCII, deve-se incluir sua extenso na linha de comando
(load arquivo.ext); caso o arquivo ASCII no possua extenso, o comando
deve ser seguido pela clusula -ascii; ver, tambm, ajuda deste comando para
maiores informaes.

O formato .mat depende das matrizes que compem as variveis a serem


salvas. Matrizes pequenas ou constitudas por pelo menos um elemento no inteiro
utilizam o formato double (8 Bytes por elemento de matriz). Matrizes inteiras grandes
podem utilizar 4, 2 ou 1 Byte por elemento de matriz, formato este que
automaticamente selecionado pelo Matlab. Por outro lado, o formato ASCII, na preciso
mnima (8 dgitos), requer 9 Bytes (8 dgitos + 1 ponto decimal) ou 14 Bytes (os 9

21
Mini-Curso de Matlab

anteriores mais o indicador de potncia de 10 e+nnn) por elemento de matriz, alm


dos caracteres separadores e de retorno de carro.
Desta forma, percebe-se que, na grande maioria das vezes, os arquivos gerados
pelo comando save se mostram superdimensionados para a preciso que se possui ou
que se deseja nas variveis. No caso do formato ASCII, ento, o desperdcio de espao
de arquivo evidente, possuindo como nico fator determinante na sua utilizao a
universalidade deste formato, alm da possibilidade da visualizao dos dados em um
simples editor de texto. Portanto, deve-se sempre ponderar bem na escolha destas
funes do Matlab ou de outro formato determinado pelo usurio (onde seriam
utilizadas as funes fread e fwrite).

11. Funes de Grficos 2D e 3D.

Uma das grandes habilidades do Matlab est na criao de grficos, tanto em


duas quanto em trs dimenses, cujos respectivos comandos bsicos de grficos de linha
so o plot e o plot3. Estes comandos so bastante flexveis tanto na forma de desenho
(se linhas retas unem os pontos ou se os mesmos so representados por determinados
marcadores, como cruzes, bolas, etc.) quanto nas cores. Suas sintaxes bsicas so:
plot(x1,y1, cor-marcador-1, x2,y2, cor-marcador-2,);
plot(x1,y1,z1, cor-marcador-1, x2,y2,z2, cor-marcador-2,);
onde xi, yi, zi correspondem a vetores (de mesmo tamanho) contendo as coordenadas x,
y e z, respectivamente, do i-simo conjunto de pontos, e cor-marcador-i uma string
que representa a cor e o tipo de marcador para este conjunto de pontos. Se esta string for
omitida, o desenho, por default (por omisso), ser feito atravs interpolao por linhas
retas cheias (contnuas) e colorido ordenadamente para cada i em uma seqncia de
cores preestabelecida pelo Matlab. Quando declarada, a string de cor e marcador deve
ter um ou dois caracteres definindo cor e/ou marcador respectivamente; para marcadores
definidos por dois caracteres, a declarao de cor e marcador se d por trs caracteres.
Os seguintes marcadores e cores podem ser empregados na verso 4.2 (verses 5.X
apresentam marcadores adicionais):

22
Mini-Curso de Matlab

Cor Marcador
y amarelo . ponto
m magenta o bola
c ciano x marca-x
r vermelho + marca de mais
g verde * estrela
b azul - linha contnua
w branco : pontilhado (traos curtos)
k preto -. trao-ponto (traos longos e curtos)
-- tracejado (traos longos)

Para o caso do comando plot, se o vetor xi for omitido, a abscissa do grfico


representar a ordem dos elementos contidos em yi, ou seja de 1 at o tamanho do vetor.
Por exemplo, seja o vetor tempo definido por t = 0:pi/50:10*pi;. Ento o
comando de grfico 2D plot(t,sin(t),r,t,cos(t), b:) resultar no seguinte desenho:

J o comando de grfico 3D plot3(sin(t),cos(t),t,b); retornar o desenho


seguinte:

23
Mini-Curso de Matlab

Alguns comandos teis na elaborao e visualizao de grficos so:


title(ttulo) - insere a string ttulo como ttulo do grfico corrente;
xlabel(abscissa) - insere a string abscissa como rtulo do eixo-x;
ylabel(ordenada) - insere a string ordenada como rtulo do eixo-y;
zlabel(altura) - insere a string altura como rtulo do eixo-z;
grid - insere uma grade no grfico;
zoom - permite o enquadramento de uma regio do grfico assistido pelo mouse.

Outros tipos de grficos 2D:


loglog - idntico a plot, mas com escala tipo log-log (base 10);
semilogx - escala semi-log (linear em y e log em x);
semilogy - escala semi-log (linear em x e log em y);
bar - grfico de barras;
contour - linhas de contorno (grfico de nvel): apesar de ser um grfico
bidimensional, requer o argumento z.

Outros tipos de grficos 3D:


mesh - grfico de malha;
surf - grfico de superfcie;
cylinder - funo de suporte na gerao de cilindros;
sphere - funo de suporte na gerao de esferas.
Por exemplo, seja a esfera de raio unitrio definida por [x,y,z]=sphere;. Ento, o
comando de grfico 3D mesh(x,y,z) resulta no seguinte grfico:

24
Mini-Curso de Matlab

Para grficos de malha, o comando hidden off faz com que as linhas que estariam
escondidas por trs do slido tornem-se visveis, como abaixo:

No caso de no haver figura previamente aberta no Matlab, qualquer comando


de desenho cria uma figura nova. Havendo figuras abertas, o desenho ser feito na figura
corrente. Se for desejado criar uma nova figura para receber um novo desenho, utiliza o
comando figure, que gera uma nova figura e a torna a figura corrente. Todas as figuras
recebem um nmero de identificao (inteiro) que corresponde ao seu manipulador (veja
mais sobre manipuladores no captulo que fala sobre objetos). Assim sendo, a primeira
figura aberta numa seo do Matlab ser identificada pelo nmero 1, a segunda pelo
nmero 2, e assim por diante. Para se saber qual a figura corrente, basta digitar o
comando gcf, que retornar o seu manipulador (nmero inteiro). Para tornar a figura de
nmero 5, basta digitar o comando figure(5): se ela j existir, tornar-se- a figura
corrente; caso contrrio, ser criada uma nova figura (se ela ser mesmo a figura nmero
5 depender se j existirem quatro figuras abertas ou no).
No obstante, pode ser desejvel desenhar vrios grficos em uma mesma figura.
Para tal, deve-se fazer uso do comando subplot, que divide a figura em setores como se

25
Mini-Curso de Matlab

fosse uma matriz de grficos. Este comando deve ser seguido de trs argumentos: o
primeiro refere-se ao nmero de linhas desta matriz; o segundo, ao nmero de
colunas; j o terceiro indica qual o setor desta matriz a ser ocupado pelo grfico. Este
setor ser considerado o grfico corrente e, conseqentemente, qualquer comando de
desenho subseqente ser efetuado neste setor. Por exemplo, se quisermos colocar em
uma mesma figura os trs grficos mostrados anteriormente, dividindo-a em quatro
setores (2 linhas por 2 colunas), devemos fazer a seguinte seqncia de comandos
(supondo que o vetor de tempo t e os vetores da esfera x, y, z j existem):
subplot(2,2,1)
plot(t,sin(t),r,t,cos(t), b:)
subplot(2,2,2)
plot(sin(t),cos(t),t,b)
subplot(2,2,3)
mesh(x,y,z)

que resultar na seguinte figura:

Para maiores detalhes ver help graphics, help plotxy e help plotxyz.

12. Alguns Comandos teis.

26
Mini-Curso de Matlab

Na utilizao rotineira do Matlab, surgem, muitas vezes, problemas para os


quais o Matlab j possui soluo, o que, geralmente, s vamos saber depois de ter gasto
um bom tempo tentando resolver (e dizemos para ns mesmos: gostaria de ter
conhecido esta funo antes). Alguns comandos bastante teis e que podem diminuir
bastante o nosso esforo so apresentados a seguir:
i=find(X); retorna os ndices em que X diferente de zero; se X for substitudo por
uma operao booleana, este comando pode retornar os ndices dos elementos que
atendem a uma determinada condio, por exemplo, i=find(A>100); retorna os
ndices dos elementos de A que so maiores que 100.
y=reshape(x,m,n); cria uma nova varivel y com os mesmos elementos que x (lidos
coluna-a-coluna) s que organizados em m linhas e n colunas.
eval(comandos); executa os comandos contidos na string comandos; til, por
exemplo, para criar variveis cujo nome depende do valor de uma varivel, como se
segue: eval([ variavel , num2str(10) , =100; ]); onde se cria uma varivel
denominada variavel10 contendo o valor 100.
mean(A); calcula a mdia dos valores contidos em A; se A for uma matriz, retorna
um vetor linha contendo as mdias das colunas de A.
sum(A); calcula o somatrio dos elementos de A; se A for uma matriz, retorna um
vetor linha contendo o somatrio das colunas de A.

13. Construo de Programas e Funes.

Os programas em Matlab (script files) so arquivos tipo texto com extenso


.m, onde se encontra uma seqncia de comandos que sero compilados e, ento,
executados quando o nome do arquivo (sem a extenso) for chamado pela linha de
comando. Uma vez executados, todas as variveis criadas pelo programa permanecero
no ambiente Matlab aps seu trmino, a no ser que propositalmente apagadas atravs
do comando clear. Deste modo, um grande programa pode ser dividido em blocos
menores (rotinas), os quais podem ser chamados ordenadamente por um outro script.
Por exemplo, supondo que a rotina abredado.m leia os dados contidos em um arquivo,

27
Mini-Curso de Matlab

a rotina processa.m processe estes dados e a rotina desenha.m apresente os resultados


em grfico, o programa programa.m, no qual h escrito:

% Programa.m
% Programa que abre os dados contidos em um arquivo, processa-os e apresenta
%os resultados em grfico.

%Autor - Data
abredado;
processa;
desenha;
%fim do programa
realiza estes trs procedimentos consecutivamente.
O caracter de percentual, tal como dito anteriormente, indica que todo o texto
contido sua direita at o final da linha ser negligenciado pelo Matlab e representa um
comentrio do autor do programa. As primeiras linhas comentadas consecutivamente de
um programa so utilizadas pelo Matlab com help do mesmo. Deste modo, se
digitarmos na linha de comando help programa, aparecer na tela o seguinte texto:
Programa.m
Programa que abre os dados contidos em um arquivo, processa-os e apresenta
os resultados em grfico.
recomendvel sempre construir programas bem comentados, por exemplo
indicando o que cada comando (ou os principais) deveria realizar. Outra aplicao til
do caracter de percentual na alterao transitria (testes) de programas, fazendo com
que determinados comando sejam ou no executados tirando ou deixando o caracter.
As funes do Matlab, ao contrrio dos scripts, no deixam as variveis
declaradas em seu escopo no ambiente aps seu trmino; suas variveis so locais e
apenas existem enquanto a funo estiver rodando. A comunicao de dados para e pela
funo se d atravs dos argumentos de entrada e sada, respectivamente. Desta forma,
as funes apresentam a vantagem de economizar espao em memria, apenas deixando
no ambiente as variveis necessrias (argumentos da funo). Outra vantagem das
funes que elas so interpretadas e compiladas apenas na primeira vez que so
chamadas em uma seo do Matlab, sendo mantidas em memria, o que torna a sua

28
Mini-Curso de Matlab

reutilizao consideravelmente mais rpida (os scripts so interpretados sempre que


chamados).
Como, ento, construir uma funo em Matlab? Basta que a primeira linha til
(no comentada) do arquivo .m apresente a seguinte estrutura:
function [a,b,c]=funcao(x,y)
sendo, ento, seguida pelas linhas que geram os argumentos de sada a, b e c como
funes dos argumentos de entrada x e y. Caso haja apenas um argumento de sada, o
mesmo no precisa estar declarado entre colchetes. Convm, por medida de
organizao, que o nome da funo declarado na primeira linha seja o mesmo do
arquivo: na verdade, o nome que vale (que o Matlab compreende) o do arquivo .m.
Quando uma funo evocada por algum programa (ou pela linha de comando),
a estrutura de organizao dos argumentos de entrada e de sada demonstrada acima: os
primeiros entre parnteses e os ltimos entre colchetes (no necessrio se for apenas um
argumento de sada).
Pode-se alterar o comportamento de uma funo de acordo com o nmero de
argumentos repassados para ela (entrada) e por ela (sada) atravs dos operadores
unrios:
nargin - nmero de argumentos de entrada de uma funo;
nargout - nmero de argumentos de sada.

Um exemplo dado pela funo definida abaixo, cujo arquivo texto denomina-
se Funcao.m:

% Funcao.m
% Funo que realiza o produto, a diviso e a potenciao do primeiro argumento
%de entrada pelo segundo. Caso no haja o segundo argumento, considera este igual a 2
%devolvendo, portanto o dobro, a metade e o quadrado do argumento de entrada.
function [a,b,c]=funcao(x,y)
if nargin < 2, %Se no houver o segundo argumento de entrada,
y=2; %faz o mesmo igual a 2,
elseif length(y) > 1, %caso contrrio, se o mesmo no for um escalar,
y=y(1); %toma apenas seu primeiro elemento.
end;
a=x*y; % Faz o produto,
b=x/y; % a diviso,
c=x^y; % e a potenciao.

29
Mini-Curso de Matlab

Desta forma, caso existam as variveis w igual a 9 e z igual a 3, a declarao:


[e,f,g]=funcao(w,z);
criar (ou modificar) as variveis e, f e g, com valores 27, 3 e 729, respectivamente. As
variveis x, y, a, b e c, que so variveis locais da funo, no existem no ambiente
raiz do Matlab. As condies de variveis locais sero melhor apresentadas no
prximo captulo.
Obs.: as verses 4.X para PC do Matlab, como foram feitas para plataformas de 16 bits,
no admitem nomes de arquivos .m com mais de 8 caracteres, tampouco caracteres
especiais como vogais acentuadas e a consoante c cedilhada.

14. Hierarquia de Variveis (Locais e Globais).

A organizao de variveis no Matlab pode ser compreendida como sendo feita


por compartimentos. Basicamente, existem trs tipos de compartimentos de variveis:
1. Local Raiz: espao bsico de variveis, que corresponde s variveis criadas por
linhas de comando ou por scripts e que podem ser conferidas atravs dos comandos
who ou whos;
2. Local de Funo: espao de variveis locais de uma funo. Cada funo possui seu
prprio compartimento de variveis locais. Deste modo, funes diferentes podem
ter variveis com mesmo nome, ou ainda com mesmo nome que uma varivel do
espao Local Raiz, sem que elas se confundam (sejam consideradas a mesma
varivel);
3. Global: espao especial para compartilhamento de variveis entre funes diferentes
ou entre funes e o espao Local Raiz; as variveis existentes neste compartimento
podem ser conferidas atravs dos comandos who global ou whos global.

Uma varivel global simplesmente uma cpia de uma determinada varivel


local (quer do espao raiz, quer do espao de funo) no espao global. O processo de
globalizao de uma varivel conseguido simplesmente atravs do comando global
<nome da varivel>. A primeira vez que uma varivel declarada como global (seja

30
Mini-Curso de Matlab

uma varivel local de funo ou da raiz), uma cpia da mesma estabelecida no espao
global. Assim que qualquer outro espao local declarar o mesmo nome de varivel como
global, este espao receber uma cpia da varivel existente no espao global. Deste
modo, sempre que a varivel for modificada, esta modificao ser percebida por todos
os espaos que compartilham esta varivel global. Se alguma outra funo possuir uma
varivel com este mesmo nome mas no declar-la como global, esta varivel no se
confundir com a varivel global.

15. Objetos e Suas Propriedades (get e set).

Independentemente do carter estruturado dos programas em Matlab (linhas de


comando estruturadas seqencialmente em seu cdigo), parte de sua programao pode
assumir natureza semelhante orientada a objeto. Inmeros recursos grficos so
includos no Matlab, representando objetos, os quais so identificados por
manipuladores (handles) numricos e so organizados hierarquicamente como se segue:
- O objeto hierarquicamente superior a qualquer outro o ambiente raiz (root) do
Matlab, e identificado pelo manipulador 0. Todos os outros objetos so seus
descendentes.
- Os nicos filhos diretos do ambiente raiz so as figuras, que recebem como
manipuladores nmeros inteiros (diferentes de 0) referentes ao nmero existente na
barra de ttulo das mesmas. Para se obter um manipulador para uma figura (criada,
inicialmente, sem se definir propriedade alguma), deve-se preceder o comando figure
pela varivel que receber o manipulador:
fig=figure;
- Todos os demais objetos so filhos ou netos das figuras, e recebem como
manipuladores nmeros no inteiros.
- O filho mais direto de uma figura o eixo. Nas verses 4.X do Matlab, sempre que
uma figura criada, ela j recebe um eixo como filho, o mesmo no acontecendo nas
verses mais recentes, onde qualquer eixo em uma figura deve ser criado:
ax=axes; ou
ax=subplot(m,n,i);

31
Mini-Curso de Matlab

- Outro filho de uso visual em uma figura o menu, aparecendo como um texto na barra
de menus da figura. Se no for especificado, no momento de sua criao, o objeto pai,
ele ser colocado na barra de menus da figura corrente. Entretanto, este tipo de objeto
pode ser agrupado dentro outro menu, servindo como um submenu; neste caso, no
momento de sua criao, deve-se especificar o menu ao qual ele ser incorporado:
mn=uimenu; (para menus) ou
sbmn=uimenu(mn); (para submenus)
- Os objetos filhos de figuras mais teis em criao de ambientes visuais so,
indubitavelmente, os controles, que incluem: push buttons, radio buttons, check boxes,
editores de texto, textos fixos, sliders, quadros (estes possuem apenas aspecto esttico) e
menus tipo pop-up (verses 4.X), alm de toggle buttons e list boxes (verses 5.X).
Todos estes tipos de controles so criados pelo mesmo comando, devendo-se, para
especificar seu tipo, estabelecer sua propriedade style.
u=uicontrol;
- Como filhos de eixos, podem-se criar vrios tipos de objetos: linhas, superfcies,
patches, imagens e textos. Estes ltimos surgem, tambm, como algumas propriedades
de eixos (ttulo e rtulo dos eixos de coordenadas).
l=line; ou l=plot(x,y);
s=surface; ou s=surf(x,y,z); ou s=mesh(x,y,z);
p=patch;
im=image;
tx=text;

Para se pesquisar, estabelecer ou alterar o valor de uma propriedade de objeto,


deve-se utilizar as funes get e set. Seja um objeto identificado pela varivel handle:
- get(handle): retorna uma lista com todas as propriedades deste objeto com seus
valores correntes;
- set(handle): retorna uma lista com todas as propriedades deste objeto, indicando, para
aquelas que apenas podem assumir alguns valores pr-definidos, quais so estes valores
(o valor default, e no o corrente, assinalado entre chaves);
Agora seja uma propriedade de objeto cujo nome propriedade, ento:

32
Mini-Curso de Matlab

- get(handle, propriedade): retorna o valor corrente desta propriedade (note que o


nome da propriedade deve ser denotado como uma string, isto , deve vir entre aspas
simples);
- set(handle, propriedade): caso esta propriedade possa assumir apenas valores pr-
definidos, os mesmos so listados; caso contrrio, a seguinte mensagem exibida: A
figure's "Position" property does not have a fixed set of property values.
Para se estabelecer ou alterar o valor de uma propriedade, deve-se saber qual o
tipo de valor que ela assume: escalar, vetor, matriz, string, ou booleano. Neste ltimo
caso, para as verses 4.X do Matlab, algumas propriedades utilizam as strings on e
off, enquanto outras utilizam yes ou no; nas verses 5.X, este dilema foi resolvido,
devendo-se utilizar as primeiras para qualquer propriedade. Assim, deve-se utilizar um
destes modelos de comando:
- set(handle, propriedade, 2) ou set(handle, propriedade, [1 2 3 4]) ou
set(handle, propriedade, [1 2 3; 4 5 6]) ou set(handle, propriedade, valor) ou
set(handle, propriedade, on) ou set(handle, propriedade, yes) ou, caso o valor
a ser estabelecido na propriedade esteja contido na varivel valor, set(handle,
propriedade, valor).
Caso no se saiba o manipulador de um determinado objeto, o mesmo pode ser
encontrado atravs de uma caracterstica conhecida do mesmo. Por exemplo, se sabido
que o valor da propriedade propriedade valor, ento o seguinte comando retornar
o(s) manipulador(es) do(s) objeto(s) que tenham esta caracterstica:
- handle=findobj(propriedade,valor);
Maiores detalhes sobre programao visual sero exibidos em outra apostila, a
ser editada futuramente.

16. Os Toolboxes do Matlab.

O Matlab, alm de ser uma ferramenta poderosssima por si s, torna-se


incomparvel por apresentar pacotes de programas, ou toolboxes, relacionados a vrias
reas de pesquisa, particularmente relacionadas engenharia. Os mesmos so adquiridos
separadamente e englobam, entre outras, as seguintes reas:

33
Mini-Curso de Matlab

Processamento de Sinais;
Processamento de Imagens;
Controle;
Wavelets;
Redes Neuronais;
Lgica Fuzzy;
Estatstica;
Otimizao;
Identificao de Sistemas
Operaes Simblicas;
Simulink (pacote de simulao por diagrama de blocos).

34

Você também pode gostar