Você está na página 1de 101

Curso

MATLAB BSICO
Comandos

Escola de Qumica/UFRJ
Novembro/2001

NDICE

1. INTRODUO
1.1. Objetivo do texto
1.2. Conceito do software MATLAB
1.3. Notao utilizada

2. AMBIENTE DE TRABALHO
2.1. Janela de comandos
2.2. Acesso aos recursos de ajuda

3. NMEROS, EXPRESSES ARITMTICAS E FUNES


3.1. Apresentao de nmeros
3.2. Expresses aritmticas
3.3. Operaes com nmeros complexos
3.4. Funes

4. VARIVEIS
4.1. Atribuio de variveis
4.2. Entrada e sada de valores para as variveis
4.3. Gerenciamento das variveis

5. PROCESSAMENTO MATRICIAL
5.1. Criao de matrizes e vetores
5.2. Operaes matriciais
5.2.1. Operadores de lgebra linear

5.2.2. Operadores elemento a elemento


5.3. Matrizes especiais
5.4. Manipulao de matrizes
5.4.1. Identificao de dimenses
5.4.2. Gerao de vetores e matrizes
5.4.3. Extrao de elementos
5.4.4. Alterao de matrizes e vetores
5.4.5. Composio de matrizes e vetores
5.4.6. Pesquisando matrizes e vetores
5.5. Matrizes de dimenso superior
5.6. Matrizes de caracteres

6. MATRIZES CELULARES E ESTRUTURAS


6.1. Conceito
6.2. Matrizes celulares
6.2.1. Criao de matrizes celulares
6.2.2. Extrao envolvendo matrizes celulares
6.2.3. Alterao de clulas
6.2.4. Composio de matrizes celulares
6.3. Estruturas
6.3.1. Criao de estruturas
6.3.2. Extrao envolvendo estruturas
6.3.3. Alterao de campos

7. GRFICOS
7.1. Grficos 2-D

7.1.1. Traando grficos


7.1.2. Manipulando grficos
7.1.3. Gerenciando janelas grficas
7.2. Grficos 2-D especiais
7.2.1. Histogramas
7.2.2. Grficos de barra
7.2.3. Grficos tipo torta
7.2.4. Grficos com barras de erro
7.3. Grficos 3-D
7.3.1. Traando grficos de curvas
7.3.2. Traando grficos de superfcies
7.3.3. Traando grficos de curvas de nvel

8. INTRODUO LINGUAGEM MATLAB


8.1. Arquivos de comando
8.2. Comandos de fluxo
8.2.1. Comandos condicionais
8.2.2. Comandos de repetio
8.3. Arquivos de funo
8.3.1. Variveis locais e globais

1. INTRODUO

1.1. Objetivo do texto


Este texto busca apresentar os fundamentos do desenvolvimento de
rotinas de programao atravs do software MATLAB. Aps a leitura desta
apostila, o usurio dever ser capaz de escrever seus prprios programas em
linguagem MATLAB, envolvendo noes bsicas de processamento numrico,
armazenamento de dados, apresentao de grficos, etc. Os conceitos
envolvidos so acompanhados de grande nmero de exemplos, visando facilitar a
compreenso das informaes apresentadas. O curso pode ser acompanhado
utilizando-se diretamente o MATLAB, uma vez que a interface grfica com o
usurio bastante amigvel, com o aluno reproduzindo os exemplos da apostila,
ou at mesmo, criando os seus prprios exemplos.
Sempre que possvel, ao longo da apostila, sero apresentadas
comparaes entre as estruturas computacionais em MATLAB e as estruturas
computacionais das linguagens de programao convencionais, estabelecendose semelhanas e diferenas.
Ao longo de cada seo da apostila, sero fornecidas no texto instrues
de como o leitor pode obter maiores informaes sobre o tpico abordado atravs
das pginas de ajuda do MATLAB.

1.2. Conceito do software MATLAB


Com o desenvolvimento da indstria de informtica, mquinas cada vez
mais poderosas passaram a estar disponveis a um custo cada vez menor. Este
fenmeno alterou de forma marcante os rumos das cincias da engenharia,
permitindo amplo acesso preciso e velocidade no processamento de
informaes.
Entre as ferramentas modernas para a resoluo de problemas de
engenharia destaca-se o software MATLAB (MAtrix
empresa

The

Mathworks.

Este

ambiente

LABoratory),

de

desenvolvido pela

programao

permite

desenvolvimento de rotinas computacionais semelhantes s linguagens de

programao de alto nvel usuais (FORTRAN, PASCAL, etc.), mas dispondo de


vrios diferenciais fundamentais: poderosos recursos de processamento matricial
(lgebra matricial), disponibilidade de grande nmero de alternativas para a
apresentao grfica de resultados (curvas no plano e no espao, superfcies,
curvas de nvel, histogramas, grficos de barras, etc.), presena de vrios
algoritmos de mtodos numricos j embutidos (soluo de sistemas lineares,
determinao de razes de um polinmio, interpolao, etc.) e existncia de vrias
bibliotecas computacionais especializadas que podem ser adquiridas em conjunto
com o MATLAB, denominadas toolboxes (otimizao, identificao de sistemas,
matemtica

financeira,

etc.).

Apesar

da

sua

grande

versatilidade,

desenvolvimento de programas atravs do MATLAB uma tarefa relativamente


simples, graas a uma sintaxe mais enxuta, evitando, por exemplo, a
necessidade de declarao de variveis, alocao de memria, etc.

1.3. Notao utilizada


Durante o texto, os comandos do MATLAB ou as informaes relativas
entrada e sada de dados diretamente na tela sero representados atravs de
uma fonte de texto diferenciada.
As alternativas de opes na barra de menu sero apresentadas em itlico,
sendo as subopes precedidas por >.

 Exemplo 1.1:
O comando clc apaga a tela da janela de comando

 Exemplo 1.2:
>> sin(pi/2)
ans =
1

 Exemplo 1.3:
Pode-se fechar o MATLAB atravs da barra de menu: File > Exit MATLAB.

2. AMBIENTE DE TRABALHO

Quando o MATLAB acionado, surge na tela do computador o MATLAB


desktop, formado por vrios componentes grficos que permitem ao usurio
gerenciar rotinas computacionais, variveis ou arquivos desenvolvidos no
ambiente MATLAB.
Nesta tela esto situados os componentes convencionais de todo aplicativo
for Windows: barra de ttulo, barra de menu e barra de ferramentas. Na primeira
vez que o MATLAB acionado a rea principal de trabalho dominada por trs
janelas: Command Window, Launch Pad e Command History. Estas janelas
podem ser aumentadas, diminudas, reorganizadas ou fechadas de acordo com
as necessidades do usurio.
A janela de comandos, Command Window, a principal interface
utilizada para o usurio acionar os comandos ou rotinas desenvolvidas em
MATLAB. Nesta janela so apresentadas as mensagens de erros, constituindo-se
tambm o dispositivo padro para a sada dos resultados gerados. A janela
Command History contm um histrico dos comandos digitados at o presente
momento. A janela Launch Pad possui atalhos de acesso para demos, arquivos
de ajuda, outras ferramentas, etc.
Adicionalmente, o usurio tambm pode abrir, atravs da alternativa View
na barra de menus, a janela Workspace, que fornece um quadro geral de todas
as variveis presentes na memria do MATLAB, e a janela Current Directory, que
indica os arquivos existentes no diretrio de trabalho.

 Observao: Pode ser que um usurio anterior tenha alterado a disposio das
janelas e alguns dos elementos citados aqui no estejam presentes na sua tela.
No entanto, caso seja necessrio, todos os componentes apresentados podem
ser visualizados atravs da alternativa View na barra de menu.

2.1. Janela de comandos

Todas as operaes desenvolvidas ao longo deste curso sero


concentradas na janela de comandos, desta forma, caso o usurio deseje, pode
fechar todas as demais janelas para facilitar a visualizao dos resultados.
Aps acionar o MATLAB, estar presente na janela de comandos, o smbolo
>>

e ao lado o cursor piscando. A linha onde aparece o smbolo apresentado

corresponde linha de comandos, onde o usurio digita as instrues para o


MATLAB executar as tarefas desejadas.
Aps a digitao de cada instruo na linha de comando, o usurio deve
teclar Enter e o computador executar a tarefa.

 Exemplo 2.1:
Para calcular a raiz quadrada de 2 devemos digitar na linha de comando:
>> sqrt(2)

apertar Enter, e, ento, aparecer na tela:


ans =
1.414

possvel tambm executar vrios comandos em seqncia na mesma


linha, desde que estejam separados por vrgula ou ponto-e-vrgula.

 Exemplo 2.2:
>> log10(100) , sqrt(144)
ans =
2
ans =
12

Caso seja necessrio, uma instruo no Matlab pode ser separada em


vrias linhas, utilizando-se a reticncias, conforme ilustra o prximo exemplo:

 Exemplo 2.3:
>> log10(100) ...
, sqrt(144)
ans =
2
ans =
12

 Observao: Um recurso muito til na utilizao da linha de comandos consiste


em apertar as teclas [

] e [

]. Estas teclas permitem que os ltimos

comandos digitados retornem tela, podendo ser acionados novamente, ou


ento, alterados, movendo-se o cursor com as teclas [ ] e [ ], e novamente
acionados, de acordo com a necessidade.

2.2. Acesso aos recursos de ajuda


Assim como os demais aplicativos do ambiente Windows, possvel
acionar os recursos de ajuda atravs da barra de menu, na opo Help >
MATLAB Help.
Quando esta alternativa selecionada, surge uma janela, com vrias
ferramentas de ajuda no lado esquerdo (Contents, Index, Search e Favorites) e
um quadro para apresentao de informaes no lado direito. Atravs das
ferramentas de ajuda possvel: navegar atravs dos vrios tpicos de ajuda
disponvel (Contents), percorrer e pesquisar uma lista em ordem alfabtica com a
descrio de todos os comandos disponveis (Index), pesquisar por palavraschaves (Search) e acionar a documentao disponvel pela Mathworks na Internet
e criar uma lista pessoal de tpicos de ajuda (Favorites).
Uma outra forma mais rpida e direta para se conseguir a descrio de um
comando ou funo atravs do MATLAB, consiste em digitar na linha de comando:
help comando

onde comando se refere a dvida a ser esclarecida.

 Exemplo 2.4:
>> help det
DET

Determinant.

DET(X) is the determinant of the square matrix X.


Use COND instead of DET to test for matrix singularity.
See also COND.

Uma busca por palavras-chaves tambm pode ser feita diretamente da


linha de comando, digitando-se:
lookfor palavra

onde palavra o termo a ser pesquisado.

 Exemplo 2.5:
>> lookfor integration
CUMTRAPZ Cumulative trapezoidal numerical integration.
TRAPZ

Trapezoidal numerical integration.

LOTKADEMO Demonstrate numerical integration of differential equations.


ADAMS Simulink 1.x ADAMS integration algorithm.
EULER Simulink 1.x EULER integration algorithm.
GEAR Simulink 1.x GEAR integration algorithm.
LINSIM Simulink 1.x LINSIM integration algorithm.
RK23 Simulink 1.x rk23 integration algorithm.
RK45 Simulink 1.x RK45 integration algorithm.
SFUNMEM A one integration-step memory block S-function.

3. NMEROS, EXPRESSES ARITMTICAS E FUNES

3.1. Apresentao de nmeros


A opo default do MATLAB na apresentao de resultados numricos
representa os nmeros reais com quatro casas decimais aps a vrgula (caso o
nmero seja inteiro, as casa decimais no so apresentadas). Caso os algoritmos
significativos de um nmero estejam fora desta faixa, este ser apresentado em
notao cientfica. Os exemplos abaixo ilustram a forma de apresentao
numrica do MATLAB, onde a varivel pr-definida pi corresponde ao nmero .

 Exemplo 3.1:
>> pi
ans =
3.1416
>> pi/pi
ans=
1
>> pi/10000
ans=
3.1416e-004

O MATLAB possui tambm vrios formatos alternativos diferentes para a


apresentao de valores numricos na linha de comando. Na tabela seguinte
estes resultados so apresentados, ilustrando-se como a expresso 10 aparece
na tela de acordo com o formato escolhido.

Formatos numricos
Formato

Expresso 10*pi

format
format short
format long
format short e

31.4159
31.4159
31.41592653589793
3.1416e+001

Descrio
default, igual a format short
4 casas aps a vrgula
14 casas aps a vrgula
notao cientfica com 4 casas

format long e
format short g
format long g
format hex
format bank
Format +
format rat

3.141592653589793e+001
31.146
31.4159265358979
403f6a7a2955385e
31.42
+
3550/113

notao cientfica com 14 casas


5 casas decimais no total
15 casas decimais no total
hexadecimal
2 casas decimais aps a vrgula
+ , - ou 0
aproximao racional

Para alterar o formato utilizado, deve-se acionar as seguintes opes na


barra de menu: > File > Preferences. Uma outra alternativa digitar o comando
format

na prpria linha de comando, como ilustra o prximo exemplo.

 Exemplo 3.2:
No formato default
>> pi
ans =
3.1416

Alternado-se o formato, ento:


>> format long
>> pi
ans =
3.14159265358979

 Observao: Independente do formato utilizado para apresentao dos


resultados, as operaes numricas so efetuadas com a maior preciso possvel
(aritmtica de preciso dupla).

3.2. Expresses aritmticas


Atravs da linha de comando do MATLAB, possvel realizar as operaes
aritmticas elementares, de forma semelhante a uma calculadora comercial:

Operadores matemticos

Operao
Soma
Subtrao
Multiplicao
Diviso
Potenciao

Smbolo
+
*
/
^

 Exemplo 3.3:
Para calcular a soma das parcelas 203 + 416 + 256, deve-se digitar na
linha de comando:
>> 203+416+256

Gerando-se como resultado:


ans =
875

 Exemplo 3.4:
A determinao de 2 elevado a 10 dividido por 5, pode ser calculada por:
>> 2^10/5

Resultando em:
ans =
204.8

 Observao: O separador decimal no MATLAB necessariamente o ponto, no


sendo possvel alterar esta configurao atravs do Windows, como em alguns
aplicativos neste ambiente (por exemplo, Excel).

 Observao: Espaos entre os operadores e os termos de uma expresso


aritmtica so ignorados. Ou seja,
>> 203/430+50*60

equivalente a >> 230 / 130 + 50 * 60

 Observao: Como pde ser observado nos exemplos anteriores, as


operaes realizadas na linha de comando so automaticamente armazenadas
em uma varivel default ans.

Os clculos aritmticos no MATLAB so realizados de acordo com a ordem


normalmente utilizada nas demais linguagens de programao:
Ordenao:
1) Operaes dentro dos parnteses (interno  externo);
2) Potenciao;
3) Multiplicao e diviso;
4) Soma e subtrao.

 Observao: Operadores de mesma hierarquia so efetuados da esquerda


para a direita.

 Exemplo 3.5:
Determinar o valor da expresso:

(9,8 0,8)
( 4 50)

( 245/154 )

>> ((9.8 - 0.8)/-(4-50))^(245/154)


ans =
0.0746

 Observao: Para construir as operaes aritmticas devem ser utilizados


apenas parnteses. No MATLAB, os colchetes servem fundamentalmente para o
clculo matricial como ser visto posteriormente.

3.3. Operaes com nmeros complexos

Uma das caractersticas que diferenciam o MATLAB a facilidade para


operar nmeros complexos. No MATLAB, as variveis i e j podem ser utilizadas
para representar o nmero imaginrio.

 Exemplo 3.6:
>> sqrt(-1)
ans =
0 + 1.0000i

 Exemplo 3.7:
Somar 2 + 3i com 5 7i
>> (2+3*i)+(-5-7*i)
ans =
-3 - 4.0000i

 Exemplo 3.8:
Multiplicar 7i por 3 + 7i
>> 7*i*(-3-7*i)
ans =
-49 - 21.0000i

 Observao: Cada vez que o MATLAB iniciado, as variveis i e j assumem


como valor default o nmero imaginrio. No entanto, caso o usurio deseje,
estas variveis podem ser utilizadas para a atribuio de qualquer outro valor
(i.e., no so variveis protegidas).

3.4. Funes
O MATLAB possui um grande nmero de funes matemticas prdefinidas. Sua utilizao imediata, como mostram os exemplos abaixo:

 Exemplo 3.9:

Calcular a raiz quadrada de 3:


>> sqrt(3)
ans =
1.7321

 Exemplo 3.10:
Calcular o seno de 3 / 2 :
>> sin(3*pi/2)
ans =
-1

 Observao: Lembre-se que a varivel pi uma varivel j pr-definida no


MATLAB com o valor de .

 Observao: As funes trigonomtricas no MATLAB devem receber


argumentos em radianos.

Nas tabelas a seguir, so apresentadas algumas das funes disponveis


para serem utilizadas na programao em MATLAB:

Funes trigonomtricas
Funo
sin(x)
cos(x)
tan(x)
asin(x)
acos(x)
atan(x)
sinh(x)
cosh(x)
tanh(x)
asinh(x)
acosh(x)
atanh(x)

Descrio
Seno
co-seno
Tangente
arco-seno
arco-co-seno
arco-tangente
seno hiperblico
co-seno hiperblico
tangente hiperblica
arco-seno hiperblico
arco-co-seno hiperblico
arco-tangente hiperblico

Funes exponenciais e logartmicas


Funo
exp(x)
log(x)
log10(x)
log2(x)
sqrt(x)

Descrio
exponencial
logaritmo neperiano
logaritmo de base 10
logarimto de base 2
raiz quadrada

Funes complexas
Funo
abs(x)
angle(x)
conj(x)
real(x)
imag(x)

Descrio
valor absoluto
angulo de fase em radianos
conjugado complexo
parte real
parte imaginria

Funes de truncamento
Funo

Descrio
arredondamento na direo do 0
arredondamento na direo de
arredondamento na direo de +
arredondamento na direo do inteiro mais prximo
resto da diviso de x por y
sinal de x (-1, 1 ou 0)

fix(x)
floor(x)
feil(x)
round(x)
rem(x,y)
sign(x)

Funes relativas teoria dos nmeros


Funo
factor(x)
isprime(x)
primes(x)
gcd(x,y)
lcm(x,y)

Descrio
decomposio em fatores primos
verificao de nmero primo (= 1, se primo)
lista de nmeros primos menores que x
MDC entre x e y
MMC entre x e y

Funes matemticas especiais


Funo
besselj(x,y)
bessely(x,y)
besselh(x,y)
besseli(x,y)
besselk(x,y)

Descrio
funo de Bessel do primeiro tipo
funo de Bessel do segundo tipo
funo de Bessel do terceiro tipo
funo modificada de Bessel do primeiro tipo
funo modificada de Bessel do segundo tipo

beta(x,y)
erf(x)
erfc(x)
Gamma(x)

funo Beta
funo erro
funo erro complementar
funo gama

 Observao: Uma lista ampliada das funes disponveis em MATLAB pode


ser encontrada atravs dos comandos de ajuda help elfun e help specfun.

 Observao: Em uma expresso aritmtica, as funes so calculadas em


primeiro lugar.

4. VARIVEIS

4.1. Atribuio de variveis


A sintaxe para estabelecer um certo valor para uma varivel, atravs do
comando de atribuio = :
varivel = expresso

onde a o termo expresso acima corresponde a nmeros, variveis, expresses


aritmticas, etc.
O nome de uma varivel no MATLAB pode ser representado por qualquer
seqncia de letras e nmeros, comeando por uma letra (at 31 caracteres so
reconhecidos), o smbolo _ tambm permitido no nome, mas os smbolos de
pontuao ou acentos grficos no ( ~ ` ; , . ). O MATLAB diferencia letras
maisculas e minsculas, isto , A e a so variveis diferentes.

 Exemplo 4.1:
>> A1=3
A1 =
3
>> Bt=3^3
Bt =
27
>> expr=log(A1)/Bt
expr =
0.0407

 Observao: Os comandos do MATLAB devem ser necessariamente escritos


em letras minsculas.

Sempre que um comando de atribuio executado, o MATLAB apresenta


na tela o resultado desta atribuio. No entanto, caso no seja necessrio que a

atribuio aparea na tela, como, por exemplo, em clculos intermedirios ao


longo de um programa, basta apenas que seja colocado o smbolo ; ao final do
comando.

 Exemplo 4.2:
Ao digitarmos na linha de comando:
>> Logaritmo=log(10)

Aparecer na tela logo em seguida:


Logaritmo =
2.3026

Mas se digitarmos:
>> exponencial=exp(1);

A atribuio realizada, mas nada aparece na tela.

 Observao: Os valores das variveis geradas no MATLAB ficam armazenadas


no que se convencionou denominar MATLAB workspace.

 Observao: Quando o valor de uma varivel alterado, os valores das


demais variveis que foram definidas anteriormente a partir desta varivel original
no so recalculados (ao contrrio dos aplicativos baseados em planilhas de
clculo). A atribuio de uma varivel a partir de outras variveis leva em conta o
valor das variveis apenas no momento da atribuio.

4.2. Entrada e sada de valores para as variveis


Alm dos comandos de atribuio, a entrada de dados para as variveis de
um certo problema pode ser tambm realizada atravs do comando input:
varivel=input('mensagem');

Quando o computador recebe este comando, a mensagem exibida na tela,


espera-se o usurio digitar um dado de entrada, e, depois, o valor digitado
armazenado em varivel. Se o usurio digitar uma expresso aritmtica, esta

ser calculada e o resultado tambm ser armazenado em varivel. Este


comando til para preparar uma subrotina de entrada de dados que permita que
cada vez que o programa seja acionado, o usurio possa alimentar os valores
desejados para as variveis, sem precisar alterar nenhum comando. Um exemplo
da utilizao do comando input est no exemplo a seguir:

 Exemplo 4.3:
>> TK=input('Digite o valor da temperatura em K');
>> TC=TK-273.15

Para indicar o valor de uma varivel na tela, basta apenas digitar o nome
da varivel, e depois teclar enter. Outra opo utilizar o comando disp:
disp(varivel)

Este comando tambm apresentar na tela, o valor contido em varivel. A


diferena entre estas duas formas de apresentao de resultados pode ser
ilustrada atravs do prximo exemplo:

 Exemplo 4.4:
>> P=30
P =
30
>> disp(P)
30

O comando disp tambm pode ser utilizado para a apresentao de


mensagens na tela do computador:
disp('mensagem')

Observe que a mensagem est redigida entre os smbolos: ''.


 Exemplo 4.5:
>> P=30;
>> disp('O valor da presso (bar) : ') , disp(P)

O valor da presso (bar) :


30

4.3. Gerenciamento das variveis


Atravs do comando who possvel apresentar na tela a lista de todas as
variveis armazenadas no workspace em um certo instante.

 Exemplo 4.6:
>> P=1.0133e5;
>> T=273.15;
>> R=8314;
>> V=R*T/P
V =
22.4116
>> who
Your variables are:
P

Um outro comando semelhante o comando whos que apresenta a lista


das variveis, suas dimenses e classes.

 Exemplo 4.7:
>> P=1.0133e5;
>> T=273.15;
>> R=8314;
>> V=R*T/P
V =
22.4116
>> whos
Name

Size

Bytes

Class

1x1

double array

1x1

double array

1x1

double array

1x1

double array

Grand total is 4 elements using 32 bytes

O comando clear permite que uma ou mais variveis sejam apagadas da


memria do MATLAB:
clear lista_de_variveis

onde lista_de_variveis corresponde s variveis que devem ser apagadas.


possvel tambm apagar todas as variveis do workspace em conjunto:
clear all

 Exemplo 4.8:
>> P=1.0133e5;
>> T=273.15;
>> R=8314;
>> V=R*T/P
V =
22.4116
>> who
Your variables are:
P

>> clear P R
>> who
Your variables are:
T

Observe que P e R sumiram da lista de variveis presentes.


>> clear all
>> who

Agora nenhuma varivel aparece, pois foram todas apagadas.

 Observao: No desenvolvimento de um cdigo computacional, muitas vezes


torna-se recomendvel aplicar o comando clear all no incio da rotina para
garantir que qualquer resultado proveniente de um processamento anterior seja
eliminado da memria, preparando assim o MATLAB para receber a tarefa
desejada ( claro que se o clear all for inadvertidamente aplicado no meio da
rotina computacional desenvolvida, isto inviabilizar o correto processamento do
programa).

5. PROCESSAMENTO MATRICIAL

capacidade

de

processamento

matricial

uma

caracterstica

fundamental do MATLAB, permitindo definir, operar e manipular matrizes e vetores


com facilidade.

5.1. Criao de matrizes e vetores


A entrada de uma varivel na forma de uma matriz no MATLAB pode ser
realizada

de

maneira

semelhante

que

as

linguagens

de

programao

convencionais, como est ilustrado no exemplo abaixo (vamos considerar que um


vetor um caso particular de uma matriz):

 Exemplo 5.1:
1 2
Efetuar a seguinte atribuio: A =

1 5
>> A(1,1)=1; , A(1,2)=2; , A(2,1)=-1; , A(2,2)=5;
>> A
A =
1

-1

Neste caso, cada elemento da matriz identificado de acordo com o seu par de
ndices.
No entanto, o MATLAB possui uma forma particular mais direta e
simplificada para a entrada de matrizes:

 Exemplo 5.2:
1 2
Efetuar a seguinte atribuio: A =

1 5

>> A=[ 1

2 ; -1

5 ];

>> A
A =
1

-1

Como pde ser observado no exemplo, os colchetes indicam a existncia de uma


matriz, os elementos ao longo de uma linha so separados por espaos
(poderiam ser vrgulas) e a passagem para uma prxima linha indicada por
ponto-e-vrgula (poderia ser Enter).
Observe no prximo exemplo, a utilizao desta forma de sintaxe para a
entrada de dois vetores:

 Exemplo 5.3:
2
Efetuar as atribuio ao lado: c = e d = [ 2
0
>> c=[ 2

3 ]

; 0 ]

c =
2
0
>> d=[ pi , pi^2 , pi^3 ]
d =
3.1416

9.8696

31.0063

5.2. Operaes matriciais

5.2.1. Operadores de lgebra linear


possvel realizar operaes matriciais utilizando o MATLAB com a mesma
facilidade com que as linguagens tradicionais operam escalares. Os operadores
disponveis para os clculos envolvendo matrizes so aqueles tradicionalmente
utilizados na lgebra linear.

Sejam duas matrizes A e B que so empregadas para gerar uma matriz C.


A tabela a seguir exemplifica a utilizao dos operadores matriciais:

Operadores matriciais
Operao

Sintaxe

Descrio

Soma

C = A + B

Cij = Aij + Bij

Subtrao

C = A - B

Cij = Aij Bij

Multiplicao

C = A * B

Cij = Ail Blj

Transposio

C = A

Cij = A ji

 Exemplo 5.4:
Sejam as seguintes matrizes e vetores:
1 4
A=
,
0 5

2 2
B=
,
3 1

2
c=
3

2

d= 3
4

Efetuar as seguintes operaes:


a) A B

b) A + B

c) A B c

d) d T

e) c d

Inicialmente, vamos aplicar todas as atribuies:


>> A=[ 1 , 4 ; 0 , 5 ];
>> B=[ 2 -2
3 -1 ];
>> c=[ 2 ; 3 ];
>> d=[ 2 ; 3 ; -4 ];

Observe que as duas formas de atribuio utilizadas para as matrizes A e


B so equivalentes e igualmente vlidas.
Podemos agora realizar as operaes desejadas:
>> A*B
ans =
14

-6

15

-5

>> A+2*B
ans =
3

>> A*B*c
ans =
10
15
>> c+d
??? Error using ==> +
Matrix dimensions must agree.

Note no ltimo exemplo que o MATLAB forneceu uma mensagem de erro,


pois as dimenses dos vetores c e d no so compatveis.

 Observao: As operaes de soma, subtrao, multiplicao e diviso entre


uma matriz e um escalar correspondem operao do escalar em todos os
elementos da matriz.

 Exemplo 5.5:
>> 2 + [

-5

ans =
3

-3

O MATLAB possui tambm vrias funes embutidas para o processamento


matricial. Na tabela abaixo, so apresentadas algumas destas funes:

Funes para processamento matricial


Funo

Descrio

inv(X)

inverso de matrizes

det(X)

clculo do determinante

eig(X)

determinao dos autovalores

rank(X)

clculo do posto da matriz

 Exemplo 5.6:
1 2
Seja a seguinte matriz quadrada: A =

3 4

Determinar a inversa, o determinante, os autovalores, o trao e o posto da


matriz.
Inicialmente, entramos com a matriz A:
>> A=[ 1

2 ; 3

4 ]

A =
1

A inversa da matriz calculada por


>> inv(A)
ans =
-2.0000

1.0000

1.5000

-0.5000

Observe que, de acordo com a definio de inversa:


>> A*inv(A)
ans =
1.0000

0.0000

1.0000

O determinante da matriz pode ser calculado por


>> det(A)
ans =
-2

Atravs da frmula de clculo do determinante de matrizes 2x2 podemos


verificar o resultado obtido:

>> A(1,1)*A(2,2)-A(2,1)*A(1,2)
ans =
-2

Os autovalores da matriz so:


aval=eig(A)
aval =
-0.3723
5.3723

Novamente, interessante verificar o resultado obtido atravs da definio:


det(A-aval(1)*[ 1 0 ; 0 1 ])
ans =
0
det(A-aval(2)*[ 1 0 ; 0 1 ])
ans =
0

Finalmente, o posto da matriz pode ser calculado por:


rank(A)
ans =
2

Tal como era esperado pois o determinante no nulo.

 Observao: Uma lista ampliada das funes para processamento matricial


disponveis em MATLAB pode ser encontrada atravs do comando help matfun.

5.2.2. Operadores elemento a elemento


O MATLAB possui um conjunto de operadores especiais muito teis para o
processamento de grandes volumes de dados. Estes operadores correspondem
s operaes elemento a elemento, representadas na prxima tabela, onde A e B
so duas matrizes de mesma dimenso:

Operaes elemento a elemento

Operao

Sintaxe

Descrio

Soma

C = A + B

Cij = Aij + Bij

Subtrao

C = A - B

Cij = Aij Bij

Multiplicao

C = A .* B

Cij = Aij Bij

Potenciao

C = A .^ B

Cij = Aij Bij

 Exemplo 5.7:
Sejam as seguintes matrizes e vetores:
2 2
B=
,
3 1

1 4
A=
,
0 5

2
c=
3

2

d= 3
4

Calcular as seguintes operaes elemento a elemento:


A.*A, A./B, 2.^c e d.^10:

Inicialmente, vamos aplicar todas as atribuies:


>> A=[ 1

4 ;

>> B=[ 2

-2 ; 3

5 ];
-1 ];

>> c=[ 2 ; 3 ];
>> d=[ 2 ; 3 ; -4 ];

Podemos agora apresentar vrios exemplos de aplicao das operaes


elemento a elemento:
>> A.*A
ans =
1

16

25

>> A./B
ans =
0.5000

-2.0000

-5.0000

>>2.^c

ans =
4
8
>>d.^10
ans =
1024
59049
1048576

Caso uma funo matemtica convencional seja aplicada a uma matriz,


esta ser processada de acordo com o conceito elemento a elemento.

 Exemplo 5.8:
>> a=[ 1 2 3 4 ];
>> sqrt(a)
ans =
1.0000

1.4142

1.7321

2.0000

 Observao: Para gerar resultados equivalentes s diversas rotinas de


processamento

matricial

apresentadas,

atravs

de

uma

linguagem

de

programao convencional, seria preciso preparar uma biblioteca de rotinas


especfica para estas operaes, incluindo laos envolvendo um ou mais
comandos de repetio encadeadas. Esta anlise demonstra a grande
simplificao

permitida

pelo MATLAB no desenvolvimento de programas

envolvendo o processamento de grande quantidade de dados organizados em


matrizes e vetores.

5.3. Matrizes especiais


O MATLAB possui um conjunto de comandos que permitem gerar uma srie
de matrizes especiais que podem ser teis no desenvolvimento de rotinas de
programao.

O comando ones(I,J) gera uma matriz de dimenso IxJ contendo 1 em


todas as posies. Alternativamente, o comando ones(I) gera uma matriz
quadrada de dimenso(I,I).

 Exemplo 5.9:
>> ones(2,3) , ones(2)
ans =
1

ans =

O comando zeros nas formas zeros(I,J) e zeros(I) atuam de forma


similar, mas geram matrizes de zeros.

 Exemplo 5.10:
>> zeros(3) , zeros(1,10)
ans =
0

ans =
0

O comando eye gera matrizes identidade de acordo com as dimenses


especificadas em eye(I,J) ou eye(I).

 Exemplo 5.11:
>> eye(2) , eye(2,3)
ans =

ans =

Para gerar uma matriz contendo elementos selecionados de forma


randmica (entre 0 e 1), utiliza-se o comando rand, nas formas rand(I,J) e
rand(I).

O comando randn equivalente a rand, mas gera nmeros aleatrios

com distribuio normal padronizada (mdia zero e varincia unitria).

 Exemplo 5.12:
>> rand(1,10) , randn(1,10)
ans =
0.6154

0.7919

0.9218

0.7382

0.1763

ans =
-0.1867

0.7258

-0.5883

2.1832

-0.1364

Seja x um vetor qualquer, diag(x) gera uma matriz com os elementos do


vetor x na diagonal principal.

 Exemplo 5.13:
>> diag([1,2,3])
ans =
1

 Observao: A descrio de todas as matrizes especiais disponveis no


MATLAB pode ser encontrada atravs do comando help elmat.

5.4. Manipulao de matrizes


Atravs de recursos de sintaxe especiais disponveis no MATLAB, possvel
manipular matrizes e vetores de vrias formas facilitando a sua utilizao nas
rotinas de programao.

5.4.1. Identificao de dimenses


As dimenses de uma matriz podem ser determinadas atravs do
comando:
size(A)

onde gerado um vetor cuja a primeira componente o nmero de linhas e a


segunda o nmero de colunas de A. Este comando tambm pode aparecer nas
formas:
size(A,1)

ou

size(A,2)

A primeira indica apenas o nmero de linhas e a segunda indica apenas o


nmero de colunas da matriz.
O seguinte comando indica o nmero de componentes de um vetor (no
importando se um vetor linha ou coluna):
length(x)

 Exemplo 5.14:
>> M = [ 1 2 ; 3 4 ; 4 0 ] , v = [ 2 3 1 4 0 0 ]
M =
1

v =
1

>> size(M) , size(M,1) , size(M,2)


ans =
3
ans =

3
ans =
2
>> length(v)
ans =
6

5.4.2. Gerao de vetores e matrizes


A construo de certos vetores, cujos elementos obedecem a um padro
crescente, pode ser realizada de forma rpida, utilizando-se uma sintaxe da
forma:
vetor = lim_1 : lim_2;

Este comando gera um vetor linha cujos elementos formam uma seqncia de
nmeros inteiros entre lim_1 e lim_2.

 Exemplo 5.15:
>> v = 2:10
v =
2

10

Uma variao desta sintaxe permite que os elementos estejam distribudos


ao longo da seqncia de acordo com um incremento no unitrio:
vetor = lim_1 : inc : lim_2;

Neste caso, o vetor linha formado possui um conjunto de elementos organizados


na forma de uma seqncia que comea em lim_1 e se estende at lim_2
atravs de um incremento inc.

 Exemplo 5.16:
>> v1 = 2:2:10 , v2 = 4:-0.5:3
v1 =
2

10

v2 =
4.0000

3.5000

3.0000

Atravs da utilizao deste recurso tambm possvel montar matrizes:

 Exemplo 5.17:
>> M = [ 1:4 ; 4:-1:1 ]
M =
1

Uma outra forma de criar vetores com padro crescente, envolve a


utilizao do comando:
linspace(lim1,lim2,N)

Este comando gera um vetor com N componentes entre lim1 e lim2.

 Exemplo 5.18:
>> u = linspace(0,3,5)
u =
0

0.7500

1.5000

2.2500

3.0000

Durante a execuo de um programa pode ser necessrio que a dimenso


de um vetor fornecido pelo usurio seja fixada, neste caso, podemos utilizar a
seguinte estrutura:
y = x(:);

Este comando transforma um vetor x linha ou coluna em um vetor y com os


mesmos elementos de x, mas necessariamente coluna.

 Exemplo 5.19:
>> u = [ 1 2 3 ]; , v = [ 3 ; 6 ; 7 ];

>> [ u(:) v(:) ]


ans =
1

5.4.3. Extrao de elementos


De maneira semelhante que as linguagens de programao convencionais,
possvel extrair um elemento de uma matriz bastando apenas indicar os seus
ndices.

 Exemplo 5.20:
O comando abaixo soma o elemento presente na posio (2,2) da matriz
com a segunda componente do vetor
>> M = [ 1 3 ; 4 6 ]; , x = [ 1 3 4 6 ];
>> M(2,2)+x(2)
ans =
9

Alm da extrao de elementos na forma tradicional, o MATLAB tambm


capaz de realizar a extrao de submatrizes e subvetores com apenas um
comando. Neste caso deve ser fornecido apenas o conjunto dos ndices dos
elementos que devem ser extrados.

 Exemplo 5.21:
Este exemplo ilustra a apresentao do conceito aplicado a um vetor:
>> v = [ 1 4 7 4 7 8 9 5 8 5 4 ]
v =
1

>> u = v(1:4) , w = v(5:end) , z = v([ 2 1 3 4 ])


u =

w =
8

z =
4

No exemplo acima foram gerados trs vetores, o vetor u contm da


primeira quarta componente do vetor v, o vetor w contm da quinta at a ltima
componente do vetor v, o vetor v contm a segunda, primeira, terceira e quarta
componentes.

 Exemplo 5.22:
Um procedimento semelhante pode ser aplicado para matrizes:
>> M = [ 1 4 7 ; 4 7 8 ; 9 5 8 ; 5 4 0 ]
M =
1

>> v1 = M(1,:) , v2 = M(2,1:2) , M3 = M(1:2,2:3)


v1 =
1

v2 =

M3 =

O vetor v1 corresponde primeira linha da matriz M. Neste caso, o smbolo


:

indica todo os ndices de uma certa dimenso. O vetor v2 corresponde aos

elementos presentes na segunda linha de M e na primeira e segunda coluna. A


matriz M3 corresponde aos elementos presentes na primeira e segunda linha e na
segunda e terceira colunas.

5.4.4. Alterao de matrizes e vetores


As estruturas apresentadas para extrao de elementos de uma matriz
tambm podem ser utilizadas para alterar os valores destes elementos.

 Exemplo 5.23:
Seja a matriz M0 gerada no procedimento abaixo
>> M0 = [ 2 3 5 ; 2 -3 -3 ; 9 0 8 ; 2 4 3 ; 4 5 6 ]
M0 =
2

-3

-3

Vamos agora realizar uma srie de alteraes na matriz M0. Inicialmente,


vamos alterar o valor do elemento M(3,3) para o valor 4:
>> M0(3,3) = 4
M0 =
2

-3

-3

Podemos tambm substituir a primeira linha da matriz pelo vetor [ 1 2 3 ]:


>> M0(1,:) = [ 1 2 3 ]
M0 =
1

-3

-3

As duas ltimas linhas da matriz sero agora eliminadas:


>> M0(4:5,:) = []
M0 =
1

-3

-3

Finalmente, vamos incluir um elemento unitrio na posio (1,4):


>> M0(1,4) = 1
M0 =
1

-3

-3

Note que como a matriz era dimenso 3x3, ao atribuir na posio (1,4) um
elemento, o prprio MATLAB se encarrega de preencher as demais posies
coerentes com valores nulos.

O MATLAB tambm dispe de funes especiais para a alterao de


matrizes e vetores de acordo com certos padres.
A funo:
diag(A)

quando aplicada a uma matriz A, gera um vetor coluna contendo os elementos da


diagonal principal de A.

 Exemplo 5.24:
>> M = [ 2 3 5 ; 9 9 8 ; 9 1 1 ]
M =
2

z=diag(M)
z =

2
9
1

A funo:
triu(A)

gera uma matriz diagonal superior a partir dos elementos presentes em A. A


funo:
tril(A)

opera de forma semelhante mas cria uma matriz triangular inferior.

 Exemplo 5.25:
>> M = [ 2 3 5 ; 9 9 8 ; 9 1 1 ]
M =
2

M_u=triu(M) , M_d=tril(M)
M_u =
2

M_u =

 Observao: A lista de funes especializadas para manipulao de matrizes


pode ser encontrada atravs do comando help elmat.

5.4.5. Composio de matrizes e vetores

possvel criar novas matrizes e vetores atravs da justaposio de outras


matrizes e vetores originais. A estrutura de sintaxe baseada neste conceito
semelhante aquela para a entrada dos elementos de uma matriz, mas agora se
referindo a blocos de elementos. Os prximos exemplos permitem esclarecer esta
idia:

 Exemplo 5.26:
Sejam as matrizes representadas abaixo:
>> M1 = [ 1 4 7 ; 4 7 8 ] , M2 = [ 2 3 1 ; 3 7 3 ]
M1 =
1

M2 =

A partir da justaposio de matrizes, possvel gerar vrias estruturas


diferentes:
>> Mat1=[ M1 M2 ] , Mat2=[ M1 ; M2 ] , Mat3=[ M1 ; M2(1,:) ]
Mat1 =
1

Mat2 =

Mat3 =

A matriz Mat1 foi gerada pela justaposio da matriz M2 direita da matriz


M1,

uma vez que foi utilizado como separador entre os dois blocos um caracter de

espao que significa ao longo da mesma linha. A matriz Mat2 foi criada pela
justaposio da matriz M2 embaixo da matriz M1, uma vez que o separador entre
os blocos utilizado foi o ponto-e-vrgula, que indica na linha abaixo. Finalmente, a
matriz Mat3 semelhante matriz Mat2, mas, neste caso, s foi justaposto
embaixo de M1, a primeira linha da matriz M2.

 Exemplo 5.27:
O mesmo procedimento pode ser aplicado para vetores:
>> v = [ 1 4 2 7 ];
>> Mat1 = [ v v ] , Mat2 = [ v' v' ] , Mat3 = [ [ v ; v ] v(1:2)' ]
Mat1 =
1

Mat2 =

Mat3 =

A criao de matrizes por justaposio tambm pode ser realizada atravs


do comando repmat:
repmat(bloco,lin,col)

ou repmat(bloco,[lin,col])

onde bloco corresponde matriz que deve ser repetida ao longo de lin linhas e
col

colunas. O exemplo abaixo ilustra bem o conceito envolvido:

 Exemplo 5.28:
>> M = [ 1 4 2 ; 1 9 0 ];

M =
1

>> M_M_M = repmat(M,1,3)


M_M_M =
1

Observe que a matriz M foi replicada uma vez ao longo da linha e trs vezes ao
longo das colunas.

O comando cat semelhante ao comando repmat mas pode ser utilizado


para compor matrizes diferentes:
cat(dim,A,B)

onde dim a dimenso ao longo da qual os blocos A e B sero justapostos.

 Exemplo 5.29:
Refazer o Exemplo 5.25 utilizando o comando cat:
Inicialmente, construmos as matriz M1 e M2.
>> M1 = [ 1 4 7 ; 4 7 8 ] , M2 = [ 2 3 1 ; 3 7 3 ]
M1 =
1

M2 =

A partir desta matriz, construmos as estruturas desejadas:


Mat1=cat(2,M1,M2) , Mat2=cat(1,M1,M2) , Mat3=cat(1,M1,M2(1,:))
Mat1 =

Mat2 =

Mat3 =

 Observao: Em qualquer caso de composio de matrizes e vetores, a


coerncia entre as dimenses da matrizes a serem combinadas deve ser
garantida, em caso contrrio, o procedimento levar a uma mensagem de erro.

 Exemplo 5.30:
>> u = [ -1 3 4 0 ] , v = [ 3 4 2 ]
u =
-1

v =
3

>> [ u ; v ]
???

All rows in the bracketed expression must have the same

number of columns.

5.4.6. Pesquisando matrizes e vetores


Atravs do comando find, disponvel no MATLAB, possvel identificar os
elementos de uma matriz ou de um vetor que atendem a uma certa condio.
Veja o exemplo a seguir:

 Exemplo 5.31:
>> v = [ 1 4 2 7 5 2 3 5 3 ]
v =
1

>> u=find(v>3)
u =
2

Atravs do comando find, foi gerado um vetor linha que indica os ndices
dos elementos do vetor v para os quais a expresso relacional, presente no
argumento, verdadeira (ou seja, = 1). Caso seja necessrio extrair os elementos
que atendem a condio proposta, basta apenas utilizar os recursos especiais de
extrao de elementos j apresentados:
>> v_maior_3 = v(u)
v_maior_3 =
4

O comando find tambm pode ser aplicado para matrizes como mostra o
exemplo abaixo:

 Exemplo 5.32:
>> M = [ 1 4 2 ; 7 5 2 ; 3 5 3 ]
M =
1

>> [lin,col]=find(M>3)
lin =
2
1
2
3
col =
1
2
2
2

Neste caso, o comando find gerou os vetores lin e col. O vetor lin indica
as linhas e o vetor col indica as colunas dos elementos que atendem a condio
estabelecida. Ou seja, os ndices dos elementos que atendem a condio so
(lin(1) , col(1)) , ((lin(2) , col(2)) , ((lin(3) , col(3)), etc. Uma viso
geral destas posies pode ser observada utilizando-se o recurso de justaposio
apresentado na subseo anterior:
>> [ lin col ]
ans =
2

 Observao: Na utilizao do comando find para matrizes no exemplo abaixo,


surgiu uma estrutura da forma [lin,col]=find(M>3). importante notar que,
neste caso, a sintaxe [lin,col] corresponde sada fornecida por uma funo
atravs de dois componentes, no indicando a justaposio dos vetores lin e
col.

Dois outros comandos de pesquisa bastante teis so os comandos min e


max.

As sintaxes mais importantes para estas funes so:


min(x)

ou max(x)

indica o valor da menor/maior componente do vetor x.


[y,i] = min(x) ou [y,i]=max(x)

indica o valor da menor/maior componente do vetor x (sada y), alm do seu


ndice (sada i).
min(x,y)

ou max(x,y)

gera uma matriz, com a mesma dimenso das matrizes x e y, composta pelos
menores/maiores elementos nas duas matrizes ao longo das posies
correspondentes.
min(x,[],dim)

ou max(x,[],dim)

quando x uma matriz determina os menores/maiores ao longo da dimenso


dim.

 Exemplo 5.33:
>> v = [ 1 4 2 4 5 3 6 ] , M = [ 2 4 0 ; 7 4 2 ; 4 9 3 ]
v =
1

M =

>> [ min(v) max(v) ]


ans =
1

>> min(M,[],1)
ans =
2

>> max(M(:,1),M(:,2))
ans =
4
7
9

5.5. Matrizes de dimenso superior


O MATLAB tambm capaz de processar matrizes de dimenso maior que
2. Para facilitar a visualizao, vamos apresentar aqui o desenvolvimento dos
conceitos apresentados para matrizes de trs dimenses, no entanto, caso seja
necessrio, todos os exemplos so plenamente aplicveis para outras
dimenses. No caso de matrizes de trs dimenses, a terceira dimenso ser
denominada pgina.

A entrada de dados de uma matriz de trs dimenses pode ser feita


compondo matrizes de duas dimenses ao longo do ndice das pginas. Veja o
exemplo abaixo:

 Exemplo 5.34:
Vamos entrar com uma matriz de dimenso 2x3x2. Montamos a matriz
atravs das introduo das duas pginas:
>> M(:,:,1) = [ 2 4 1 ; 3 5 6 ];
>> M(:,:,2) = [ 3 1 8 ; 2 0 9 ];

Finalmente, apresentamos o resultado na tela:


M(:,:,1) =
2

M(:,:,2) =

As tcnicas apresentadas anteriormente para a extrao de elementos e


alterao de matrizes e vetores tambm podem ser utilizadas.

 Exemplo 5.35:
Seja uma matriz M de dimenso 2x2x2:
>> M(:,:,1) = [ 0 4 ; 3 3 ]; , M(:,:,2) = [ 9 1 ; 2 1 ]
M(:,:,1) =
0

M(:,:,2) =
9

Vamos apresentar agora, alguns exemplos de manipulao:

>> M(1,:,:)
ans(:,:,1) =
0

ans(:,:,2) =
9

>> M(:,1,:)
ans(:,:,1) =
0
3
ans(:,:,2) =
9
2
>> M(:,:,1)
ans =
0

As funes ones, zeros, eye, rand, randn para criao de matrizes


especiais e as funes para determinao da dimenso de matrizes tambm
podem ser aplicadas para matrizes de dimenso superior. Os comandos repmat e
cat

tambm podem ser aplicados para composio de matrizes de dimenso

maior que 2 (para o comando repmat, deve ser necessariamente utilizada a


sintaxe apresentada no exemplo abaixo).

 Exemplo 5.36:
>> M = [ 1 2 3 ; 4 5 6 ]
M =
1

>> Mat1 = repmat(M1,[1,1,2])


Mat1(:,:,1) =
1

Mat1(:,:,2) =
1

>> Mat2 = cat(3,M,M)


Mat2(:,:,1) =
1

Mat2(:,:,2) =
1

Note que ambas as operaes forneceram o mesmo resultado.

Em relao s operaes matemticas para matrizes de dimenso superior


esto definidas as operaes envolvendo escalares e as operaes elemento a
elemento. Embora os operadores de lgebra linear no estejam definidos para
estas matrizes, estes podem ser aplicados para as pginas bidimensionais.

 Exemplo 5.37:
>> M(:,:,1) = [ 0 4 ; 3 3 ]; , M(:,:,2) = [ 9 1 ; 2 1 ]
M(:,:,1) =
0

M(:,:,2) =
9

>> M+2
ans(:,:,1) =
2

ans(:,:,2) =
11

>> 2.^M
ans(:,:,1) =
1

16

ans(:,:,2) =
512

>> M(:,:,1)*[ 1 ; 2 ]
ans =
8
9

 Observao: Uma vez que a utilizao de matrizes multidimensionais aumenta


a complexidade de processamento computacional e de endereamento dos
dados, recomenda-se que este tipo de varivel seja utilizado apenas quando
efetivamente trouxer um ganho na organizao das informaes do problema
abordado.

5.6. Matrizes de caracteres


Apesar do Matlab ser essencialmente um software para processamento
numrico, tambm possvel manipular textos (strings). Toda string ao ser
introduzida em uma varivel no Matlab deve estar limitada por smbolos ''.
Quando uma string armazenada em uma varivel, esta varivel adquire uma
estrutura matricial onde cada caracter da string um elemento da matriz.

 Exemplo 5.38:
>> Mat_char = 'Temperatura no tanque';
Mat_char =
Temperatura no tanque
>> size(Mat_char)
ans =

21

>> class(Mat_char)
ans =
char

Como pode ser observado no exemplo, a string foi armazenada como um


vetor linha da classe char.

Matrizes de caracteres tambm podem ser manipuladas de forma similar


que as matrizes convencionais, conforme est apresentado nos comandos a
seguir:

 Exemplo 5.39:
>> Mat_char = 'Tempo de fechamento';
>> disp(Mat_char)
Tempo de fechamento
>> Mat_char1 = Mat_char(1:5)
Mat_char1 =
Tempo
>> Mat_char2 = Mat_char(5:-1:1)
ans =
opmeT
>> Mat_char3 = [ Mat_char1 ' ' Mat_char2 ]
Mat_char3 =
Tempo opmeT

 Observao: Uma lista completa dos comandos de manipulao de strings


pode ser encontrada em help strfun.

6. MATRIZES CELULARES E ESTRUTURAS

6.1. Conceito
Matrizes celulares (cell arrays) e estruturas (structures) so classes de
dados disponveis nas verses mais recentes do MATLAB que permitem agrupar
elementos de diferentes classes em um mesmo grupo. Desta forma, o
processamento de informao pode ser facilitado, pois um conjunto variado de
dados relacionados pode ser agrupado sob uma nica varivel. Como o objetivo
destas classes de dados apenas ordenar a informao disponvel, matrizes
celulares e estruturas no operam matematicamente (mas o contedo
armazenado sim).

6.2. Matrizes celulares


Matrizes celulares so matrizes compostas por clulas, onde cada clula
individual pode armazenar elementos de qualquer classe de dados, sejam
strings, matrizes convencionais, matrizes celulares ou estruturas. Por exemplo,
uma matriz celular pode armazenar uma outra matriz celular em uma clula, uma
matriz convencional em outra e um vetor em mais outra. Matrizes celulares
podem ser construdas com qualquer dimenso, embora sejam usualmente
utilizadas na forma de um vetor.

6.2.1. Criao de matrizes celulares


Uma matriz celular pode ser construda atravs da atribuio de cada
clula individual. As clulas de uma matriz so representadas atravs de chaves
{ }

e indexadas atravs de ( ).

 Exemplo 6.1:
>> M1(1,1) = { eye(2) };
>> M1(1,2) = { pi };
>> M1(2,1) = { [ 1 2 ] };

>> M1(2,2) = { [] };
>> M1
M1 =
[2x2 double]

[3.1416]

[1x2 double]

[]

A matriz celular criada possui dimenso 2x2 e formada por uma matriz
identidade 2x2, por um escalar, por um vetor linha com duas componentes e por
uma matriz de dimenso 0x0. Na representao de uma matriz celular, as clulas
contendo matrizes so apresentadas atravs da dimenso da matriz que est
armazenada.

Uma forma alternativa de alimentar dados em uma matriz celular


corresponde a indicar diretamente o contedo de cada clula. Neste caso, a
identificao da posio do contedo de uma clula feita atravs de { }. Veja o
exemplo a seguir:

 Exemplo 6.2:
>> M2{1,1} = ones(2);
>> M2{1,2} = pi^2;
>> M2{2,1} = [ 1 ; 2 ];
>> M2{2,2} = [];
>> M2
M2 =
[2x2 double]

[9.8696]

[2x1 double]

[]

A diferena sutil mas deve ser observada, a indexao de uma clula


realizada atravs de ( ) e a indexao do contedo da clula na matriz celular
realizada atravs de { }. O exemplo abaixo permite esclarecer esta idia.

 Exemplo 6.3:

Inicialmente vamos criar uma matriz celular 1x2, contendo duas matrizes
de zeros de diferentes dimenses
>> M3{1,1} = zeros(2);
>> M3{1,2} = zeros(3);
>> M3
M3 =
[2x2 double]

[3x3 double]

Vamos agora apresentar a clula presente na primeira posio:


>> M3(1,1)
ans =
[2x2 double]
>> class(M3(1,1))
ans =
cell

Agora vamos apresentar o contedo da clula presente na primeira


posio:
>> M3{1,1}
ans =
0

>> class(M3{1,1})
ans =
double

As chaves { } podem representar no s clulas isoladas mas tambm


matrizes celulares como um todo, de forma semelhante quela utilizada nas
matrizes convencionais.

 Exemplo 6.4:
>> M4 = { [ 1 2 ] , [ 3 4 5 ] ; [ 6 7 8 9 ] , [ 10 11 12 13 ] }
M4 =

[1x2 double]

[1x3 double]

[1x4 double]

[1x4 double]

Caso seja necessrio, possvel inicializar uma matriz celular atravs do


comando cell, que cria uma matriz celular contendo matrizes de dimenso 0x0.
Veja o exemplo abaixo:

 Exemplo 6.5:
>> cell(2,2)
ans =
[]

[]

[]

[]

6.2.2. Extrao envolvendo matrizes celulares


Tal como foi apresentado no Exemplo 6.3, podemos acessar o contedo
de uma clula isolada de forma semelhante s matrizes convencionais. A
apresentao do contedo de grupo de clulas tambm pode ser feita da mesma
forma.

 Exemplo 6.6:
>> M6 = { ones(1,3) , zeros(1,3) ; ones(1,2) , zeros(1,2) };
>> M6_1 = M6{1,1}
M6_1 =
1

>> M6{1,:}
ans =

ans =

>> M6_2 = M6{1,:}


??? Illegal right hand side in assignment. Too many elements.

importante observar neste exemplo que no foi possvel atribuir o


contedo de um grupo de clulas em uma outra matriz celular. No entanto
possvel atribuir, no o contedo, mas um subgrupo de clulas como um todo, em
uma outra matriz celular.
>> M6_ = M6(1,:)
M6_ =
[1x3 double]

[1x3 double]

Para apresentarmos o contedo de todas as clulas de uma matriz celular,


utilizamos o comando celldisp, conforme est apresentado no prximo exemplo:

 Exemplo 6.7:
Inicialmente vamos criar uma matriz celular 2x2:
>> M7{1,1} = [ 1 2 ];
>> M7{1,2} = [ 3 4 5 ];
>> M7{2,1} = [ 6 7 8 9 ];
>> M7{2,2} = [ 10 11 12 13 ];

Agora utilizamos o comando celldisp para apresentar o contedo de


todas as clulas:
>> celldisp(M7)
M7{1,1} =
1

M7{2,1} =
6

11

12

M7{1,2} =
3
M7{2,2} =
10

13

Este comando apresenta o contedo de cada clula. Observe, mais uma


vez, que diferente da representao da clula como um todo:
>> M7

M7 =
[1x2 double]

[1x3 double]

[1x4 double]

[1x4 double]

Uma representao grfica da estrutura da clula tambm pode ser obtida


atravs do comando abaixo:
>> cellplot(M7)

Atravs do comando deal possvel realizar mltiplas atribuies do


contedo de um grupo de clulas para um conjunto de variveis:
[var_1,var2,...] = deal(Mat_Cel)

ou
[var_1,var2,...] = deal(Mat_Cel1,Mat_Cel2,Mat_Cel3,...)

onde var_1,var_2,... corresponde a lista de variveis para a atribuio e


Mat_Cel

ou Mat_Cel1, Mat_Cel2,... so o conjunto dos contedos das clulas

que sero distribudas ao longos das variveis

 Exemplo 6.8:
>> M8 = { eye(3) , zeros(2) ; 30 , -3 }
>> [M8_1,M8_2,M8_3,M8_4]=deal(M8{:})
M8_1 =
1

M8_2 =
30
M8_3 =
0

M8_4 =
-3

Alm de acessarmos o contedo de uma clula, tambm possvel


acessar um certo elemento ou grupo de elementos de uma matriz contida em
uma clula.

 Exemplo 6.9:
>> M9 = { 1 2 ; [ -1 2 ; 4 8 ] , pi }
M9 =
[

1]

[2x2 double]

2]

[3.1416]

>> M9_1 = M9{2,1}


M9_1 =
-1

>> M9_2 = M9{2,1}(1,1)


M9_2 =
-1
>> M9_3 = M9{2,1}(1,:)
M9_3 =
-1

6.2.3. Alterao de clulas


As tcnicas utilizadas para manipular as matrizes convencionais tambm
podem ser utilizadas para matrizes celulares, como ilustra o prximo exemplo.

 Exemplo 6.10:
Inicialmente, vamos criar a matriz celular M9:
>> M10 = { 1 , 2 , [ -1 2 ; 4 8 ] , zeros(1,2) , 10 }
M10 =
[1]

[2]

[2x2 double]

[1x2 double]

Vamos alterar o contedo da terceiro clula:


>> M10{3} = -2*M10{3};

[10]

>> M10{3}
ans =
2

-4

-8

-16

Agora, vamos eliminar a ltima clula:


>> M10(end)=[]
M10 =
[1]

[2]

[2x2 double]

[1x2 double]

6.2.4. Composio de matrizes celulares


O prximo exemplo apresenta como as matrizes celulares podem ser
justapostas de forma equivalente s matrizes numricas.

 Exemplo 6.11:
>> M11_1 = { 1 , 2 , [ 2 3 ] , [ 3 ; 4 ] }
M11_1 =
[1]

[2]

[1x2 double]

[2x1 double]

>> M11_2 = { -1 , [2 3 ; 4 5 ] , 2 , 100 }


M11_2 =
[-1]

[2x2 double]

[2]

[100]

>> M11 = [ M11_1 ; M11_2 ]


M11 =
[ 1]

2]

[-1]

[2x2 double]

[1x2 double]

[2x1 double]

2]

100]

6.3. Estruturas
Estruturas so classes de dados semelhantes s matrizes celulares e
tambm tm como objetivo agrupar conjuntos de dados de classes diferentes
atravs de uma nica varivel. A diferena das estruturas consiste na forma de
armazenamento de dados. Enquanto nas matrizes os dados so armazenados
em clulas, identificadas atravs de nmeros, nas estruturas os dados so

armazenados em diferentes campos (fields) identificados atravs de strings.


Estruturas tambm podem ser criadas com qualquer dimenso, mas so
usualmente utilizadas como vetores.

6.3.1. Criao de estruturas


Vamos apresentar a sintaxe de criao de estruturas atravs do prximo
exemplo, onde criada uma varivel para guardar as informaes relativas a um
conjunto de dutos de uma unidade industrial.

 Exemplo 6.12:
Inicialmente, so introduzidas as diversas informaes disponveis sobre
um certo duto na estrutura pipe:
>> Pipe.number=1;
>> Pipe.diameter=2;
>> Pipe.length=20;
>> Pipe.device.valve=[ 2 18 ];
>> Pipe.device.sensor=[ 10 ];
>> Pipe
Pipe =
number: 1
diameter: 2
length: 20
device: [1x1 struct]

Os campos number, diameter e length so escalares e o campo device


uma outra estrutura, cujos campos so valve e sensor. Agora, vamos introduzir
as informaes referentes ao prximo duto da lista:
>> Pipe(2).number=2;
>> Pipe(2).diameter=3;
>> Pipe(2).length=30;
>> Pipe(2).device.valve=[ 0 25 ];
>> Pipe(2).device.sensor=[ ];

>> Pipe
Pipe =
1x2 struct array with fields:
number
diameter
length
device

Alternativamente, tambm possvel alimentar dados em uma estrutura


atravs do comando struct:
struct_name = struct('field1',V1,'field2',V2,)

onde struct_name o nome da estrutura a ser criada; field1, field2, etc. so os


campos para armazenamento das informaes; e V1, V2, etc. so matrizes
celulares de mesmo tamanho com as informaes para serem armazenadas nos
diferentes campos.

 Exemplo 6.13:
Este exemplo armazena as mesmas informaes apresentadas no
exemplo anterior na estrutura Duct. Primeiro, as informaes a serem
armazenadas so agrupadas em matrizes celulares relativas aos diferentes
campos:
>> N = { 1 2 };
>> D = { 2 3 };
>> L = { 20 30 };
>> Dv = { { [ 2 18 ] , [ 10 ] } , { [ 0 25 ] , [ ] } };
>> Duct = struct('number',N,'diameter',D,'length',L,'device',Dv)
Duct =
1x2 struct array with fields:
number
diameter
length
device

6.3.2. Extrao envolvendo estruturas


As tcnicas para a extrao do contedo so similares quelas utilizadas
para matrizes e vetores. possvel acessar um campo, um conjunto de campos,
ou elementos ou grupo de elementos em um certo campo. O prximo exemplo
ilustra a sintaxe utilizada nestas tcnicas:

 Exemplo 6.14:
Este exemplo utiliza a estrutura Duct do exemplo anterior.
>> Duct
Duct =
1x2 struct array with fields:
number
diameter
length
device

O prximo comando apresenta as informaes armazenadas no campo


number:
>> Duct.number
ans =
1
ans =
2

Agora, so apresentados todos os campos do primeiro grupo de dados


armazenados:
>> Duct(1)
ans =
number: 1
diameter: 2
length: 20
device: {[2 18]

[10]}

O comando abaixo apresenta o contedo do primeiro elemento


armazenado no campo diameter (dimetro do duto 1):
>> Duct(1).diameter
ans =
2

Podemos calcular a soma dos comprimentos dos dutos:


>> CompTotal = sum([ Duct.length ])

O smbolo [ ] presente no comando acima necessrio para colocar as


sadas dos campos length em uma matriz, onde pode ser aplicado o comando
sum.

6.3.3. Alterao de campos


Utilizando os mesmos conceitos envolvidos nas matrizes convencionais e
celulares, possvel alterar o contedo dos campos, incluir novos campos ou
eliminar campos, etc.

 Exemplo 6.15:
Vamos criar uma nova estrutura com o nome Tube a partir da estrutura
Duct

existente:
>> Tube = Duct
Tube =
1x2 struct array with fields:
number
diameter
length
device

Agora vamos alterar o dimetro do tubo 1:


>> Tube(1).diameter = 1.5;
>> Tube.diameter
ans =
5

ans =
3

Vamos introduzir um novo campo com a rugosidade dos tubos:


>> Tube(1).roughness = { 46e-6 }; , Tube(2).roughness = { 46e-6 };
>> Tube
Tube =
1x2 struct array with fields:
number
diameter
length
device
roughness

Finalmente, vamos eliminar o campo device, utilizando a funo rmfield:


>> rmfield('Tube.device')
ans =
1x2 struct array with fields:
number
diameter
length
roughness

 Observao: Informaes adicionais sobre matrizes celulares e estruturas


podem ser encontradas na documentao do MATLAB, digitando-se help
datatypes

na linha de comando.

7. GRFICOS

O MATLAB oferece uma grande quantidade de recursos grficos para a


apresentao de resultados, incluindo curvas no plano e no espao, curvas de
nvel, superfcies com diversas formas de representao e texturas, histogramas,
grfico de barras, etc. A poderosa capacidade grfica do Matlab constitui uma
das suas caractersticas mais importantes quando comparado s linguagens de
programao convencionais.

7.1. Grficos 2-D

7.1.1. Traando grficos


A sintaxe bsica para representar uma massa de dados em um grfico
bidimensional o comando plot, utilizado na sua forma mais simples da seguinte
maneira:
plot(x,y,'str')

onde x e y so os vetores contendo as coordenadas dos pontos a serem


apresentados no grfico desta forma, sero plotados os pontos (x1,y1) , (x2,y2) ,
etc.; e str uma string de caracteres opcional indicando a cor, o smbolo dos
pontos e o estilo da linha empregados na representao grfica. A tabela a seguir
apresenta a codificao de cor, smbolo e estilo da linha:

Codificao de cores
Caracter

Cor

Caracter

Cor

azul

magenta

verde

amarelo

vermelho

preto

azul claro

branco

Codificao de smbolos

Caracter

Smbolo

Caracter

Smbolo

ponto

tringulo ()

crculo

tringulo ()

xis

<

tringulo ()

soma

>

tringulo ()

asterisco

pentgono

quadrado

hexgono

losango

Codificao de estilos de linha


Caracter

Smbolo

linha contnua

tracejado curto

--

tracejado longo

-.

Trao - ponto

O exemplo a seguir ilustra a utilizao do comando plot.

 Exemplo 7.1:
Na tabela abaixo h um conjunto de pontos medidos no lento processo de
aquecimento de um tanque ao longo do tempo. O objetivo deste exemplo
preparar um grfico que represente os pontos medidos.

Dados de aquecimento de um tanque


Tempo (h)

0,0

0,5

1,0

1,5

2,0

2,5

3,0

3,5

4,0

4,5

Temp. (C)

25,0 28,8 32,3 35,6 38,7 41,5 44,2 46,6 48,9 51,1

Inicialmente, vamos alimentar os dados fornecidos atravs de dois vetores:


>> t = [ 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 ];
>> T = [ 25.0 28.8 32.3 35.6 38.7 41.5 44.2 46.6 48.9 51.1 ];

Para traar o grfico utilizamos o comando plot. Vamos selecionar os


pontos na cor vermelha e representados como crculos. No selecionaremos
nenhum estilo de linha, uma vez que queremos um grfico de pontos discretos
no ligados (quando o caracter referente ao smbolo est presente e o caracter
referente ao estilo de linha no est presente, nenhuma linha adicionada):
>> plot(t,T,'ro')

Finalmente, o MATLAB abrir uma janela onde ser apresentado o grfico


abaixo:
55

50

45

40

35

30

25
0

0.5

1.5

2.5

3.5

4.5

Vamos verificar outra combinao de cores e smbolos:


>> plot(t,T,'d')

Como o cdigo de cor no est presente, o MATLAB ir utilizar a cor


default azul, e de acordo com a codificao do caracter, os smbolos dos pontos
sero losangos:

55

50

45

40

35

30

25
0

0.5

1.5

2.5

3.5

4.5

No Exemplo 7.1, foram preparados grficos com conjuntos de pontos


isolados. No entanto, pode ser necessrio traar o grfico da curva associada ao
comportamento de uma funo. O procedimento neste caso envolve a utilizao
do comando plot em conjunto com as operaes matriciais elemento a elemento.
O exemplo a seguir ilustra esta abordagem.

 Exemplo 7.2:
Traar o grfico da funo f ( x ) = [sen( x )]2 cos( x ) para x [0,4 ] .
O primeiro passo para traar um grfico de uma funo consiste em gerar
um vetor com as coordenadas da varivel independente dos pontos (a rotina
grfica no traa curvas contnuas, na verdade, o conjunto de pontos discretos
plotado, e depois estes so ligados em seqncia para reproduzir a forma da
curva). Vamos utilizar os recursos de gerao de vetores com padro crescente
apresentados anteriormente (Subseo 5.4.2):
>> x = 0 :0.01:4*pi;

Alm da estrutura de sintaxe utilizada acima, tambm poderia ser aplicado


alternativamente o comando linspace.

Uma vez criado o vetor da varivel independente, deve ser criado o vetor
da varivel dependente, atravs da imagem da funo. Para este clculo, devem
ser utilizadas as operaes elemento a elemento. Desta forma, para cada
componente do vetor x, ser calculado o valor da imagem da funo,
armazenado ento no vetor y:
>> y = sin(x).^2.*cos(x);

Finalmente, aplica-se o comando plot:


>> plot(x,y)

A string de identificao da cor e do smbolo no foi introduzida, como


conseqncia, o MATLAB ir utilizar os valores default: cor azul com os pontos
no marcados mas ligados atravs de uma curva contnua:
0.4

0.3

0.2

0.1

-0.1

-0.2

-0.3

-0.4
0

10

12

14

 Observao: No traado de uma curva, o incremento utilizado para a gerao


do vetor da varivel independente deve ser suficientemente pequeno para
produzir uma curva precisa, o emprego de poucos pontos poderia levar a uma
curva poligonal que no representaria de forma correta o grfico da funo. Por
outro lado, um incremento excessivamente pequeno pode acarretar um esforo
computacional desnecessrio.

Tambm possvel traar o grfico de mltiplas curvas simultaneamente,


utilizando a seguinte sintaxe:
plot(x1,y1,'str1',x2,y2,'str2',...)

onde x1,y1,str1 so as informaes da primeira curva; x2,y2,str2 so as


informaes da segunda curva e assim sucessivamente.

 Exemplo 7.3:
Traar os grficos das funes f ( x ) = [sen( x )]2 cos( x ) e g ( x ) = sin( x ) para
x [0,4 ] .

Vamos seguir os mesmos passos do Exemplo 7.2.:


>> x = 0:0.01:4*pi;
>> y = sin(x).^2.*cos(x); , z = sin(x);
>> plot(x,y,x,z)

Resultando finalmente no seguinte grfico (observe que o MATLAB utiliza


uma cor para cada curva):
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
0

10

12

14

Alternativamente tambm poderia ser utilizado o seguinte comando:


Sejam x, y, z vetores linha

>> plot(x,[ y ; z ])

ou
Sejam x, y, z vetores coluna:
>> plot(x,[ y z ])

No primeiro caso, o vetor da varivel independente combinado com as


linhas da matriz, gerando respectivamente as duas curvas. No segundo caso, o
vetor da varivel independente combinado com as colunas da matriz para gerar
as duas curvas.

 Observao: O Matlab tambm capaz de traar grficos em escala log-log:


loglog(x,y,'str');

em

escala

monolog:

semilogy(x,y,'str');

alm de coordenadas polares: polar(ang,raio,'str').

semilogx(x,y,'str')

ou

Todos estes comandos seguem a mesma sintaxe geral do comando plot.

7.1.2. Manipulando grficos


Uma vez que um grfico foi gerado, o MATLAB permite que o usurio possa
alterar vrios dos seus aspectos. Vamos apresentar aqui um conjunto de
comandos que podem ser utilizados para a manipulao de grficos.
A prpria janela grfica criada atravs do comando plot possui uma barra
de ferramentas com vrios recursos que podem ser explorados para a
manipulao do grfico: zoom, incluso de textos, setas, rotao em 3D,
alteraes de caractersticas, etc.
Atravs do comando grid on, o grfico ativo recebe uma malha de linhas
delimitadoras (o comando grid off retira estas linhas e o comando isolado grid
recebe/retira as linhas, dependendo do estado inicial).
Os grficos no Matlab so embutidos em uma caixa que pode ser
desativada atravs do comando box off (o comando box on coloca a caixa e o
comando box coloca/retira caixa, dependendo do estado inicial).
A identificao do ttulo do grfico e das escalas pode ser feita,
respectivamente, atravs dos comandos:
title('mensagem')

xlabel('mensagem')
ylabel('mensagem')

onde mensagem o texto de identificao a ser apresentado.


Quando mltiplas curvas so traadas em um grfico, como no exempo
acima, o comando legend permite que sejam adicionadas identificaes para
cada curva:
legend('mensagem1','mensagem2',...)

onde mensagem1, mensagem2, etc. so as identificaes da primeira curva, segunda


curva, etc.

 Exemplo 7.4:
Refazer o grfico do Exemplo 7.3 incluindo uma malha de linhas
delimitadoras, retirando a caixa externa e incluindo a identificao do ttulo e dos
eixos e uma legenda.
Caso os vetores no estejam mais armazenados no workspace, vamos
repetir a gerao dos pontos:
>> x = 0:0.01:4*pi; , y = sin(x).^2.*cos(x); , z = sin(x);

Traamos o grfico base:


>> plot(x,y,x,z)

Agora, realizamos as alteraes desejadas (sem fechar a janela inicial):


>> grid on
>> box off
>> title('Grfico de duas curvas')
>> xlabel('Eixo x') , ylabel('Eixo y')
>> legend('Funo f(x)','Funo g(x)')

O resultado final :

Grfico de duas curvas


1
Funo f(x)
Funo g(x)

0.8
0.6
0.4

Eixo y

0.2
0
-0.2
-0.4
-0.6
-0.8
-1
0

10

12

14

Eixo x

A regio do grfico a ser visualizado pode ser alterada atravs do comando


axis:
axis([ xinf , xsup , yinf , ysup ])

onde [ xinf , xsup , yinf , ysup ] so os limites do grfico a serem


visualizados. Para retornar a sistema de escalas automtico utiliza-se axis on.

 Exemplo 7.5:
Reduzir a rea de visualizao do Exemplo 7.4 para x [0,4 ] e y [1,0] .
Aps executarmos o exemplo anterior, digitamos:
>> axis([ 0 4*pi -1 0 ])

Grfico de duas curvas


0
Funo f(x)
Funo g(x)

-0.1
-0.2
-0.3

Eixo y

-0.4
-0.5
-0.6
-0.7
-0.8
-0.9
-1
0

6
Eixo x

10

12

 Observao: Lembre-se que para efetuar as alteraes apresentadas nesta


subseo, inicialmente o grfico deve ser traado, e a sua janela deve estar ativa
antes dos comandos serem aplicados.

7.1.3. Gerenciando janelas grficas


Quando vrios comandos plot so executados em seqncia, o MATLAB
sempre apaga o grfico anterior. No entanto, a visualizao de vrias janelas
grficas diferentes pode ser feita atravs do comando figure. Uma vez acionado
este comando, o MATLAB cria uma janela adicional e qualquer novo grfico vai
para esta nova janela, mantendo as demais intactas. medida que as janelas
so criadas em seqncia, estas vo sendo numeradas como pode ser visto na
barra de ttulo de cada uma. Para ativar um janela existente para o primeiro
plano, o comando figure pode ser utilizado na seguinte forma: figure(n) onde n
o nmero da janela. Todas as manipulaes grficas apresentadas na
subseo anterior so aplicadas na janela que estiver ativa naquele instante.
Atravs da linha de comando tambm possvel fechar janelas, utilizandose o comando close. Quando este comando digitado, o MATLAB fecha a janela
que estiver ativa. Para fechar uma janela diferente da janela ativa, basta apenas

fornecer o nmero da janela: close(n). Finalmente, o comando close all fecha


todas as janelas grficas abertas.
Quando uma janela grfica est ativa, o comando hold on faz com que
qualquer comando plot adicional seja desenhado na janela ativa sem apagar o
contedo desta (hold off desativa o comando e hold alterna entre os dois
estados).
Vrios grficos podem ser visualizados no MATLAB simultaneamente,
atravs da diviso da janela grfica em regies, utilizando-se o comando subplot:
subplot(lin,col,n)

onde lin e col so os nmeros de linhas e colunas em que deve ser dividida a
janela grfica e n a posio em que o prximo grfico deve ser colocado (a
numerao das posies caminha da esquerda para a direita ao longo de uma
linha, comeando pela primeira, passando no final para a segunda, e assim
sucessivamente).

 Exemplo 7.6:
Apresentar as curvas

f ( x ) = sen( x ) ,

g ( x ) = [sen( x )]3 ,

h( x ) = cos( x )

k ( x ) = [cos( x )]3 para x [0,2 ] , em separado mas em uma mesma janela grfica.
>> x = 0:0.01:2*pi;
>> y = sin(x); , z = sin(x).^3; , w = cos(x); , v = cos(x).^3;
>> subplot(2,2,1) , plot(x,y) , title('Funao f(x)')
>> subplot(2,2,2) , plot(x,z) , title('Funao g(x)')
>> subplot(2,2,3) , plot(x,w) , title('Funao h(x)')
>> subplot(2,2,4) , plot(x,v) , title('Funao k(x)')

Gerando assim o grfico das quatro curvas em uma matriz 2x2:

Funao f(x)

Funao g(x)

0.5

0.5

-0.5

-0.5

-1

-1
0

Funao h(x)

Funao k(x)

0.5

0.5

-0.5

-0.5

-1

-1
0

 Observao: Informaes adicionais sobre as rotinas grficas 2-D do Matlab


podem ser encontradas em help graph2d.

7.2. Grficos 2-D especiais


Alm dos grficos 2-D convencionais apresentados, o MATLAB tambm
possui vrias ferramentas para traar grficos especiais como histogramas,
grficos de barra, grficos tipo torta, etc.

7.2.1. Histogramas
Dada uma certa coleo de valores armazenados em um vetor, o comando
hist,

gera o histograma desta amostra:


hist(x,n)

onde x o vetor de valores e n um escalar opcional que indica o nmero de


barras que devem ser includas (default n = 10).

 Exemplo 7.7:

Traar o histograma de um conjunto 10.000 de pontos com distribuio


normal padronizada.
>> x = randn(1e4,1);
>> hist(x,30) , title('Histograma')
Histograma
1000
900
800
700
600
500
400
300
200
100
0
-4

-3

-2

-1

7.2.2. Grficos de barra


A sintaxe geral para a construo de um grfico de barra em suas diversas
formas :
bar(x,y,'cor')

ou bar3(x,y,'cor') ou barh(x,y,'cor') ou bar3h(x,y,'cor')

onde x e y so os vetores utilizados para construo do grfico e cor o caracter


opcional para definio da cor das barras.

A diferena entre os comandos

apresentados

grfico

est

na

apresentao

do

(vertical ou

horizontal;

bidimensional ou tridimensional).

 Exemplo 7.8:
A produo mdia de uma refinaria (em milhares de barris/dia) ao longo
dos meses de um certo ano est representada na tabela abaixo:

Ms

Jan

Fev

Mar

Abr

Mai

Jun

Jul

Ago

Set

Out

Nov

Dez

Prod.

200

220

230

80

90

150

220

230

225

275

280

285

Fazer uma representao da produo ao longo do ano com grfico de


barras.
Para ilustrar a utilizao das diversas formas de grfico de barras
disponveis, vamos utilizara o recurso do subplot.
Os vetores de dados so:
>> mes = 1:12;
>> prod = [ 200 220 230 80 90 150 220 230 225 275 280 285 ];

Os comandos para traar os grficos so:


>> bar3(mes,prod)
>> title('Grfico da produo')
Grfico da produo
300
250
200
150
100
50
0
1

10

11

12

7.2.3. Grficos tipo torta


Os comandos pie ou pie3 permitem gerar um grfico de torta a partir dos
valores armazenadas em ou vetor:
pie(x,b) ou pie3(x,b)

onde x o vetor de dados e b um vetor booleano indicando os elementos que


devem ser destacados (=1) ou no (=0). A nica diferena ente estes dois
comandos a aparncia do grficos (2-D ou 3-D).

 Exemplo 7.9:
Traar um grfico tipo torta com os dados do Exemplo 7.8:
>> prod = [ 200 220 230 80 90 150 220 230 235 275 280 285 ];
>> b = zeros(1,12); , b(end)=1;
>> pie3(x,b)

Neste caso, vamos traar um grfico tipo torta com aparncia 3-D
utilizando-se os dados armazenados no vetor x, destacando-se o ms de maior
produo.
11%

11%

8%
11%
9%
9%
9%
3%

9%
4%

6%

9%

7.2.4. Grficos com barras de erro


Para traarmos um grfico incluindo barras de erro na indicao dos
pontos utilizamos o comando errorbar:
errorbar(x,y,e,'str')

onde x, y e e so vetores de mesma dimenso. Este comando plotar os pontos


(x1,y1) com barra de erro em torno do ponto de -e1 at +e1, (x2,y2) com barra de
erro em torno do ponto de -e2 at +e2, e assim sucessivamente. A string str
define as caractersticas do grfico utilizando a mesma codificao j
apresentada.

 Exemplo 7.10:

Traar um grfico da curva de aquecimento do Exemplo 7.1, incluindo uma


representao do erro da medida de 1 C.
Os pontos da curva de aquecimento so:
>> t = [ 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 ];
>> T = [ 25.0 28.8 32.3 35.6 38.7 41.5 44.2 46.6 48.9 51.1 ];

Definimos o vetor de erros considerado:


>> e = ones(size(t))*e;

E, traamos o grfico, com quadrados verdes:


>> errorbar(t,T,e,'gs')
>> title('Curva de aquecimento')
>> xlabel('Tempo (h)')
>> ylabel('Temperatura (C)')
C urva de aquecimento
55

50

Temperatura (C )

45

40

35

30

25

20
-1

2
Tempo (h)

 Observao: Uma lista completa de todos os grficos especiais 2-D disponveis


no MATLAB pode ser encontrada atravs do comando help especgraph.

7.3. Grficos 3-D

Os grficos 3-D no MATLAB podem ser traados de forma equivalente que


os grficos 2-D tradicionais, permitindo gerar curvas e superfcies no espao com
facilidade. Os comandos apresentados anteriormente para a manipulao de
grficos e gerenciamento de janelas tambm podem ser aplicados para os
grficos 3-D apresentados ao longo desta Subseo.

7.3.1. Traando grficos de curvas


Para traar o grfico de uma curva no espao utiliza-se o comando plot3,
de forma semelhante ao comando plot. Em sua forma geral, temos:
plot3(x1,y1,'str1',x2,y2,'str2',...)

onde x1,y1,z1,str1 so as informaes da primeira curva; x2,y2,z2,str2 so as


informaes da segunda curva, e assim sucessivamente.

 Exemplo 7.11:
Traar o grfico da funo parametrizada: x ( t ) = t cos( t ) , y( t ) = t sen( t ) e
z ( t ) = t para t [0, 20 ] .

Os vetores para a gerao da curva so:


>> t = 0:0.01:20*pi;
>> x = t.*cos(t); , y = t.*sin(t); , z = t;

O grfico resultante :
>> title('Curva em espiral')
>> xlabel('Eixo x') , ylabel('Eixo y') , zlabel('Eixo z')

70
60

Eixo z

50
40
30
20
10
0
100
50

100
50

0
0

-50
Eixo y

-50
-100

-100

Eixo x

7.3.2. Traando grficos de superfcies


O procedimento para traar o grfico da superfcie de uma funo
f : 2 envolve inicialmente a criao de uma malha de pontos cobrindo a

regio do domnio do grfico.


Esta malha de pontos pode ser gerada atravs da funo meshgrid, que
recebe dois vetores relativos s coordenadas independentes do grfico e gera
duas matrizes, cujos os pares de elementos correspondentes formam a malha
desejada para a gerao da superfcie. A sintaxe do comando :
[X,Y]=meshgrid(x,y)

onde x e y so os vetores das coordenadas independentes; e X e Y so as


matrizes formadas.
Uma vez que a malha foi criada, na forma de duas matrizes, deve-se
calcular o valor da funo em cada par de elementos, armazenando-se ento o
resultado em uma terceira matriz, relativa varivel dependente.
Aps as trs matrizes que descrevem a superfcie foi gerada, o MATLAB
possui uma variedade de comandos diferentes para traar o grficos em
diferentes formas de apresentao. Os dois comandos bsicos so:
mesh(X,Y,Z)
surf(X,Y,Z)
waterfall(X,Y,Z)

onde X,Y e Z so as matrizes que representam os pontos da superfcie.


Para explorar as diferenas entre cada ferramenta de apresentao grfica
3-D, vamos analisar o exemplo a seguir.

 Exemplo 7.12:
Traar o grfico da superfcie da funo z ( x , y ) = x 2 + y 2 para x [11
,] e
y [11
, ].

O primeiro passo definir vetores de valores nas variveis independentes


que originaro a malha de pontos que deve cobrir a regio:
>> x = -1:0.05:1;
>> y = -1:0.05:1;

O prximo passo gerar as matrizes que formam a malha:


>> [X,Y] = meshgrid(x,y);

Uma vez que a malha foi criada, devemos calcular o valor da funo em
cada ponto da malha, utilizando-se para isto operaes elemento a elemento:
>> Z = X.^2 + Y.^2;

De posse das trs matrizes que representam os pontos por sobre a


superfcie, geramos o grfico utilizando o comando mesh.
>> mesh(X,Y,Z)

O grfico resultante :

Note no grfico acima que as cores so alteradas dependendo do valor da


funo objetivo. Observe tambm que a superfcie opaca. Esta caracterstica
pode ser alterada atravs dos comandos hidden on (transparente),

hidden off

(opaco), hidden (alterna os estados). Veja o que acontece:


>> hidden

Uma outra opo de apresentao grfica o comando surf, semelhante


ao comando mesh, mas com os espaos entre as linhas so coloridos.
>> surf(X,Y,Z)

A textura da superfcie pode ser alterada atravs dos comandos shading


faceted

(default), shading interp ou shading flat.

>> shading interp

Deixamos ao leitor interessado um passeio atravs das formas de


apresentao grfica derivadas dos comandos apresentados aqui: meshc(X,Y,Z),
mesh(X,Y,Z), waterfall(X,Y,Z), surfc(X,Y,Z), surfl(X,Y,Z)

e surfnorm(X,Y,Z).

7.3.3. Traando grficos de curvas de nvel


Curvas de nvel indicam os pontos da superfcie que possuem um mesmo
valor para a funo.
As curvas de nvel no MATLAB podem ser

representadas atravs dos

seguintes comandos:
contour(X,Y,Z,n,'cor')

ou contourf(X,Y,Z,n,'cor') ou

contour3(X,Y,Z,n,'cor')

ou pcolor(X,Y,Z,n,'cor')

onde X,Y e Z so as matrizes da superfcie, n o nmero opcional de curvas de


nvel a serem traadas, e cor o cdigo opcional identificando a cor das curvas
de nvel. A diferena entre os comandos a forma de apresentao: contour3
coloca as curvas de nvel ao longo da superfcie, contour coloca as curvas de
nvel no plano, contourf semelhante a contour mas colorindo o espao entre as
curvas e pcolor representa as curvas de nvel atravs de um mapa de cores.

 Exemplo 7.12:
Traar o grfico das curvas de nvel da funo z ( x , y ) = x 2 + y 2 para
x [11
, ] e y [11
, ].

Caso as matrizes do Exemplo 7.13 tenham sido apagadas, vamos gerar


novamente estes dados:
>> x = -1:0.05:1; , y = -1:0.05:1;
>> [X,Y] = meshgrid(x,y);
>> Z = X.^2 + Y.^2;

Vamos traar as curvas de nvel com o comando contour.


>> contour(X,Y,Z)

Aproveitando vamos tambm digitar os comandos necessrios para indicar


os valores da funo ao longo das curvas de nvel:
>> [C,h] = contour(X,Y,Z);
>> clabel(C,h)

O resultado final :

1
0.8

6
1 . .4
1

0 .8

0 .8

0.6
2
1.

0 .4

0.

0.6

4
0.

0.
6

0 .8

6
1.
4

0.4

1.

1 .2

0.
2

0 .8

0.

0 .4

0 .4

0.2

0 .2

-0.4
0 .4

-0.6
1

-0.8

1.
6

1.

0 .8
4

-1
-1

0 .4
0 .6

0 .6
0 .8

1 .2

-0.5

0.

0.
8

0 .6

0 .8

-0.2

0 .6

0.5

1 .2

4
1 . 1 .6 8
1.
1

O resultado utiizando um mapa de cores (mudando a textura para


shading interp):
>> pcolor(X,Y,Z)
>> shading interp

8. INTRODUO LINGUAGEM MATLAB

O objetivo deste Captulo apresentar como as rotinas de programao


em MATLAB podem ser desenvolvidas, descrevendo o conjunto de passos
necessrios para a criao de um arquivo de comandos (script file) em MATLAB.
So apresentados tambm os principais comandos normalmente utilizados para
direcionar o fluxo da informao ao longo do programa (comandos condicionais e
comandos de repetio).

8.1. Arquivos de comando


At este ponto, aplicamos todos as instrues ao MATLAB atravs da linha
de comando. No entanto, torna-se bvio que para resolver problemas maiores
esta forma de interface no pode ser utilizada, pois requer a introduo dos
comandos passo a passo e, caso seja necessrio repetir um procedimento, todos
os comandos devem ser novamente digitados.
Para permitir a realizao de tarefas mais complexas, o MATLAB possibilita
a criao de arquivos de comandos (script files). Arquivos de comandos so
arquivos texto onde armazenada uma seqncia qualquer de comandos, de
maneira que estes podem ser executados quando necessrio. Estes arquivos
correspondem s listagens de programa utilizadas pelas linguagens de
programao convencionais. Atravs de um arquivo de comandos, possvel
inclusive acionar outros arquivos de comandos.
Como opo default, os arquivos de comandos podem ser escritos em
um editor de texto embutido no prprio MATLAB, sendo reconhecidos pela
extenso .m (os arquivos de comando tambm so denominados m-files).
Para executar um arquivo de comandos, deve-se apenas digitar o nome do
arquivo na linha de comando. No entanto, necessrio antes da execuo do
arquivo, indicar ao MATLAB em que subdiretrio se encontra o arquivo. Para esta
tarefa, possvel utilizar os seguintes comandos:
path(path,'endereo_do_subdiretrio')

ou cd endereo_do_subdiretrio

ou, ento, indicar o subdiretrio de trabalho atravs da barra de ferramentas.

Abaixo est apresentado, passo a passo, o procedimento bsico para a


criao de um programa:
- Passo 1
Atravs da barra de menu: File > New > M-file abrir um arquivo no editor de
texto do MATLAB.
- Passo 2
Escrever neste arquivo os comandos do programa. Os comandos devem
ser escritos linha por linha, ou quando escritos na mesma linha separados por
vrgula.
- Passo 3
Gravar o arquivo de comandos com um nome apropriado.
- Passo 4
Antes de executar o programa pela primeira vez, informar ao MATLAB onde
seus arquivos de comandos estaro localizados (barra de ferramentas ou
comandos cd ou path).
- Passo 5
Passar para a linha de comando do MATLAB e digitar o nome do arquivo de
comandos (sem a extenso).

 Observao: Aps qualquer alterao realizada no programa, o arquivo deve


ser novamente salvo. Caso o programa no seja salvo, o MATLAB continuar
executando a verso anterior da rotina.

Para facilitar a leitura posterior da listagem de programao possvel


incluir comentrios atravs do caracter %. A direita deste caracter, o MATLAB
ignora o que estiver escrito.
Caso seja necesso interromper o programa durante a sua execuo, basta
apenas apertar simultaneamente as teclas [ Ctrl ] e [ C ].
Segue abaixo um exemplo de uma programa bem simples escrito em
linguagem MATLAB.

 Exemplo 8.1:
Criar um programa para efetuar a converso de temperaturas F C e K

% Programa para a converso de temperaturas

% Inicializao
clc , clear all

% Entrada de dados
Tf=input('Digite a temperatura em graus Fahrenheit');

% Clculos
Tc=(Tf-32)/9*5;
Tk=Tc+273.15;

% Resultado
disp('Temperatura em graus Celsius') , Tc
disp('Temperatura em Kelvin') , Tk

8.2. Comandos de fluxo


Uma vez que os comandos de fluxo (comandos condicionais e comandos
de repetio) so largamente utilizados em qualquer linguagem de programao,
sero apresentados aqui apenas uma breve descrio de sua sintaxe,
destacando-se as caractersticas especficas do seu emprego em um ambiente
MATLAB.

8.2.1. Comandos condicionais


Os operadores relacionais utilizados pelo MATLAB esto apresentados na
prxima tabela.

Operador

Significado

Operador

Significado

= =

igual

>=

maior ou igual

~=

diferente

<

menor

>

maior

<=

menor ou igual

Para expressar condies mais complexas so utilizados os seguintes


operadores lgicos:

Operador

Significado

&

and / e

or / ou

not / no

xor

exclusive or/exlcusivo ou

not / no

O principal comando condicional disponvel no MATLAB o comando if.


Este comando permite controlar o fluxo de um programa de acordo com o
resultado de uma ou mais expresses booleanas (condies verdadeiro ou falso).
A sintaxe deste comando em sua forma mais simples :
if <condio>
subrotina

executada

se

<condio> for verdadeira


end

onde condio uma expresso fornecendo um resultado do tipo verdadeiro (=1)


ou falso (=0).
Este comando tambm pode aparecer nesta forma:
if <condio>
subrotina

executada

se

<condio> for verdadeira


else

subrotina

executada

se

<condio> for falsa


end

Finalmente, o comando if pode aparecer junto com o comando elseif:


if <condio1>
subrotina

executada

se

<condio1> for verdadeira


elseif <condio2>
subrotina

executada

se

<condio2> for verdadeira


elseif <condio3>
subrotina

executada

se

<condio1> for verdadeira


...
else
subrotina
nenhuma

executada
das

se

condies

anteriores for verdadeira


end

 Exemplo 8.2:
Este um exemplo de uma rotina empregando o comando if.
if T>Tcrit
disp('Superaquecimento')
else
disp('Temperatura controlada')
end

Um outro comando condicional utilizado no MATLAB o comando switchcase,

que permite direcionar o fluxo de um programa de acordo com a

comparao do valor de uma expresso com diversas opes alternativas. Segue


abaixo um exemplo de sintaxe utilizando este comando:
switch <expr>

case teste1
subrotina executada se
teste1 for verificado
case {teste2,teste3,teste4}
subrotina executada se
algum

dos

testes

for

verdadeiro
otherwise
subrotina executada se
nenhum dos testes for
verdadeiro
end

O comando switch-case avalia se expr==teste1, ou expr==teste2, ou


expre==teste3,

etc., executando a rotina correspondente. Em caso contrrio, a

rotina indicada pelo termo otherwise ser executada.

 Exemplo 8.2:
Este um exemplo de uma rotina empregando o comando switch-case.
switch opcao
case 1
mesh(X,Y,Z)
case 2
surf(X,Y,Z)
otherwise
disp('Grfico no executado')
end

8.2.2. Comandos de repetio


O comando for permite que uma rotina do programa seja executado um
nmero pr-determinado de vezes. A sintaxe do comando :
for var = matriz
subrotina
end

A subrotina executada para cada coluna da matriz, com a varivel var


assumindo o valor da coluna correspondente a cada repetio. Na prtica, o
comando for usualmente utilizado com matriz na forma de um vetor do tipo
lim_inf:inc:lin_sup,

conforme est ilustrado no exemplo a seguir:

 Exemplo 8.3:
Vamos apresentar um exemplo de rotina para calcular a soma de duas
matrizes utilizando o comando for.
for i = 1:size(A,1)
for j = 1:size(A,2)
C(i,j) = A(i,j) + B(i,j);
end
end

 Observao: Apesar do exemplo anterior estar computacionalmente correto,


estruturas como esta devem ser evitadas. No Matlab, uma rotina baseada em
comandos for muito mais lenta que a rotina equivalente utilizando as
ferramentas de processamento matricial (e.g., operaes elemento a elemento).
Sempre que possvel deve se buscar a vetorizao dos programas
desenvolvidos.

O comando while um comando de repetio que permite que uma rotina


do programa seja executada at que uma certa condio seja alterada. A sintaxe
do comando :
while <condio>
subrotina
end

Enquanto

<condio>

seqencialmente.

 Exemplo 8.4:

for

verdadeira,

subrotina

ser

executada

Este um exemplo de uma rotina empregando o comando while.


while abs(x1-x0)>1e-4
x0 = x1;
x1 = g(x0);
end

8.3. Arquivos de funo


Funes (function files) so uma classe especial de arquivos de
comandos. As funes recebem um ou mais argumentos, e, a partir destes
argumentos, procedem a execuo de um conjunto de comandos, gerando na
sada um ou mais resultados. A grande vantagem das funes que, uma vez
definidas, estas podem ser empregadas quantas vezes forem necessrias em um
ou mais programas diferentes.
Com o objetivo de apresentar, na prtica, como deve ser montado um
arquivo de funo, considere a criao de uma funo para o clculo da presso
de um gs, a partir da temperatura e do volume, segundo a equao de estado
dos gases ideais.
A funo deve ser criada em um arquivo exclusivo para ela. Todo arquivo
de funo deve comear pelo comando function. Ao lado deste comando,
escreve-se a varivel interna de sada da funo (no nosso caso p, a presso)
igualado ao nome da funo (eq) seguido pelos argumentos de entrada (T,V;
respectivamente, temperatura e volume). Seguem-se ento o conjunto de
definies, operaes matemticas e comandos que permitiro a funo
determinar o resultado da sada. Finalmente, a funo deve ser gravada em um
arquivo necessariamente com o nome declarado inicialmente (no nosso caso,
eq.m).
O arquivo de funo proposto possui a seguinte estrutura:
function p=eq(T,V)
R=8314;
p=R*T/V;

possvel, agora, utilizar a funo de clculo da presso de um gs (eq)


na linha de comando, em um arquivo de comando qualquer ou at mesmo em
outra funo.
Por exemplo, o comando:
PT = eq(273.15,22.4);

calcula o valor da presso nas coordenadas consideradas de temperatura e


volume, armazenando o resultado na varivel PT.

8.3.1. Variveis locais e globais


Quando um arquivo de comandos convencional executado, as variveis
envolvidas so manipuladas ao longo do programa, e, no final, continuam
armazenadas no workspace. Tente, como exemplo, executar um arquivo de
comandos e depois digitar o comando who.
Funes, no entanto, operam de maneira diferente. As variveis definidas
no interior de uma funo (variveis locais) no so armazenadas aps a
execuo da funo, e tambm no interferem com as demais variveis externas.
Da mesma maneira, as operaes matemticas e os comandos utilizados no
interior da funo s reconhecem as variveis internas funo.
Caso seja necessrio, possvel permitir que uma funo compartilhe uma
ou mais variveis externas. Neste caso utiliza-se o comando global,
global A B C ...

onde A, B, C, etc. so os nomes das variveis a serem exportadas.


O comando global deve ser includo na funo e tambm no arquivo de
comandos ou funes onde as variveis globais aparecem.
Em teoria, possvel nunca usar o comando global, introduzindo todos os
valores numricos necessrios para o clculo da funo, ou atravs do
argumento, ou definindo-os no interior da prpria funo. Mas este pode no ser
o procedimento mais prtico sempre. Em um programa onde um grande nmero
de parmetros calculado atravs de um arquivo de comandos principal e depois
estes parmetros so utilizados em vrias funes diferentes, torna-se mais
prtico distribuir estes parmetros atravs do comando global.

 Exemplo 8.5:
A funo abaixo (arquivo eos.m) calcula a presso atravs da equao de
van der Waals, assim como as coordenadas reduzidas do gs.
function [P,Pr,Tr,Tc] = eos(T,V)
global Tc Pc R
a = 27*R^2*Tc^2/64/Pc; , b = R*Tc/8/Pc;
P = R*T/(V-b) - a/V^2;

Para gerar como sada o clculo de uma presso hipottica P2 a partir das
coordenadas T2 e V2, a funo deve ser chamada da seguinte forma:
>> P2 = eos(T2,V2)

Caso seja necessrio gerar todas as sada, a sintaxe da chamada seria:


>> [P2,Pr2,Tr2,Tc2] = eos(T2,V2)

Você também pode gostar