Você está na página 1de 49

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2.

Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
MATLAB UMA LINGUAGEM TCNICA DE COMPUTAO
(adaptao de Joseph Harari IOUSP maro de 2009)
1. INTRODUO
Talvez a maneira mais fcil de visualizar o MATLAB seja pensar nele como
uma calculadora cientfica completa. Assim como em uma calculadora bsica, ele faz
operaes matemticas elementares como adio, subtrao, multiplicao e diviso. Tal
como uma calculadora cientfica, ele opera com nmeros complexos, razes quadradas e
potenciaes, logaritmos e operaes trigonomtricas, tais como seno, cosseno e
tangente. Da mesma forma que uma calculadora programvel, possvel armazenar e
recuperar dados, criar, executar e armazenar seqncias de comandos para automatizar o
clculo de equaes importantes, bem como fazer comparaes lgicas e controlar a
ordem na qual os comandos so executados. Assim como as calculadoras mais poderosas
disponveis, o MATLAB permite plotar dados de diversas maneiras, executar lgebra
matricial, manipular polinmios, integrar funes, manipular as funes, etc.
O MATLAB opera nas seguintes janelas:
1)
2)
3)
4)
5)

Comandos
Diretrios e arquivos (workspace).
Histrico de comandos.
Edio de textos.
Edio de grficos.

2. NOES BSICAS
Os operadores bsicos so:
+
Adio,
Subtrao,
*
Multiplicao,
/
Diviso,
^
Exponenciao.
Os clculos efetuados em uma frmula obedecem hierarquia matemtica, ou
seja, primeiro se calcula a exponenciao, depois a multiplicao e diviso e por ltimo a
soma e a subtrao. Caso haja necessidade de prioridade de clculo em outra ordem, se
utilizam parnteses.
Se digitar:
5+5
A resposta ser:
ans =
10
Este resultado significa que a resposta foi armazenada na varivel ans, pois
todos os resultados devem ser armazenados em uma varivel.
1

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
No MATLAB, as variveis so declaradas automaticamente, portanto basta
fazer uma atribuio. Por exemplo:
a=5
a=
5
Neste caso, a varivel a recebe o valor 5, assim o mesmo clculo anterior
pode ser:
b=a+a
b=
10
Obs.: Colocando ; no final de cada sentena, o MATLAB no retorna a resposta.
Se no conseguir se lembrar do nome de uma varivel, pode pedir para o
MATLAB apresentar a lista das variveis utilizadas, utilizando o comando who:
who
Your variables are:
a

ans

Com o who, o MATLAB no informa o valor das variveis, mas somente


lista seus nomes. Para descobrir seus valores, basta introduzir seus nomes aps o prompt
do MATLAB.
Para chamar os comandos previamente utilizados, o MATLAB utiliza as
teclas de cursor (, , , ) do seu teclado. Por exemplo, ao pressionar uma tecla
uma vez, se chama o comando mais recente do prompt do MATLAB. Pressionando-se a
tecla repetidamente se chama os comandos anteriores, um de cada vez. De forma
semelhante, pressionando-se a tecla , se chamam os comandos posteriores.
2.1. AJUDA ON-LINE
O comando help a maneira mais simples de se conseguir ajuda caso saiba
exatamente o tpico a respeito do qual necessita informaes. Ao digitar help <tpico>, a
tela apresenta ajuda sobre o tpico, caso ela exista. Por exemplo:
help sqrt
SQRT Square root.
SQRT(X) is the square root of the elements of X. Complex
results are produced if X is not positive.
See also SQRTM.
2

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
Essa foi a resposta ajuda sobre o tpico SQRT.
Caso no saiba o nome da funo, possvel utilizar o comando lookfor. O
comando lookfor fornece ajuda fazendo uma busca em toda a primeira linha dos tpicos
de ajuda e retornando aqueles que contm a palavra-chave especificada. Por exemplo:
lookfor determinant
DET Determinant.
DET Determinant of square GF matrix.
det_xtx.m: %xreglinear/DET_XTX Determinant of X'X
det_xtx.m: %xreglinear/DET_XTX Determinant of X'X
det_xtx.m: %xreglinear/DET_XTX Determinant of X'X
DET Symbolic matrix determinant.
DRAMADAH Matrix of zeros and ones with large determinant or inverse.
A palavra-chave determinant no um comando MATLAB, mas o comando
lookfor localizou nas descries de ajuda alguns comandos do MATLAB. A partir dessa
informao, o comando help pode ser usado para buscar ajuda sobre um comando
especfico.

3. LIES TUTORIAIS

3.1. LIO 1: CRIANDO E TRABALHANDO COM VETORES


x = [1 2 3]
x uma matriz linha com 3 elementos.
x=
1

y = [2; 1; 5]

y uma matriz coluna com 3 elementos.

y=
2
1
5
z = [2 1 0];
a=x+z
a=
3

Somar (ou subtrair) dois vetores com o


mesmo comprimento.

b=x+y
No pode somar (ou subtrair) uma matriz
linha com uma coluna.

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
??? Error using ==> +
Matrix dimensions must agree.
Pode multiplicar (ou dividir) os elementos de dois
vetores de mesmo tamanho termo por termo,
utilizando um operador especial ( .* , ./, etc.).

a = x.*z
a=
2

b = 2*a
b=
4

No necessrio um operador especial para


multiplicar um escalar com um vetor.
0

x = linspace(0,10,5)

Cria um vetor x com 5 elementos linearmente


espaados entre 0 e 10.

x=
0

2.5000

5.0000

7.5000 10.0000

Outra forma de criar vetor com elementos


inicial:incremento:valor final. Por exemplo
x=0:2.5:10
x=
0 2.5000

5.0000

equi-espaados

vetor=valor

7.5000 10.0000
Funes trigonomtricas sin, cos, etc., assim como
funes matemticas elementares sqrt, exp log, etc.,
operam com vetores termo por termo.

y = sin(x);
z = sqrt(x).*y
z=
0

0.9463 -2.1442

2.5688 -1.7203

Outra forma de preparar dados para processamento se encontra em carregar arquivos,


atravs do comando load. As matrizes a serem carregadas devem ter, obrigatoriamente, o
mesmo nmero de colunas em cada linha. Exemplos:
load marnim.dat;
load metsup.dat;

arquivo com dados de nvel do mar e nvel mdio do mar.


arquivo com dados de meteorologia de superfcie.
Nota: aps carregar um arquivo, o matlab
passa a reconhecer a varivel pelo nome do arquivo,
mas sem a extenso (neste caso, .dat).

clear all
close all
clc

'limpa' (elimina) todas as variveis utilizadas.


remove todas as figuras criadas.
'clear comand window' limpa (remove) todos os comandos da
4

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br

clear a
clear a b c

janela de comandos.
limpa somente a varivel a.
limpa as variveis a, b e c.

EXERCCIO
1.Crie um vetor t com 100 elementos equi-espaados, no intervalo [0,2].
Depois compute os seguintes valores:
x = sen(t).
y = t.sen(t)
w=(t - 1)/(t + 1).
z = sen(t2)/t2.
3.2. LIO 2: PLOTANDO GRFICOS SIMPLES
Os comandos usados do MATLAB so: plot, axis, xlabel, ylabel, title e print.
Neste exemplo, sero usadas as equaes paramtricas de um crculo unitrio:
x = cos
y = sen 0 2
teta = linspace(0,2*pi,100);
x = cos(teta);
y = sin(teta);
plot(x,y)
axis('equal');
xlabel('horizontal')
ylabel('vertical)
title('Crculo de raio unitrio')
print

Cria um vetor teta de 100 elementos linearmente espaados.


Calcula as coordenadas x e y.
Plota o grfico x x y.
Iguala a escala dos eixos.
Nomeia os eixos x e y.
Insere um ttulo para o grfico.
Imprime.

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br

EXERCCIO

1. Use o comando plot3(x,y,z) para plotar a hlice circular x(t) = sen t, y(t) =
cos t e z(t) = t, 0 t 20.
Plotagem 1D de dados.
% Line plot of a chirp
x=0:0.05:5;
y=sin(x.^2);
plot(x,y);
% Bar plot of a bell shaped curve
x = -2.9:0.2:2.9;
bar(x,exp(-x.*x));
% Stairstep plot of a sine wave
x=0:0.25:10;
stairs(x,sin(x));
% Errorbar plot
x=-2:0.1:2;
y=erf(x);
e = rand(size(x))/10;
errorbar(x,y,e);
% Polar plot
t=0:.01:2*pi;
polar(t,abs(sin(2*t).*cos(2*t)));
% Stem plot
x = 0:0.1:4;
y = sin(x.^2).*exp(-x);
stem(x,y)
%Histogram
x = 0:0.1:pi;
y = sin(x).^2;
hist(y,10)

3.3. LIO 3: CRIANDO, SALVANDO E EXECUTANDO PROCEDIMENTOS


Escreva um procedimento para desenhar o crculo unitrio da lio 2.
Escrever os comandos mostrados na lio anterior, salv-los, nome-los e execut-los no
MATLAB. Siga as instrues abaixo:
1. Escolha a opo Novo (New) no menu Arquivo (File) do MATLAB e
selecione a opo M-file.
2. Escreva as linhas a seguir. As linhas que comeam com o caracter % so
interpretadas como comentrios pelo MATLAB e so ignoradas.
6

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
% CIRCLE Procedimento que desenha um crculo unitrio.
% ------------------------------------------teta = linspace(0,2*pi,100);
% Cria o vetor teta.
x = cos(teta);
% Gera coordenadas x.
y = sin(teta);
% Gera coordenadas y.
plot (x, y);
% Plota o crculo.
axis (equal);
% Iguala a escala dos eixos.
title(Crculo de raio unitrio) % Pe um ttulo.
3. Depois de escrito, salve o arquivo como circle.m.
4. Volte ao MATLAB e verifique se possvel executar o seu arquivo, da
forma a seguir:
help circle
CIRCLE Procedimento que desenha um crculo unitrio.
------------------------------------------circle
Plota o mesmo crculo do exemplo
anterior.

Funes simples de tratamento estatstico de dados e plotagens:


mean(x)
calcula a mdia de x
max(x)
calcula o mximo valor de x
min(x)
calculo o minimo valor de x
median(x)
calcula a mediana de x
std(x)
calcula o desvio padro de x
hist(x)
plota o histograma de x
histc(x,lim1:lim2) fornece os nmero de valores em cada classe,
entre lim1 e lim2.
hold
mantm um grfico, para continuar com a mesma tela.
mantm o grfico, para continu-lo.
figure (1)
vai comear a fazer a figura 1.
figure (8)
vai comear a fazer a figura 8.
grid on
ou simplesmente grid gradeia os eixos de um grfico.
EXERCCIOS
1. Modifique o arquivo circle.m para mostrar o centro do crculo tambm. Marque o
ponto central com +.
2. Modifique o arquivo circle.m para formar um crculo de raio qualquer. Use o
comando input para escrever na tela para entrar com um valor para o raio. Ex: r =
input(Entre com o valor do raio: )

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
3. Escreva uma funo do segundo grau na forma y=ax2+bx+c, plote seus valores e
determine suas razes. Determine as razes para a=1, b=-1 e
c=-6; repita o procedimento para a=1, b=0 e c=-16.

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
4. COMPUTAO INTERATIVA
4.1. MATRIZES E VETORES
4.2. ENTRADA
Os valores de uma Matriz so colocados entre colchetes, sendo que, os
elementos de uma linha so separados por espao ou vrgula, e as colunas so separadas
por ponto e vrgula.
Exemplos:
Matriz
Entrada do comando no MATLAB
1 2 5
A
A = [1 2 5;3 9 0]

3 9 0
Obs.: Usa-se a mesma notao para vetores com uma linha ou com uma
coluna.
Continuao
Se a entrada muito longa, pode usar reticncias (...) e continuar a entrada na
outra linha. Reticncias podem tambm ser usadas em instrues de um m-file.
Exemplo:
A = [1/3 5.55*sin(x) 9.35 0.097; ...
3/(x+2*log(x)) 3 0 6.555; ...
(5*x 23)/55 x-3 x*sin(x) sqrt(3)];
4.3. NDICES
Dada uma matriz, os seus elementos podem ser acessados especificando os
ndices de suas linhas e colunas, sendo que A(i, j) representa do elemento aij da matriz A.
A notao : , usada na forma ind1:ind2: pode ser usada para representar o ndice inicial
(ind1) e final (ind2) de uma parte da matriz.
Exemplos:
A = [1 2 3; 4 5 6; 7 8 8]
Entrada da Matriz.
A=
1
4
7

2
5
8

A(2,3)

3
6
8

Elementos de uma linha so separados por


espao ou vrgula, e as colunas so separadas
por ponto e vrgula.

Acesso ao elemento da segunda linha e da


terceira coluna da matriz A.

ans =
6
9

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br

A(3,3) = 9
A=
1
4
7

2
5
8

3
6
9

B = A(2:3,1:3)
B=
4
7

5
8

5
8

possvel selecionar toda uma linha ou


coluna utilizando (:).

6
9

B(:,2) = []
B=
4
7

possvel retirar uma parte da matriz A,


usando os especficos limites para as linhas e
as colunas.

6
9

B = A(2:3,:)
B=
4
7

Substitui o elemento da terceira linha e da


terceira coluna da matriz A.

Para deletar uma linha ou uma coluna, basta


atribuir a matriz vazia.

6
9
Dimenso
A dimenso da matriz determinada automaticamente pelo MATLAB.
Exemplo:
0 0 0
B(2, 3) = 5;
produz, B

0 0 5

C(3,1:3) = [1 2 3];

0 0 0
produz. C 0 0 0
1 2 3

O comando size indica a dimenso de uma matriz (nmero de linhas e


colunas). Exemplo
>> a = [1 2 3; 4 5 6]
a=
1 2 3
10

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
4

>> size(a)
ans =
2 3
>> size(a,1)
ans =
2
>> size(a,2)
ans =
3
4.4. MANIPULAO DE MATRIZES
Se pode manipular facilmente a seleo de qualquer elemento de uma matriz,
utilizando vetores como ndices da matriz, para que seja criada uma submatriz a partir de
uma matriz. Tambm, pode-se adicionar, remover ou substituir linhas e/ou colunas de
uma matriz.
Reformando matrizes
Os elementos de uma matriz podem ser colocados dentro de um vetor ou
tambm podem ser agrupados para formar uma matriz com a dimenso diferente da
matriz de origem.
Suponha uma matriz A4x3; com o comando b = A(:), os elementos da matriz
A so armazenados em um vetor coluna b.
J com o comando reshape(A,3,4), transformamos a matriz A3x4. Note que o
nmero de elementos da matriz nunca pode mudar.
Nota: o comando size (A) fornece o nmero de linhas e colunas da matriz.
Transposta
A transposta de uma matriz, obtida colocando-se o nome da matriz seguida
de um apstrofo: matriz A4x3 A3x4.
Inicializao
A inicializao de uma matriz no necessria em MATLAB. Contudo, ela
pode ser til em alguns casos:
% Este comando cria uma matriz mxn onde
A = zeros(m,n)
todos os seus elementos so zeros.
A = ones (m,n)

% Este comando cria uma matriz mxn onde


todos os seus elementos so 1s.
11

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br

Inserindo uma linha ou uma coluna


Uma linha ou uma coluna pode ser facilmente inserida em uma matriz j
existente. Deve-se atentar para o seguinte detalhe: que o tamanho da linha ou coluna a ser
inserida deve ter o mesmo tamanho da linha ou coluna da matriz j existente.
Exemplo:
1 0 0

A= 0 1 0

,u=[5 6 7]

e v= 3

0 0 1

Ento
A = [A; u]

produz

A=

, uma matriz 4x3,

1 0 0 2

A = [A,v]

produz

A=

0 1 0 3

, uma matriz 3x4,

0 0 1 4

1005

A = [A, u]

A = 0 1 0 6 , uma matriz 3x4,

produz

0017

A = [A u]

produz

B = [ ]; B = [B; 1 2 3]

um erro.
produz B = [ 1 2 3 ]

Deletando uma linha ou coluna


Qualquer linha ou coluna de uma matriz pode ser deletada simplesmente
atribuindo um vetor nulo mesma.
Exemplo:
A(2, : ) = [ ]
deleta a 2. linha da matriz A.
O MATLAB possui alguns utilitrios para a gerao e manipulao de
matrizes. Por exemplo:
eye (m,n)
retorna uma matriz mxn com 1 na diagonal principal.
zeros (m,n)
retorna uma matriz de zeros mxn.
ones (m,n)
retorna uma matriz de elementos 1 mxn.
rand (m,n)
retorna uma matriz mxn com nmero randmicos.
diag(v)
sendo v um vetor qualquer, gera uma matriz diagonal com
o vetor v na diagonal.
diag(A)
extrai a diagonal principal de uma matriz para
12

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
um vetor coluna.
muda o formato da matriz.

reshape
eye(3)
ans =
1 0
0 1
0 0

0
0
1

B = [ones(3) zeros(3,2); zeros(2,3) 4*eye(2)]


B=
1
1
1
0
0

1
1
1
0
0

1
1
1
0
0

0
0
0
4
0

Cria uma matriz B usando submatrizes


elementares: ones, zeros, e a matriz
identidade de tamanhos especficos.

0
0
0
0
4

diag(B)'
ans =
1 1

Este comando extrai a diagonal principal da


matriz B e a transforma num vetor. Sem a
transposta ( ), o resultado seria
obviamente uma coluna.

diag(B,1)'
ans =
1 1

O segundo argumento escolhe a diagonal


que se deseja extrair.
0

4.5. CRIANDO VETORES


Caso se queira criar um vetor com um nmero grande de elementos, existe
um comando que possibilita criar um vetor sem precisar digitar todos os elementos. A
frmula geral :
v = valor inicial : incremento : valor final
Os trs valores acima podem ser expresses vlidas do MATLAB. Caso no
se coloque o incremento, o MATLAB utilizar o valor padro que 1.
Exemplo:
a = 0:10:100

produz a = [ 0 10 20 ... 100],


13

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
b = 0:pi/50:2*pi
c = 2:10

produz b = [0 pi/50 2*pi/50 ... 2*pi]


produz c = [2 3 4 5 ... 10]

No necessrio utilizar colchetes se um vetor gerado deste modo,


entretanto, um vetor atribudo como u = [1:10 33:-2:19] necessita a utilizao de
colchetes para fazer a concatenao dos dois vetores [1 2 3 ... 10] e [33 31 29 ... 19].
Finalmente, se tem o uso de duas funes embutidas freqentemente usadas para gerar
vetores:
linspace (a, b, n) gera um vetor linearmente espaado de comprimento n de a
at b.
Exemplo:
u = linspace(0, 20, 5) gera u = [0 5 10 15 20]. Ento u = linspace(a, b, n)
o mesmo que u = a: (b-a)/(n-1) : b.
logspace(a, b, n) gera um vetor logaritmicamente espaada e de comprimento
n de 10a at 10b.
Exemplo:
v = logspace(0, 3, 4) gera v = [1 10 100 1000]. Portanto logspace(a, b, n)
o mesmo que 10.^(linspace(a, b, n)).
Vetores especiais tais como vetores de 0s ou de 1s de um comprimento
especfico, podem ser criados com as funes zero, ones etc.

4.6. OPERAES COM MATRIZES


4.7. OPERAES ARITMTICAS
As operaes aritmticas com matrizes s sero vlidas se elas forem
matematicamente compatveis, conforme as seguintes condies:
A+B ou A-B
A*B
A/B
A^2

vlida se A e B so do mesmo tamanho


vlida se o nmero de colunas de A igual ao nmero de linhas de B.
vlida e igual a A.B-1 para matrizes quadradas do mesmo tamanho.
faz sentido somente se A quadrada; o comando igual a A*A.

Diviso direita:
Adicionando diviso esquerda( / ), existe tambm a diviso direita( \ ).
Em particular, o comando x = A\ b encontra o valor de b dividido por A. Portanto A\b
quase o mesmo que inv(A)*b, mas mais rpido e mais numericamente estvel do que
computar inv(A)*b.
Ordem de operaes

14

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
possvel fazer a multiplicao, diviso ou exponenciao elemento por
elemento entre matrizes ou vetores de mesmo tamanho colocando um ponto ( . ):
.*
Multiplicao de elemento por elemento,
./
Diviso esquerda de elemento por elemento,
.\
Diviso direita de elemento por elemento,
.^
Exponenciao de elemento por elemento,
.
Transposta no conjugada.
Exemplos:
u.*v
produz [u1v1 u2v2 u3v3 ... ],
u./v
produz [u1/v1 u2/v2 u3/v3 ...], e
u.^v
produz [u1v1 u2v2 u3v3 ...].
O mesmo verdadeiro para matrizes. Para duas matrizes de mesmo tamanho
A e B, o comando C = A.*B produz uma matriz C com elementos Cij = Aij . Bij.
A = [1 2 3;4 5 6;7 8 9];
x = A(1,:)'
x=
1
2
3

Produto do vetor linha (x) e do vetor coluna


(x); o resultado ser um escalar, pela
propriedade da multiplicao de matrizes.

x'*x
ans =
14
x*x'
ans =
1 2
2 4
3 6

Atribui ao vetor x, a transposta da primeira linha


da matriz A.

3
6
9

A*x

A dimenso do resultado ter o nmero de


linhas da matriz (x) e o nmero de colunas da
matriz (x).

Multiplicao de um vetor por uma matriz.

ans =
14
32
50
A^2
ans =
30 36
66 81

Exponenciao da matriz A; o mesmo que


A*A.
42
96
15

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
102 126 150
A.^2

Neste caso, a exponenciao feita elemento


por elemento.

ans =
1 4 9
16 25 36
49 64 81

EXERCCIO
1. Faa um tratamento estatstico dos dados nos arquivos marnim e
metsup, incluindo plotagem de dados.
4.8. OPERAES RELACIONAIS
H seis operadores relacionais no MATLAB:
<
<=
>
>=
==
~=

menor que
menor ou igual que
maior que
maior ou igual que
igual
diferente

A relao feita com vetores ou matrizes de mesmo tamanho, com 1 para


verdadeiro ou 0 para falso.
Exemplos:
Se x = [1 5 3 7] e y = [0 2 8 7] ento
k=x<y
k = x <= y
k=x>y
k = x >= y
k = x == y
k = x ~= y

resulta em k = [0 0 1 0]
resulta em k = [0 0 1 1]
resulta em k = [1 1 0 0]
resulta em k = [1 1 0 1]
resulta em k = [0 0 0 1]
resulta em k = [1 1 1 0]

porque xi < yi para i = 3.


porque xi yi para i = 3 e 4.
porque xi > yi para i = 1 e 2.
porque xi yi para i = 1, 2 e 4.
porque xi = yi para i = 4.
porque xi yi para i = 1, 2 e 3.

4.9. OPERAES LGICAS


Existem quatro operaes lgicas:
&

E lgico
16

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
|
~
xor

OU lgico
NO lgico
OU exclusivo

Estes operadores trabalham de forma similar aos operadores relacionais.


Exemplos:
Para dois vetores x = [0 5 3 7] e y = [0 2 8 7],
m = (x>y)&(x>4)
n = x|y
m = ~(x|y)
p = xor(x,y)

all
any
exist
isempty
isinf
isfinite
isnan
find

resulta em m = [0 1 0 0],
resulta em n = [0 1 1 1],
resulta em m = [1 0 0 0],
resulta em p = [0 0 0 0].

No MATLAB existem muitas funes lgicas embutidas, como:


verdadeiro (=1) se todos os elementos de um vetor forem verdadeiros.
Exemplo: all(x<0) retorna 1 se todos os elementos de x forem negativos.
verdadeiro (=1) se algum elemento do vetor for verdadeiro.
Exemplo: any(x) retorna 1 se algum elemento de x diferente de zero.
verdadeiro (=1) se o argumento (uma varivel ou funo) existe.
verdadeiro (=1) para uma matriz vazia.
verdadeiro para todos os elementos infinitos de uma matriz.
verdadeiro para todos os elementos finitos de uma matriz.
verdadeiro para todos os elementos de uma matriz que no forem nmeros
(Not-a-Number).
encontra os ndices de elementos de uma matriz sujeito a uma condio.

>> x = [-5 5 2 7]
x=
-5 5 2 7
>> find(x>0)
ans =
2 3 4
>> indices=find(x<=3)
indices =
1 3
>> y=x(indices)
y=
-5 2

17

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
4.10.

FUNES MATEMTICAS ELEMENTARES


Todas as funes a seguir so realizadas termo por termo, portanto elas
produzem sadas com a mesma dimenso das entradas.
Funes Trigonomtricas
sin
asin
cos
acos
tan
atan, atan2
sec
asec
csc
acsc
cot
acot

seno.
arco seno.
coseno.
arco coseno.
tangente.
arco tangente.
secante.
arco secante.
cosecante
arco cosecante
cotangente
arco cotangente

sinh
asinh
cosh
acosh
tanh
atanh
sech
asech
csch
acsch
coth
acoth

seno hiperblico.
arco seno hiperblico.
cose hiperblico.
arco coseno hiperblico.
tangente hiperblico.
arco tangente hiperblico.
secante hiperblico.
arco secante hiperblico.
cosecante hiperblico.
arco cosecante hiperblico.
cotangente hiperblico.
arco cotangente hiperblico.

Os ngulos devem ser dados em radianos. Todas essas funes, exceto atan2,
pegam um escalar, vetor ou matriz como entrada de argumentos. A funo atan2 pega 2
entradas: atan2(y, x) e retorna o arco tangente do ngulo y/x.

Funes Exponenciais
exp
log
log10
sqrt

Exponencial (exp(A) = eAij).


Logaritmo natural (log(A) = ln(Aij)).
Logaritmo na base 10 (log10(A) = log10(Aij)).
Raiz quadrada.

Funes Complexas
abs
angle
conj
imag
real

Valor absoluto.
ngulo de fase.
Complexo conjugado.
Parte imaginria.
Parte real.

Funes de aproximao
fix
floor
ceil

Aproxima na direo de zero.


Exemplo: fix([-2.33 2.66]) = [-2 2].
Aproxima na direo de -.
Exemplo: floor([-2.33 2.66]) = [-3 2].
Aproxima na direo de +.
Exemplo: ceil ([-2.33 2.66]) = [-2 3].
18

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
round
rem
sign

4.11.

Aproxima para o inteiro mais prximo.


Exemplo: round ([-2.33 2.66]) = [-2 3].
Resto da diviso. rem(a, b) o mesmo que a b*.fix(a./b).
Exemplo: Se a=[-1.5 7], b=[2 3], ento rem(a, b) = [-1.5 1].
Retorna o sinal.
Exemplo: sign ([-2.33 2.66]) = [-1 1].

FUNES DE MATRIZES
As funes de matrizes so:
expm(A)
logm(A)
sqrtm(A)

encontra o exponencial da matriz A (eA).


encontra log(A), tais que A = elog(A).
encontra a raiz da matriz A.

Obs: As funes normais realizam as operaes termo por termo enquanto as


funes de matrizes realizam uma operao com a matriz. Veja os exemplos a seguir.
A=[1 2;3 4];
asqrt = sqrt(A)
asqrt =
1.0000
1.7321

Raiz quadrada de cada elemento da matriz


A.

1.4142
2.0000

Asqrt = sqrtm(A)
Asqrt =

Raiz quadrada da matriz A. Portanto,


Asqrt*Asqrt = A.

0.5537 + 0.4644i 0.8070 - 0.2124i


1.2104 - 0.3186i 1.7641 + 0.1458i
exp_aij = exp(A)
exp_aij =

Analogamente, exp retorna a exponencial


de cada elemento da matriz, enquanto
expm retorna a exponencial da matriz A.

2.7183 7.3891
20.0855 54.5982
exp_A = expm(A)
exp_A =
51.9690 74.7366
112.1048 164.0738
19

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br

CARACTERES DE STRINGS
Todos os caracteres de strings so colocados entre apstrofo. O MATLAB
considera toda string como um vetor linha com 1 elemento para cada caracter. Por
exemplo,
4.12.

mensagem = Deixe-me sozinho


cria um vetor, nomeado mensagem, de tamanho 1 x 16 (os espaos tambm
contam como caracteres). Portanto, para criar um vetor coluna com strings em cada
linha, cada texto string deve ter exatamente o mesmo nmero de caracteres. Por
exemplo o comando:
nomes = [John; Ravi; Mary; Xiao]
cria um vetor coluna com um nome por linha. Contudo, para o MATLAB a
varivel nomes uma matriz 4 x 4. Claramente, o comando howdy = [Hi; Hello;
Namaste] resultar em um erro porque cada uma das linhas tem tamanhos diferentes.
Textos de diferentes tamanhos podem ser feitos preenchendo-os com espaos vazios.
Assim a entrada correta para o howdy ser:
howdy = [Hi; Hello; Namaste]
Um modo mais fcil de fazer a mesma coisa utilizar o comando char, que
converte strings para uma matriz. Assim ele pode criar o mesmo howdy acima
preenchendo os espaos em branco em cada linha automaticamente.
howdy = char(Hi, Hello, Namaste)
Manipulando caracteres strings
Os caracteres strings podem ser manipulados apenas como matrizes. Assim
c = [howdy(2, :) nomes(3, : )]
produz Hello Mary como uma sada na varivel c. Esta caracterstica pode ser
usada durante a execuo de funes de converso nmero-para-texto, como num2str e
int2str. Por exemplo, se quiser apresentar o resultado de um programa que calcula a
hipotenusa h de um tringulo retngulo, que varia dependendo da entrada do programa.
Assim para apresentar o resultado dever digitar:
disp( [A hipotenusa , num2str(h)] )
H vrias funes embutidas para a manipulao de strings.

20

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
converte strings para uma matriz.
converte caracteres para os correspondentes numricos de acordo com a
tabela ASCII.
cria n espaos em branco.
remove os espaos em branco de uma string.
executa a string como um comando.
encontra uma especificada substring em uma string.
converte nmero inteiros para textos.
verdadeiro (=1) para uma seqncia de caracteres.
verdadeiro (=1) para um caracter alfabtico.
verdadeiro (=1) se o argumento um texto.
converte letras maisculas em letras minsculas.
converte uma matriz para uma string.
converte nmeros para textos (similar ao int2str).
compara duas matrizes e retorna 1 se forem iguais.
compara os primeiros n caracteres de uma dada string.
concatena strings horizontalmente ignorando os espaos em branco.
concatena strings verticalmente ignorando os espaos em branco.
converte letras minsculas em letras maisculas.

char
abs
blanks(n)
deblank
eval
findstr
int2str
ischar
isletter
isstring
lower
mat2str
num2str
strcmp
strncmp
strcat
strvcat
upper

A funo eval
MATLAB possui uma poderosa funo chamada eval, que executa o que tem
no interior de uma string.
Se a string possui um comando para executar esta funo ideal. Por
exemplo,
eval(x = 5*sin(pi/3))
este comando atribui o valor 5*sen(/3) varivel x.
EXERCCIO
1. Entre com as matrizes a seguir:
2 6
1 2
A=
B=

3 9
3 4

5 5
C =

5 3

Calcule A+B-C, A*B e A.*C


5. GRFICOS
5.1. GRFICOS BSICOS EM 2-D
O mais bsico e talvez o mais til comando para produzir um grfico simples
em 2-D :
plot (x, y, Opes de estilos)
onde x e y so vetores contendo as coordenadas correspondentes de pontos no
grfico e opes de estilos um argumento opcional para especificar a cor, estilo de linha
(contnuo, tracejado, pontilhado, etc.), e o estilo da marcao dos pontos (o, -, *, +, etc)
21

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
todas as trs opes podem ser especificadas juntas na seguinte seqncia: cor, estilo de
linha e estilo de marcador.
Os dois vetores x e y DEVEM ter o mesmo nmero de elementos. Tamanhos
diferentes entre os dois vetores o caso mais comum de erro com o uso do comando plot.
Se a funo plot for utilizada sem o componente x, ela considera que o valor
das abscissas (x) so os valores dos ndices i de y ( i ). Se por exemplo
y = [2 3 5 9], o comando plot(y) ir plotar os pontos: (1, 2),(2, 3),( 3, 5),(4, 9).
5.2. OPES DE ESTILO

y
m
c
r
g
B
W
K

Cores
yellow
magenta
cyan
red
green
blue
white
black

Estilo de linha
contnuo
-tracejado
..
pontilhado
-.
trao ponto
none
sem linha

Estilo de marcao
+
sinal de mais
o
crculo
*
asterisco
x
marcao de x
.
marcao de ponto
^
circunflexo
square
quadrado
diamond losango

5.3. RTULOS, TTULO, LEGENDA E OUTROS OBJETOS DE TEXTO


Grficos podem ser anotados com os comandos xlabel, ylabel, title e text. O
primeiro dos trs comandos utilizam apenas 1 argumento de texto, enquanto o ltimo
utiliza 3.
Exemplo:
xlabel(Comprimento do cano)
Rtulo da abcissa.
ylabel(Presso do fluido)
Rtulo da ordenada.
title(Variao de Presso)
Ttulo do grfico.
text(2, 6, Note este ponto)
Insere um comentrio no ponto (2, 6)
Os argumentos do comando text(x,y,texto) devem ser vetores, sendo que x e
y devem ter o mesmo nmero de elementos e o texto deve ser uma string ou um
conjunto de string. Se texto um vetor ento ele deve ter o mesmo nmero de
elementos de x e y. Uma varivel til do comando text o gtext, que pega os valores de
x e y com um simples clik do mouse.
Legenda:
O comando legend produz uma caixa de legenda no grfico.
legend(string1, string2, ...)

Produz uma legenda usando os textos das


correspondentes strings.

legend(LineStyle1, string1,...)

Especifica o estilo de linha de cada rtulo.


22

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br

legend(...,pos)

Escreve a legenda fora do quadro de


plotagem se pos =-1 e dentro se pos=0.
(h outras opes para pos.)

legend off

Deleta a legenda do grfico..

Quando o MATLAB solicitado para produzir uma legenda, ele tenta


encontrar um lugar no grfico onde caiba o que est escrito nela sem atrapalhar os
traados do grfico, o grid, e outros objetos. Ao argumento opcional pos especifica o
local da caixa de legenda. Pos = 1 superior direito (default); pos = 2 superior
esquerdo; pos = 3 inferior esquerdo; pos = 4 inferior direito. Mas melhor mover a
caixa de legenda com o mouse.
1.1 CONTROLE DOS EIXOS E DE ZOOM
Uma vez que um grfico foi gerado se pode mudar os limites dos eixos com o
comando axis. Escrevendo:
axis( [ xmin xmax ymin ymax] )
onde os valores xmin, xmax, ymin e ymax so os respectivos valores dos
limites dos eixos a serem colocados no comando.
O comando axis pode assim ser usado para aumentar uma seo particular do
grfico, ou diminuir (zoom-in e zoom-out). H tambm alguns argumentos teis ao
comando.
axis(equal)
axis(square)
axis(normal)
axis(axis)
axis(off)

Escolhe uma escala igual para todos os eixos.


Transforma a tela padro, que retangular, para quadrada.
Retorna os eixos para os valores padro.
Congela os limites do eixo atual.
Remove o quadro de plotagem e os valores do eixo.

Controle parcial dos eixos


possvel controlar somente uma parte dos limites dos eixos e deixar que o
MATLAB complete os outros limites automaticamente. Isto feito especificando os
limites desejados com o comando axis e preenchendo com inf os limites que sero
escolhidos automaticamente. Por exemplo:
axis( [-5 5 -inf inf] )

Somente os limites do eixo x so especificados,


enquanto os do y so escolhidos pelo MATLAB.

5.4. GRFICOS SOBREPOSTOS

23

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
H dois diferentes modos de gerar grficos sobrepostos no MATLAB: o plot
e o hold.
Mtodo 1: Usando o comando plot.
Se toda a seleo de dados est disponvel, o comando plot com mltiplos
argumentos pode ser usado para gerar grficos sobrepostos. Por exemplo, se tiver trs
selees de dados (x1,y1), (x2,y2) e (x3,y3), o comando plot(x1, y1, x2, y2, :, x3, y3, o),
desenha (x1,y1) com uma linha slida, (x2,y2) com uma linha pontilhada e (x3,y3) como
vrios pontos separados em forma de crculos (o). Note-se que todos os vetores devem
ter o mesmo tamanho.
Se todos os componente (x1,y1), (x2,y2) e (x3,y3), tiverem o mesmo tamanho,
ento conveniente fazer uma matriz de X vetores e uma matriz de Y vetores de modo
que X = [x1 x2 x3] e Y = [y1 y2 y3], assim o comando plot(X,Y) ir desenhar os trs
grficos na mesma figura com cores diferentes.
Exemplo:
A seqncia de comandos abaixo ir gerar o grfico a direita.
x = [1 2 3; 4 5 6; 7 8 9; 10 11 12]
x=
1 2 3
4 5 6
7 8 9
10 11 12
y = [2 2 2;5 5 5;8 8 8;11 11 11]
y=
2 2
5 5
8 8
11 11
plot(x,y)

2
5
8
11

Mtodo 2: Usando o comando hold para gerar grficos sobrepostos.


Um outro modo de fazer grficos sobrepostos usando o comando hold.
Digitando hold on em qualquer ponto durante a sesso congela o grfico corrente na
janela de grficos. Todos os subseqentes grficos gerados pelo comando plot so
simplesmente adicionados (e no substitudos) ao grfico existente. O seguinte arquivo
procedimento (Script file) mostra como gerar o mesmo grfico como na figura abaixo,
usando o comando hold.
% - Procedimento que gerar grficos sobrepostos com o comando hold x = linspace(0,2*pi,100);
% Cria o vetor x.
y1 = sin(x);
% Calcula y1.
plot(x,y1)
% Desenha (x,y1) com uma linha slida.

24

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
hold on
y2 = x; plot(x,y2,'r--')
y3 = x-(x.^3)/6+(x.^5)/120;
plot(x,y3,'go')
axis([0 5 -1 5])
hold off

%
%
%
%
%
%

Congela a figura.
Desenha (x,y2) com uma linha tracejada.
Calcula y3.
Desenha (x,y3) com crculo.
ajusta os eixos do grfico.
Descongela a figura.

5.5. GRFICOS ESPECFICOS EM 1-D E 2-D


Existem muitas funes especficas de grficos em 1-D e 2-D. Elas so
usadas como alternativas para o comando plot. Aqui est uma lista dos possveis modos:
area
bar
barh
comet
compass
contour
contourf
errorbar
feather
fill
fplot
hist
loglog
pcolor
pie
plotyy
plotmatrix
polar
quiver
rose

cria uma rea preenchida.


cria um grfico de barras.
cria um grfico de barras horizontais.
faz uma animao 2D.
cria um grfico de vetores para nmeros complexos.
faz um grfico de curvas de nvel.
faz um grfico de curvas de nvel preenchidas.
desenha um grfico com barras de erro.
faz um grfico do vetor velocidade.
desenha um polgono preenchido com uma cor especificada.
desenha uma funo de uma nica varivel.
faz um histograma.
cria grficos com escala logartmica em ambos os eixos.
faz um grfico de uma matriz, onde cada clula
possui uma cor de acordo com o seu valor.
faz um grfico em forma de pizza.
faz um grfico com duplo eixo y.
faz uma matriz espalhada.
desenha curvas em coordenadas polares.
desenha campos de vetores.
faz histogramas em coordenadas polares.
25

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
scatter
semilogx
semilogy
stairs
stem

cria um grfico espalhado.


faz um grfico semilog com escala logartmica no eixo x.
faz um grfico semilog com escala logartmica no eixo y.
desenha um grfico em degraus.
desenha um grfico em fatias.

Exemplos destas funes.


Funo
Comando

Resultado

f(t) = t sen(t), 0 t 10
fplot(x.*sin(x), [0 10*pi])
Fplot
Note que a funo para ser desenhada
deve ser escrita como uma funo de x.

x = e t, y = t, 0 t 2
Semilogx

t = linspace (0, 2*pi, 200);


x = exp( -t ); y = t;
semilogx (x, y), grid;

x = t, y = e t, 0 t 2

Semilogy

t = linspace (0, 2*pi, 200);


semilogy (t, exp(t))
grid

x = e t, y = 100 + e2t, 0 t 2

Loglog

t = linspace (0, 2*pi, 200);


x = exp(t); y = 100 + exp(2*t);
loglog (x, y);
grid

26

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br

r2 = 2 sen (5t), 0 t 2
Polar

t = linspace (0, 2*pi, 200);


r = sqrt (abs(2*sin(5*t)));
polar (t, r)

r2 = 2 sen (5t), 0 t 2
x = r cos (t), y = r sen (t);
Fill

t = linspace (0, 2*pi, 200);


r = sqrt (abs(2*sin(5*t)));
x = r.*cos(t); y = r.*sin(t);
fill (x, y,k);
axis(square);
r2 = 2 sen (5t), 0 t 2
y = r sen (t);

Bar

t = linspace (0, 2*pi, 200);


r = sqrt (abs(2*sin(5*t)));
y = r.*sin(t);
bar (t, y);
axis([0 pi 0 inf]);

aprox = x x3/3!, 0 t 2
error = aprox sen(x).
Errorbar

x = 0: .1: 2;
aprx2 = x x.^3/6;
er = aprx2 sin(x);
errorbar (x, aprx2, er);

27

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
Populao mundial por continentes
cont = char(sia, Europa, frica, ...
Amrica do Norte, Amrica do Sul);
pop = [3332; 696; 694; 437; 307];
barh (pop)
Hist
for i = 1:5,
gtext (cont (i, : ));
end
xlabel (Populao em milhes);
title (Populao Mundial (1992), ...
Fontsize, 18);
-x
y1 = e sen(x), 0 t 10
y2 = e x

Plotyy

Area

x = 1: .1:10;
y1 = exp(-x).*sin(x);
y2 = exp(x);
Ax = plotyy (x, y1, x, y2);
hy1 = get(Ax(1),ylabel);
hy2 = get(Ax(2),ylabel);
set (hy1, string,e^-x .sen(x));
set (hy2, string,e^x);
y = sen(x)/x, -3 x 3

x = linspace (-3*pi, 3*pi, 100);


y = -sin(x)./x;
area (x, y)
xlabel (x); ylabel (sen(x)/x );
hold on
x1 = x (46:55); y1 = y (46:55);
area (x1, y1, facecolor,y);

Populao mundial por continentes

Pie

cont = char(sia, Europa, frica, ...


Amrica do Norte, Amrica do Sul);
pop = [3332; 696; 694; 437; 307];
pie (pop)
for i = 1:5, gtext (cont (i, : ));
end
title (Populao Mundial (1992), ...
Fontsize, 18);
28

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br

Histograma de 50 de nmeros distribudos


aleatoriamente entre 0 e 1.
Hist
y = randn (50,1);
hist (y)

= e-t/5 sen t, 0 t 2
Stem

t = linspace(0, 2*pi, 200);


f = exp(-.2*t).* sin(t);
stem(t, f)
r2 = 2 sen 5t, 0 t 2
y = r sen t

Stairs

t = linspace(0, 2*pi, 200);


r = sqrt (abs (2*sin(5*t)));
y = r.*sin(t);
stairs (t, y)
axis([0 pi 0 inf])

z = cos + i sen , 0 2
Compass

th = -pi: pi/5:pi;
zx = cos(th);
zy = sin(th);
z = zx + i*zy;
compass (z);
y = t sen t, 0 t 10

Comet

q = linspace(0, 10*pi, 200);


y = q.*sin(q);
comet (q, y);
Obs.: melhor visualizar no MATLAB,
pois ele desenhado gradualmente.

29

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
z = - (x2/2) + xy + y2, -5 x 5
-5 y 5
Contour

r = -5: .2:5;
[X, Y] = meshgrid (r, r);
Z = -.5*X.^2 + X.*Y + Y.^2;
cs = contour (X ,Y, Z);
clabel (cs);
z = x2 + y2 5sen(xy),
-2 x 2, -2 y 2

Quiver

r = -2: .2: 2;
[X, Y] = meshgrid (r, r);
Z = X.^2 + Y.^2 5.*sin(X.*Y);
[dx, dy] = gradient (Z, .2, .2);
quiver (X, Y, dx, dy, 2);
z = x2 + y2 5sen(xy),
-2 x 2, -2 y 2

Pcolor

r = -2: .2: 2;
[X, Y] = meshgrid (r, r);
Z = X.^2 + Y.^2 5.*sin(X.*Y);
pcolor (Z), axis(off );
shading interp

5.6. USANDO O COMANDO SUBPLOT


Para fazer alguns grficos lado a lado numa mesma figura (no sobrepostos),
usar o comando subplot para desenhar os grficos.
O comando subplot requer 3 argumentos:
subplot (m, n, p)
O subplot divide a janela da figura em m x n sub-janelas e coloca o prximo
grfico gerado na p-sima sub-janela, sendo p contado da esquerda para a direita e de
cima para baixo. Ento, o comando subplot (2, 2, 3), plot (x, y) divide a janela de grficos
em 4 partes e insere o grfico de (x, y) na terceira sub-janela, que a primeira sub-janela
da segunda linha.
5.7. GRFICOS 3D
O MATLAB dispe de diversas funes que facilitam a visualizao do
grfico 3D.
De fato os colormap embutidos podem ser usados para representar a quarta
dimenso. As facilidades dispostas incluem funes embutidas para plotar curvas
espaciais, objetos em forma de grade, superfcies, superfcies com textura, gerando
30

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
contornos automaticamente, especificando os pontos de luz, interpolando cores e textura
e mesmo imagens digitando help graph3d no comando se obtm uma lista de funes
viveis para grficos 3D gerais. Aqui est uma lista dos mais comuns:
plot3
stem3
bar3
bar3h
pie3
comet3
fill3
contour3
guiver3
scatter3
mesh
meshc
meshz
surf
surfc
surfl
trimesh
trisurf
slice
waterfall
cylinder
sphere

plot curvas no espao


cria dados discretos na plotagem fatiados.
desenha grficos 3D em barras.
idem acima para barras horizontais.
desenha o grfico de pizza 3D.
faz animao grfica para grficos 3D.
desenha figuras 3D preenchidas.
faz os contornos de um grfico 3D.
desenha vetores de campo em 3D.
faz grficos 3D espalhados.
desenha superfcie.
desenha superfcie ao longo de contornos.
desenha superfcie com cortinas.
desenha superfcie em 3D (igual ao mesh, porm preenchido).
idem meshc, porm preenchido.
cria superfcie com as fontes de luz especificadas.
mesh com tringulos.
surf com tringulos.
desenha uma superfcie volumtrica em pedaos.
cria um grfico em forma de cachoeira.
cria um cilindro.
cria uma esfera.

Entre estas funes plot3 e comet3 so anlogos ao plot e ao comet do 2D.


5.8. ROTACIONAR A VISTA
Existe um comando chamado rotate3d, que simplesmente possibilita girar o
grfico 3D com o mouse. Existem tambm funes como zoom, roll, pan, etc. Veja a
ajuda on-line no graph3D.
5.9. GRFICOS DE MALHA E SUPERFCIE
As funes para plotagem de malhas e superfcies (mesh e surf) e suas
variveis meshz, meshc, surfc e surfl possuem mltiplos argumentos opcionais, a maioria
formando mesh(Z) e surf(Z) onde z representa uma matriz. Superfcies geralmente so
representadas pelos valores de coordenada z mostrados em uma grade de valores (x,y).
Portanto para criar uma superfcie primeiramente precisamos gerar uma grade (x,y) de
coordenadas e definir a altura (a coordenada z) das superfcies de cada um dos pontos
da grade. Note-se que preciso fazer o mesmo para plotar uma funo de duas variveis.
O MATLAB dispe da funo meshgrid para criar uma grade de pontos abaixo de um
alcance especificado.
31

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
Exemplo: Plotar a funo z = x2 y2,
entre o domnio de 4 x 4 e 4 y 4.
Para fazer isso, ns primeiro formamos 25 pontos na grade. Ns podemos
criar duas matrizes X e Y sendo cada uma de tamanho 5 x 5 e escrever as coordenadas xy
de cada ponto dessas matrizes. Ns podemos ento avaliar z com o comando z = X.^2
Y.^2 Criar as duas matrizes X e Y muito mais fcil com o comando meshgrid:
rx = 0:4;
ry = -4:2:4;
[X,Y] = meshgrid(rx,ry);

X=
0
0
0
0
0

1
1
1
1
1

2
2
2
2
2

3
3
3
3
3

Y=
-4
-2
0
2
4

-4
-2
0
2
4

-4
-2
0
2
4

-4 -4
-2 -2
0 0
2 2
4 4

% cria um vetor rx = [0 1 2 3 4]
% cria um vetor ry = [-4 2 0 2 4]
% cria um grid de 25 pontos e armazena
essas % coordenadas em X e Y.

4
4
4
4
4

Os comandos mostrados acima geraram os 25 pontos necessrios. A grade


pode ser criada com o comando meshgrid: [X,Y] = meshgrid(rx,ry); quando rx e ry so
vetores especificando o local das linhas de grade ao longo dos eixos x e y. Tudo o que
ns precisamos gerar dois vetores, rx e ry, para definir a regio de interesse de
distribuio dos pontos. Tambm os dois vetores no precisam ser do mesmo tamanho ou
linearmente espaados (contudo, na maioria das vezes ns pegamos a regio quadrada e
criamos os pontos de grade igualmente espaados em ambas as direes). Para utilizar
bem grficos 3D preciso entender o uso do meshgrid
Funo

Comando
Desenho de uma curva paramtrica
espacial:

Resultado

x(t) = t, y(t) = t2, z(t) = t3. 0 t 1


plot3
t = linspace (0, 1, 100);
x = t; y = t.^2; z = t.^3;
plot3 (x, y, z), grid

32

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
Desenho de 4 polgonos preenchidos
com 3 vrtices cada:

fill3

X = [0 0 0 0; 1 1 1 1; 1 1 1 1];
Y = [0 0 0 0; 4 4 4 4; 4 4 4 4];
Z = [0 0 0 0; 1 1 1 1; -1 1 1 1];
fill3 (X, Y, Z, rand (3, 4));
view (120, 30)
Desenho de linhas de contorno 3D de:
Z = -5 / (1 + x2 + y2), -3 x 3,
-3 y 3.

contour3

r = linspace (-3, 3, 50);


[x, y] = meshgrid (r, r);
z = -5./(1 + x.^2 + y.^2);
contour3 (z).
z = cos x . cos y . e
-5 y 5

surf

x 2 y2
4

, -5 x 5,

u = -5: .2: 5;
[X, Y] = meshgrid (u, u);
Z = cos(X).* cos(Y).* ...
exp(-sqrt(X.^2 +Y.^2)/4);
surf(X, Y, Z)

z = cos x . cos y . e
-5 y 5
surfc

x 2 y2
4

, -5 x 5,

u = -5: .2: 5;
[X, Y] = meshgrid (u, u);
Z = cos(X).* cos(Y).* ...
exp(-sqrt(X.^2 +Y.^2)/4);
surfc (Z)
view (-37.5, 20)
axis(off )

33

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br

surfl

mesh

x 2 y2

z = cos x . cos y . e
, -5 x 5,
-5 y 5
u = -5: .2: 5;
[X, Y] = meshgrid (u, u);
Z = cos(X).* cos(Y).* ...
exp(-sqrt(X.^2 +Y.^2)/4);
surfl (Z)
shading interp
colormap hot
z = -5/(1+x2+y2), -3 x 3,
-3 y 3.
4

x = linspace (-3, 3, 50);


y = x;
[x, y] = meshgrid (x, y);
z = -5./(1+x.^2+y.^2);
mesh (z)
z = -5/(1+x2+y2), -3 x 3,
-3 y 3.

meshz

x = linspace (-3, 3, 50);


y = x;
[x, y] = meshgrid (x, y);
z = -5./(1+x.^2+y.^2);
meshz (z)
view (-37.5, 50)

z = -5/(1+x2+y2), -3 x 3,
-3 y 3.

waterfall

x = linspace (-3, 3, 50);


y = x;
[x, y] = meshgrid (x, y);
z = -5./(1+x.^2+y.^2);
waterfall (z)
hidden off

34

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
Populao mundial por continente.
% Popdata: As, Eu, Af, NA, AS
pie3

pop = [3332; 696; 694; 437; 307];


p ie3 (pop)
title (Populao Mundial)
Desenho de dados discretos com fatias.
x = t, y = t sen (t), z = e t/10 1.
0 t 6.

stem3

ribbon

t = linspace (0, 6*pi, 200);


x = t; y= t.*sin(t);
z = exp(t/10) 1;
stem3 (x, y, z, filled)
xlabel (x),
ylabel (x sen(x)),
zlabel (e^(t/10) - 1);
Curvas 2D desenhadas como tiras 3D
y1=sen t, y2 = e 15 t sen t, y3 = e 8 t sen t
0 t 5.

t = linspace (0, 5*pi, 100);


y1 = sin(t);
y2 = exp(-15*t).*sin(t);
y3 = exp(-8*t).*sin(t);
y = [y1; y2; y3];
ribbon (t, y, .1);

Uma unidade de esfera centrada na


origem e gerada por 3 matrizes x, y e z
de tamanho 21x21 cada.
sphere

sphere (20)
ou
[x, y, z] = sphere (20);
surf (x, y, z);

35

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
Um cilindro gerado por

cylinder

r = sen (3 z) + 2,
0 z 1, 0 2.
z = [0: .02: 1];
r = sin(3*pi*z) + 2;
cylinder (r)
Pedaos de uma funo volumtrica.
(x, y, z) = x2 + y2 z2;
-3 x 3, -3 y 3, -3 z 3.

slice

v = [-3: .2: 3];


[x, y, z] = meshgrid (v, v, v);
f = (x.^2 + y.^2 z.^2);
xrows = [10, 31]; yrows = 28;
zrows = 16;
slice (f, xrows, yrows, zrow);
view ([-30 30])
O valor da funo indicada por uma
intensidade de cor.

5.10. GRFICOS DE SUPERFCIE INTERPOLADOS


Muitas vezes, ns obtemos dados (geralmente a partir de experimentos) na
forma da tripla (x, y, z), e queremos ajustar uma superfcie a partir dos dados. Assim, ns
temos um vetor Z que contm os z-valores correspondendo aos valores x e y
irregularmente espaados. Aqui ns no temos uma grade regular, como a criada pelo
comando meshgrid, e no temos uma matriz Z que contm os z-valores da superfcie
naqueles pontos da grade. Portanto, ns temos que ajustar a superfcie a partir das
variveis dadas(xi , yi , zi). A incumbncia muito mais simples do que parece. O
MATLAB dispe de uma funo, griddata, que faz esta interpolao para ns. A sintaxe
geral desta funo
[Xi , Yi , Zi] = griddata (x , y , z , xi ,yi , mtodo)
onde x, y, z so os vetores dados (espaados no-uniformemente), xi e yi so
os pontos prescritos pelo usurio (com certeza, uniformemente espaados) no qual zi so
calculados pela interpolao, e mtodo a escolha do algoritmo de interpolao. Os
algoritmos disponveis so nearest, linear, cubic e v4. Veja a documentao on-line para
a descrio destes mtodos.
Como exemplo vamos considerar 50 pontos randomicamente distribudos no
plano xy, no limite 1< x <1, e 1< y <1. Os valores de z nestes pontos so determinados
por z= 3/(1+x2+y2). Assim, ns temos 3 vetores de comprimento 50 cada um. Os dados
dos pontos so mostrados na figura pelo stem plot.
% SURFINTERP: Script file que gera uma superfcie interpolada
36

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
% Dado os vetores x, y, e z, gera a matriz de dados Zi da interpolao para ajustar uma
superfcie
%------------------------------------------------------------------------------------------------------xv=2*rand(1,100) 1;
yv=2*rand(1,100) 1;
zv=3./ (1+ xv.^2 + yv.^2)
stem3(xv, yv, zv)
xi=linspace(-1, 1, 30);
espaados
yi=xi;
espaados

%este o vetor x
%este o vetor y
%este o vetor z
%mostra os dados como um grfico stem
%cria xi com os dados uniformemente
%cria yi com os dados uniformemente

%observe que yi uma coluna


[Xi, Yi, Zi]=griddata (xv, yv, zv, xi, yi, v4 );
% superfcie interpolada usando o mtodo v4 (MATLAB 4
% griddata) de interpolao
surf(Xi,Yi,Zi)
%plota a superfcie

5.11. SALVANDO E IMPRIMINDO GRFICOS


O jeito mais simples de to get a hardcopy de um grfico digitar print na
janela de comando depois que o grfico aparecer na janela figure. O comando print envia
o grfico atual da janela figure para a rea de impresso na forma apropriada. Em PCs
37

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
(rodando o Windows) e MACs se pode, alternativamente, ativar a janela figure (trazer
frente dando um click na janela) e ento selecionar print a partir do menu.
A figura pode tambm ser salva em um arquivo especfico no formato Post
Script ou Encapsulated Post Script (EPS). Estes formatos esto disponveis para
impressoras preto e branco bem como para impressoras coloridas. O Post Script inclui
ambos LEVEL 1 e LEVEL 2 Post Script. O comando que salva grficos para um arquivo
tem a forma:
Print ddevicetype options filename
onde devicetype for postscript printers pode ser um dos seguintes:
devicetype
ps
psc
ps2
psc2

Descrio
PostScript preto e branco
PostScript colorido
PostScript preto e branco nvel 2
PostScript colorido nvel 2

devicetype
eps
epsc
eps2
epsc

Descrio
EPSF Preto e Branco
EPSF colorido
EPSF Preto e Branco nvel 2
EPSF colorido nvel 2

Por exemplo, o comando:


print deps sineplot
salva a figura atual no arquivo Encapsulated Post Script sineplot.eps. A
extenso .eps automaticamente gerada pelo MATLAB.
Os padres do argumento opcional options so append, epsi, Pprinter, e
fhandle. Existem vrias outras plataformas de opes dependentes. Veja o on-line help
em print para maiores informaes. Em adio ao dispositivo Post Script, MATLAB
suporta um nmero de outros dispositivos de impressoras nos sistemas UNIX e PC.
Existem aes de dispositivos disponveis para HP Laser Jet, Desk jet, e impressoras
Paint jet, DEC LN03, impressoras Epson e outros tipos de impressoras. Veja no on-line
help em print para checar a disponibilidade de dispositivos e opes.
Other than printer devices, o MATLAB tambm pode gerar um arquivo
grfico nos seguintes formatos:
-dill
-djpeg
-dtiff
-dmfile

salva o arquivo no formato Adobe Illustrator


salva o arquivo como uma imagem JPEG
salva o arquivo como uma imagem comprimida TIFF
salva o arquivo como um M-file com grficos handles

Agora, possvel salvar um arquivo grfico como uma lista de comandos (um
M-file), restaurar o grfico depois, e modific-lo. Para salvar os grficos na janela ativa
atual, digite:
Print filename dmfile
Depois, para abrir o grfico novamente, simplesmente executar o arquivo
criado.
O formato Adobe Illustrator completamente til para se dar um retoque ou
modificar a figura de forma que fica muito difcil faz-lo no MATLAB. claro, preciso
38

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
ter acesso ao Adobe Illustratror para estar apto a abrir e editar o grfico salvo. O aspecto
mais desagradvel das verses anteriores s do MATLAB 5 era a falta de facilidade para
escrever subescritos e sobrescritos e misturar fontes nas legendas. A partir do MATLAB
5 este problema foi resolvido incorporando um subconjunto de comandos LATEX, os
quais podem ser usados em rtulos e textos. Se no conhecer LATEX, vale a pena
consultar o MATLAB helpdesk para ver a lista de comandos e suas sadas.

39

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
6. PROGRAMANDO NO MATLAB: FUNES E PROCEDIMENTOS
Para o estudo deste captulo, o essencial saber a diferena entre uma funo
e um procedimento. Ambos so subrotinas, que so uma seqncia de comandos que so
dados ao comutador pelo programador, mas a funo possui entradas e sadas e o
procedimento no.
Algumas vezes chamaremos os procedimentos de script files.
6.1. PROCEDIMENTOS
Sempre que escrever um procedimento basta escrever os mesmos comandos
que seriam digitados na rea de trabalho (parte interativa do MATLAB) dentro de um
arquivo *.m.
interessante fazer um procedimento sempre que houver um grupo de
comandos muito grande e preciso execut-los vrias vezes. Armazenando este grupo de
comandos num arquivo script, basta escrever o nome do arquivo na rea de trabalho e o
mesmo grupo de comandos ser executado.
Cuidado:
Nunca nomeie um arquivo script com o mesmo nome de uma varivel
que ele computa. Quando o MATLAB procura por um nome, ele
busca primeiro na lista de variveis existentes na rea de trabalho, ou
seja, se existir uma varivel com o mesmo nome de um arquivo script
ele jamais ser aberto.
O nome o arquivo deve comear com uma letra e os restantes devem
ser dgitos, exceto o ponto ( . ). Se pode escrever nomes longos, mas o
MATLAB ir pegar somente os primeiros 19 caracteres.
necessrio ateno com as variveis nos procedimentos, porque
todas as variveis declaradas ficaro na rea de trabalho a menos que
limpe as variveis ou a rea. Evitar nomes que coincidam com as
funes embutidas. bom checar se os nomes propostos j existem.
Se pode fazer isso com o comando exist(nome), que retornar zero
se no houver nada com este nome.
6.2. FUNES
Para se fazer uma funo, deve-se fazer quase a mesma coisa do que com o
procedimento. A nica diferena que a funo necessita de uma linha de definio com
a seguinte sintaxe:
function [variveis_de_sada] = nome_da_funo (variveis_de_entrada);
Exemplos:
Linha de Definio da funo
function [rho, H, F] = motion(x, y, t);
function [theta] = anguloTH(x, y, t);
function theta = THETA(x, y, t);
function [] = circulo(r);
function circulo(r);

Nome da funo
motion.m
anguloTH.m
THETA.m
circulo.m
circulo.m
40

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br

Cuidado:
A palavra function deve ser escrita em letras minsculas. Um erro muito
comum iniciar a declarao com Function.
6.3. CRIANDO E EXECUTANDO UMA FUNO
Escreva um arquivo funo para desenhar um crculo de um raio especfico,
com o raio sendo a entrada para a funo. Pode escrever um novo arquivo funo ou
modificar o procedimento da lio 3 (melhor).
1. Abra o arquivo circle.m:
Selecione a opo Abrir (Open) do menu Arquivo (File).
D um clique duplo no arquivo na caixa de dilogo.
2. Edite o arquivo circle.m da lio 3, conforme indicado abaixo:
function [x,y] = circlefn(r);
% CIRCLE Funo para desenhar um crculo de raio r.
% Arquivo escrito pelo Grupo Pet.
% Input: r = raio especificado.
% Output: [x,y] = coordenadas x e y dos pontos dados.
% ------------------------------------------teta = linspace(0,2*pi,100);
% Cria o vetor teta.
x = r*cos(teta);
% Gera coordenadas x.
y = r*sin(teta);
% Gera coordenadas y.
plot (x, y);
% Plota o crculo.
axis (equal);
% Iguala a escala dos eixos.
title(Crculo de raio r = , num2str(r)]) % Pe um ttulo com o valor de r.

3. Depois de modificado salve o arquivo com o nome circlefn.m, utilizando a


opo Save as... do menu Arquivo.
4. Este um exemplo de se executar uma funo de 3 diferentes formas.
Tente execut-los.
R = 5;
[x,y] = circlefn(R);

Especifica a entrada e executa a funo com as


variveis de sada especificadas.

[cx,cy] = circlefn(2.5);

possvel tambm especificar o valor de entrada


diretamente.

circlefn(1);

Se no precisar da sada, no necessrio armazenar


a sada numa varivel.

circlefn(R^2/(R+5*sin(R)));

claro que a entrada pode ser uma expresso vlida


do MATLAB.

41

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
6.4. CARACTERSTICAS ESPECFICAS DA LINGUAGEM
Foram discutidas vrias caractersticas da linguagem do MATLAB atravs de
muitos exemplos nas sees anteriores. preciso prestar uma ateno especial ao uso
formal de sinais de pontuao e diferentes delimitadores, operadores, especialmente a
ordem dos operadores ( um ponto (.) precedendo os operadores aritmticos, e os
operadores relacionados para controle de fluxo, o MATLAB provido de laos for e
while, e if-elseif-eslse e um switch-case-otherwise. Todo o controle de fluxo das
declaraes devem terminar com a correspondente declarao end. Ns agora
discutiremos o controle de fluxo e algumas outras caractersticas da linguagem. Veja a
ajuda on-line para mais detalhes.
6.5. O USO DE COMENTRIO PARA CRIAR AJUDA ON-LINE
Como j foi mostrado na discusso sobre funes, as linhas de comentrios
no princpio (antes de qualquer declarao executvel) de um script ou uma funo so
usadas pelo MATLAB como a ajuda on-line sobre o arquivo. Este automaticamente cria a
ajuda on-line para funes escrita pelo usurio. Isto uma boa idia para reproduzir a
linha de definio de funo sem a palavra function entre essas primeiras poucas linhas
de comentrio de forma que a sintaxe de execuo da funo exibida pela ajuda on-line.
O comando lookfor procura o argumento string na primeira linha comentada dos arquivos
M. Portanto, de acordo com a conveno um pouco confusa das funes embutidas do
MATLAB, se deveria escrever o nome do script ou funo no caso acima com letras
seguidas por uma curta descrio com palavras chaves, como a primeira linha comentada.
Ver o exemplo abaixo.
% SOLVEX resolve uma matriz de equao 3x3 com parmetro r.
6.6. CONTINUAO
Trs pontos consecutivos (...) ao trmino de uma linha denota continuao.
Logo, se digitar um comando que no cabe em uma nica linha, se pode dividi-lo em
duas ou mais linhas usando os trs pontos no final de cada linha exceto na ltima linha.
Exemplos:
A = [1 3 3 3; 5 10 2 20; 3 5 ...
10 2; 1 0 0 9];
x = sin(linspace(1,6*pi,100)) .* cos(linspace(1,6*pi,100)) + ...
0.5*ones(1,100) ;
plot(comprimento do tubo, presso do fluido,: ,comprimento do tubo, ...
presso terica, -)
No se pode, entretanto, usar o recurso continuao dentro de um caracter
string. Por exemplo, digitando
logo = Eu no sou somente o Presidente da empresa, ...
mas tambm um cliente;
42

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br

produz um erro. Para criar strings longas, quebre a string em pequenos


segmentos de string e use concatenao.
6.7. LAOS, RAMIFICAES E CONTROLE DE FLUXO
O MATLAB tem sua prpria sintaxe para declaraes de controle de fluxo
como o lao for, lao while e claro, if-elseif-else. Alm do mais, ele prove trs comandos
break, error, e return para controlar a execuo de scripts e funes. Abaixo
descreveremos cada uma dessas funes.
Lao For:
Um lao usado para repetir uma declarao ou um grupo de declaraes por
um nmero fixo de vezes. Temos aqui dois exemplos:
Exemplo 1:

for m = 1:100
Num = 1/(m+1)
end

O contador no lao for pode tambm ser especificado: for = m:k:n para
avanar o contador i em relao a k a cada vez (no exemplo abaixo n vai de 100 a 0 da
seguinte forma 100, 98, 96, ..., etc.). Se pode ter laos for abrigados, isto , colocar laos
for dentro de laos for. Todo for, entretanto, deve ser terminado com um end.
Exemplo 2:

for n = 100:-2:0, k = 1/(exp(m)), end

Lao While:
Um lao while usado para executar uma declarao ou um grupo de
declaraes para um nmero indefinido de vezes at que a condio especificada por
while no seja satisfeita. Por exemplo:
% Vamos encontrar todos as potncias de 2 abaixo de
v=1; i=1;
while num < 10000
num = 2^i ;
v = [v ; num] ;
i = i +1 ;
end

10000

Novamente, um lao while deve ter um end fechando o lao.


Declaraes If-elseif-else :
Esta construo prov uma ramificao lgica para computao. Por
exemplo:
if i > 5 ;
43

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
k=i;
elseif (i >1) & (j == 20)
k = 5*i + j ;
else
k = 1;
end
Se pode colocar a declarao if, contanto que se feche o lao com a
declarao end. Se pode colocar todos os trs tipos de laos, em uma combinao.
Switch-case-otherwise:
Essa construo ( uma caracterstica do MATLAB 5.x) que prove uma outra
ramificao lgica para computao. Uma varivel usada como uma chave e os valores
da varivel fazem com que os diferentes casos sejam executados. A sintaxe geral :
switch varivel
case valor1
1 bloco de comandos
case valor2
2 bloco de comandos
otherwise
ltimo bloco de comandos
end
Neste exemplo, o primeiro bloco de comandos executado se a varivel for
igual ao valor 1; o segundo bloco de comandos executado se a varivel for igual ao
valor 2. Caso a varivel no combine com nenhum dos casos o ltimo bloco de comandos
executado.
O switch pode ser usado como uma varivel numrica ou uma varivel string.
Vamos ver um exemplo mais concreto usando uma varivel string com o comando
switch.
switch cor
case vermelho
c = [1 0 0];
case verde
c = [0 1 0];
case azul
c = [0 0 1];
otherwise
error(escolha de cor invlida)
end
Break
O comando break dentro de um lao for ou while termina a execuo do lao,
at mesmo se a condio do lao for verdadeira.
44

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
Exemplos:
1.
for i = 1: length (v)
if u(i) < 0
break
end
a = v(i) + .........................
end

% verifica para u negativo


% termina a execuo do lao
% faz alguma coisa

2.
while 1
n = input(Entre com o n mximo de interaes )
if n <= 0
break
% termina execuo do lao
end
for i=1:n
.....
% faz alguma coisa
end
end
Caso haja um lao dentro de outro, o comando break finaliza somente o lao
mais interno.
Error
O comando error (mensagem) dentro de uma funo ou um script aborta a
execuo, mostra uma mensagem de erro e retorna o controle para o teclado.
Exemplo:
function c = crossprod (a,b);
% crossprod (a,b) calcula o produto vetorial axb.
if nargin~=2
% se no h 2 argumento de entrada
error (Desculpe, precisa da entrada de 2 vetores)
end
if length(a)==2
% inicia os clculos
......
end

Return
O comando return simplesmente retorna o controle da funo chamada.
Exemplo:
function animatebar(t0, tf, x0);
% animatebar anima um pndulo
:
disp(Voc deseja ver o retrato da fase?)
ans = input (Digite 1 para SIM, e 0 para NO); % descrio abaixo
if ans= = 0
% se o input 0
return
% sair da funo
else

45

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
plot(x,...)

% mostra a plotagem da fase

end

6.8. ENTRADA INTERATIVA


Os comandos input, keyboard, menu e pause podem ser usados dentro de
um script ou uma funo para entradas interativas feitas pelo usurio. Suas descries
esto logo abaixo:
Input
O comando input(Texto), usado no exemplo anterior, mostra na tela o texto
que est no lugar de Texto e espera o usurio a dar entrada pelo teclado.
Exemplo:
n = input(Maior tamanho da matriz quadrada); alerta o usurio a
entrar com o tamanho da maior matriz quadrada e salva a entrada em
n.

more = input(Mais simulaes? (S/N), s); alerta o usurio a digitar


S para SIM e N para NO e armazena a entrada como uma string em
more. Note que o segundo comando, s, do comando, direciona o
MATLAB a salvar a entrada como uma string.

Este comando pode ser usado para escrever programas interativos amigveis
no MATLAB.
Keyboard
O comando keyboard dentro de um script ou uma funo retorna o controle
para o teclado no exato ponto onde o comando ocorre. A execuo da funo ou o script
no esto terminados. O prompt da janela de comandos >>, muda para k>> para
mostrar o status especial. Neste ponto, se pode checar variveis j computadas, mudar
seus valores e editar qualquer comando MATLAB vlido. O controle retornado
funo digitando a palavra return no prompt especial k>> e pressionando enter.
Este comando til para funes que eliminam erros (debugging functions).
s vezes, em grandes algoritmos, se pode querer checar alguns resultados intermedirios,
plot-los e ver se a colocao dos dados no algoritmo est seguindo uma ordem
logicamente correta, e ento deixar que a execuo continue.
Exemplo:
% EXKEYBRD: um arquivo de script como exemplo de comando no
% teclado
% -----A = ones(10)

% monta uma matriz 10x10 de 1s

for i=1:10
46

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
disp(i)
A(:,i) = i*A(:,i);
if i= =5
keyboard
end

%
%
%
%

mostra o valor de I
remaneja a i-sima coluna de A
quando i = 5
retorna o controle do teclado

end
Durante a execuo do script acima (exekeybrd.m) o controle retornado ao
teclado quando o valor do contador i alcana 5. A execuo do procedimento recomea
aps o controle ser retornado ao arquivo script digitando return no prompt especial
k>>.
Menu
O comando menu(Nome do menu, opo 1,opo 2...) cria um menu na
tela com o Nome do menu e lista as opes no menu. O usurio pode selecionar
qualquer opo pelo mouse ou pelo teclado, dependendo do computador. A
implementao desse comando em MACs e PCs cria menus de janelas interessantes com
botes.
Exemplo:
% Plotando um crculo
r = input(Entre com o raio desejado: );
theta = linspace(0, 2*pi, 100);
r = r*ones(size(theta)); %faz r do mesmo tamanho de theta.
coord = menu(Plotagem de Crculo, Cartesian, Polar);
if coord == 1
% Se a primeira opo do menu for
% selecionada
plot(r.*cos(theta), r.*sin(theta))
axis(square)
else
% Se a segunda opo do menu for
% selecionada
polar(theta, r);
end
No exemplo acima, o comando menu cria um menu com o nome Plotagem de
Crculo e duas opes: Cartesiano e Polar. As opes so internamente numeradas.
Quando o usurio seleciona uma das opes, o nmero correspondente passado para a
varivel coord. O lao if-else no script mostra (atravs do comando menu) o que fazer
com cada opo.
Pause
Este comando temporariamente pra o processo em decorrncia. Pode ser
usado com ou sem um argumento opcional:

pause pra o processo em andamento e espera o usurio dar o sinal de v


frente. Pressionando qualquer tecla reinicia-se o processo.

em

47

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br

pause(n) Pra o processo em andamento, por n segundos, e ento recomea o


processo.

Exemplo: for i = 1:n, plot(X(:,i),Y(:,i)), pause(5), end pra por 5 segundos


antes de plotar o prximo grfico.
6.9. ENTRADA/SADA
O MATLAB suporta vrias funes I/O de arquivos de linguagem C padro
para leitura e escrita de binrios formatados e arquivos de texto. As funes suportadas
incluem:
Abre um arquivo existente ou cria um novo
Fopen
Fecha um arquivo aberto
Fclose
L dados binrios de um arquivo
Fread
Escreve dados binrios para um arquivo
Fwrite
L strings em formato especificado
Fscanf
Escreve dados em um string formatado
Fprintf
L uma linha de um arquivo excluindo NEW-LINE CHARACTER
Fgets
L uma linha de um arquivo incluindo NEW-LINE CHARACTER
Fgetl
rebobina um arquivo
Frewind
Escolhe o indicador de posio do arquivo
Fseek
D a indicao correta da posio do arquivo
Ftell
Investiga o status de erro do arquivo I/O
Ferror
J satisfatrio usar os seis primeiros comandos listados acima. Para a
maioria dos propsitos fopen, fprintf e fclose so suficientes.
Este um exemplo simples que usa fopen, fprint e fclose para criar e
escrever dados formatados para um arquivo:
% TEMTABLE gera e escreve a tabela de temperatura
% Arquivo script para gerar uma tabela de temperatura.
% A tabela est em um arquivo chamado Temperature.table.
%--------------------------------------------------------F = -40:5:100;
C = (F - 32)*5/9;
t = [F; C];
fid = fopen(Temperature.table, w);
fprintf(fid, Temperature.table\n );
fprintf(fid,~~~~~~~~~~~~~~\n);
fprintf(fid, Fahrenheit Celsius\n);
fprintf(fid, %4i
%8.2f\n, t);
fclose(fid);
No arquivo de script acima, o primeiro comando I/O, fopen, abre um arquivo
temperature.table no modo de escrita (write) especificado por um w no comando e
designa o identificador de arquivo para fid. Os seguintes fprintf usam fid para escrever
as strings e os dados no arquivo em questo. Os dados so formatados de acordo com as
48

Grupo PET Engenharia Eltrica UFMS - Campo Grande MS Maio 2004 (2. Ed)
Joseph Harari Instituto Oceanogrfico da Universidade de So Paulo joharari&usp.br
especificaes no argumento-string de fprintf. No comando acima, \n insere uma nova
linha, %4i insere um campo ntegro de largura 4, e %8.2f insere um ponto fixo de largura
8 e 2 casas decimais aps a vrgula. O arquivo de sada, Temperature.table, mostrado
abaixo. Note que a matriz de dados t tem duas filas, no qual o arquivo de sada escreve a
matriz em 2 colunas. Isto porque t lida columnwise (coluna sbia) e ento escrito no
formato especificado (2 linhas em cada coluna).
Temperature Table
~~~~~~~~~~~~~~
Fahrenheit
Celsius
-40
-40.00
-35
-37.22
-30
-34.44
-25
-31.67
-20
-28.89
-15
-26.11
-10
-23.33
-5
-20.56
0
-17.78
5
-15.00
10
-12.22
15
-9.44
20
-6.67
25
-3.89
30
-1.11
35
1.67
40
4.44
45
7.22
50
10.00
55
12.78
60
15.56
65
18.33
70
21.11
75
23.89
80
26.67
85
29.44
90
32.22
95
35.00
100
37.78

49