You are on page 1of 101

Curso

MATLAB BÁSICO

Comandos

Escola de Química/UFRJ

Novembro/2001
ÍNDICE

1. INTRODUÇÃO

1.1. Objetivo do texto

1.2. Conceito do software MATLAB

1.3. Notação utilizada

2. AMBIENTE DE TRABALHO

2.1. Janela de comandos

2.2. Acesso aos recursos de ajuda

3. NÚMEROS, EXPRESSÕES ARITMÉTICAS E FUNÇÕES

3.1. Apresentação de números

3.2. Expressões aritméticas

3.3. Operações com números complexos

3.4. Funções

4. VARIÁVEIS

4.1. Atribuição de variáveis

4.2. Entrada e saída de valores para as variáveis

4.3. Gerenciamento das variáveis

5. PROCESSAMENTO MATRICIAL

5.1. Criação de matrizes e vetores

5.2. Operações matriciais

5.2.1. Operadores de álgebra linear


5.2.2. Operadores elemento a elemento

5.3. Matrizes especiais

5.4. Manipulação de matrizes

5.4.1. Identificação de dimensões

5.4.2. Geração de vetores e matrizes

5.4.3. Extração de elementos

5.4.4. Alteração de matrizes e vetores

5.4.5. Composição de matrizes e vetores

5.4.6. Pesquisando matrizes e vetores

5.5. Matrizes de dimensão superior

5.6. Matrizes de caracteres

6. MATRIZES CELULARES E ESTRUTURAS

6.1. Conceito

6.2. Matrizes celulares

6.2.1. Criação de matrizes celulares

6.2.2. Extração envolvendo matrizes celulares

6.2.3. Alteração de células

6.2.4. Composição de matrizes celulares

6.3. Estruturas

6.3.1. Criação de estruturas

6.3.2. Extração envolvendo estruturas

6.3.3. Alteração de campos

7. GRÁFICOS

7.1. Gráficos 2-D


7.1.1. Traçando gráficos

7.1.2. Manipulando gráficos

7.1.3. Gerenciando janelas gráficas

7.2. Gráficos 2-D especiais

7.2.1. Histogramas

7.2.2. Gráficos de barra

7.2.3. Gráficos tipo torta

7.2.4. Gráficos com barras de erro

7.3. Gráficos 3-D

7.3.1. Traçando gráficos de curvas

7.3.2. Traçando gráficos de superfícies

7.3.3. Traçando gráficos de curvas de nível

8. INTRODUÇÃO À LINGUAGEM MATLAB

8.1. Arquivos de comando

8.2. Comandos de fluxo

8.2.1. Comandos condicionais

8.2.2. Comandos de repetição

8.3. Arquivos de função

8.3.1. Variáveis locais e globais


1. INTRODUÇÃO

1.1. Objetivo do texto

Este texto busca apresentar os fundamentos do desenvolvimento de


rotinas de programação através do software MATLAB. Após a leitura desta
apostila, o usuário deverá será capaz de escrever seus próprios programas em
linguagem MATLAB, envolvendo noções básicas de processamento numérico,
armazenamento de dados, apresentação de gráficos, etc. Os conceitos
envolvidos são acompanhados de grande número de exemplos, visando facilitar a
compreensão das informações apresentadas. O curso pode ser acompanhado
utilizando-se diretamente o MATLAB, uma vez que a interface gráfica com o
usuário é bastante amigável, com o aluno reproduzindo os exemplos da apostila,
ou até mesmo, criando os seus próprios exemplos.

Sempre que possível, ao longo da apostila, serão apresentadas


comparações entre as estruturas computacionais em MATLAB e as estruturas
computacionais das linguagens de programação convencionais, estabelecendo-
se semelhanças e diferenças.

Ao longo de cada seção da apostila, serão fornecidas no texto instruções


de como o leitor pode obter maiores informações sobre o tópico abordado através
das páginas de ajuda do MATLAB.

1.2. Conceito do software MATLAB

Com o desenvolvimento da indústria de informática, máquinas cada vez


mais poderosas passaram a estar disponíveis a um custo cada vez menor. Este
fenômeno alterou de forma marcante os rumos das ciências da engenharia,
permitindo amplo acesso à precisão e à velocidade no processamento de
informações.

Entre as ferramentas modernas para a resolução de problemas de


engenharia destaca-se o software MATLAB (MAtrix LABoratory), desenvolvido pela
empresa The Mathworks. Este ambiente de programação permite o
desenvolvimento de rotinas computacionais semelhantes às linguagens de
programação de alto nível usuais (FORTRAN, PASCAL, etc.), mas dispondo de
vários diferenciais fundamentais: poderosos recursos de processamento matricial
(álgebra matricial), disponibilidade de grande número de alternativas para a
apresentação gráfica de resultados (curvas no plano e no espaço, superfícies,
curvas de nível, histogramas, gráficos de barras, etc.), presença de vários
algoritmos de métodos numéricos já embutidos (solução de sistemas lineares,
determinação de raízes de um polinômio, interpolação, etc.) e existência de várias
bibliotecas computacionais especializadas que podem ser adquiridas em conjunto
com o MATLAB, denominadas “toolboxes” (otimização, identificação de sistemas,
matemática financeira, etc.). Apesar da sua grande versatilidade, o
desenvolvimento de programas através do MATLAB é uma tarefa relativamente
simples, graças a uma sintaxe mais enxuta, evitando, por exemplo, a
necessidade de declaração de variáveis, alocação de memória, etc.

1.3. Notação utilizada

Durante o texto, os comandos do MATLAB ou as informações relativas à


entrada e saída de dados diretamente na tela serão representados através de
uma fonte de texto diferenciada.

As alternativas de opções na barra de menu serão apresentadas em itálico,


sendo as subopções precedidas por >.

 Exemplo 1.1:

O comando clc apaga a tela da janela de comando

 Exemplo 1.2:
>> sin(pi/2)

ans =

 Exemplo 1.3:

Pode-se fechar o MATLAB através 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 vários componentes gráficos que permitem ao usuário
gerenciar rotinas computacionais, variáveis ou arquivos desenvolvidos no
ambiente MATLAB.

Nesta tela estão situados os componentes convencionais de todo aplicativo


“for Windows”: barra de título, barra de menu e barra de ferramentas. Na primeira
vez que o MATLAB é acionado a área principal de trabalho é dominada por três
janelas: “Command Window”, “Launch Pad” e “Command History”. Estas janelas
podem ser aumentadas, diminuídas, reorganizadas ou fechadas de acordo com
as necessidades do usuário.

A janela de comandos, “Command Window”, é a principal interface


utilizada para o usuário acionar os comandos ou rotinas desenvolvidas em
MATLAB. Nesta janela são apresentadas as mensagens de erros, constituindo-se
também o dispositivo padrão para a saída dos resultados gerados. A janela
“Command History” contém um histórico 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 usuário também pode abrir, através da alternativa View


na barra de menus, a janela “Workspace”, que fornece um quadro geral de todas
as variáveis presentes na memória do MATLAB, e a janela “Current Directory”, que
indica os arquivos existentes no diretório de trabalho.

 Observação: Pode ser que um usuário anterior tenha alterado a disposição das
janelas e alguns dos elementos citados aqui não estejam presentes na sua tela.
No entanto, caso seja necessário, todos os componentes apresentados podem
ser visualizados através da alternativa View na barra de menu.

2.1. Janela de comandos


Todas as operações desenvolvidas ao longo deste curso serão
concentradas na janela de comandos, desta forma, caso o usuário deseje, pode
fechar todas as demais janelas para facilitar a visualização dos resultados.

Após acionar o MATLAB, estará presente na janela de comandos, o símbolo


>> e ao lado o cursor piscando. A linha onde aparece o símbolo apresentado
corresponde à linha de comandos, onde o usuário digita as instruções para o
MATLAB executar as tarefas desejadas.

Após a digitação de cada instrução na linha de comando, o usuário 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, então, aparecerá na tela:


ans =

1.414

É possível também executar vários comandos em seqüência na mesma


linha, desde que estejam separados por vírgula ou ponto-e-vírgula.

 Exemplo 2.2:
>> log10(100) , sqrt(144)

ans =

ans =

12

Caso seja necessário, uma instrução no Matlab pode ser separada em


várias linhas, utilizando-se a reticências, conforme ilustra o próximo exemplo:
 Exemplo 2.3:
>> log10(100) ...

, sqrt(144)

ans =

ans =

12

 Observação: Um recurso muito útil na utilização 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
então, 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, é possível


acionar os recursos de ajuda através da barra de menu, na opção Help >
MATLAB Help.

Quando esta alternativa é selecionada, surge uma janela, com várias


ferramentas de ajuda no lado esquerdo (Contents, Index, Search e Favorites) e
um quadro para apresentação de informações no lado direito. Através das
ferramentas de ajuda é possível: navegar através dos vários tópicos de ajuda
disponível (Contents), percorrer e pesquisar uma lista em ordem alfabética com a
descrição de todos os comandos disponíveis (Index), pesquisar por palavras-
chaves (Search) e acionar a documentação disponível pela Mathworks na Internet
e criar uma lista pessoal de tópicos de ajuda (Favorites).

Uma outra forma mais rápida e direta para se conseguir a descrição de um


comando ou função através do MATLAB, consiste em digitar na linha de comando:
help comando

onde comando se refere a dúvida 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 também 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. NÚMEROS, EXPRESSÕES ARITMÉTICAS E FUNÇÕES

3.1. Apresentação de números

A opção “default” do MATLAB na apresentação de resultados numéricos


representa os números reais com quatro casas decimais após a vírgula (caso o
número seja inteiro, as casa decimais não são apresentadas). Caso os algoritmos
significativos de um número estejam fora desta faixa, este será apresentado em
notação científica. Os exemplos abaixo ilustram a forma de apresentação
numérica do MATLAB, onde a variável pré-definida pi corresponde ao número π .

 Exemplo 3.1:
>> pi

ans =

3.1416

>> pi/pi

ans=

>> pi/10000

ans=

3.1416e-004

O MATLAB possui também vários formatos alternativos diferentes para a


apresentação de valores numéricos na linha de comando. Na tabela seguinte
estes resultados são apresentados, ilustrando-se como a expressão 10π aparece
na tela de acordo com o formato escolhido.

Formatos numéricos
Formato Expressão 10*pi Descrição
format 31.4159 “default”, igual a format short
format short 31.4159 4 casas após a vírgula
format long 31.41592653589793 14 casas após a vírgula
format short e 3.1416e+001 notação científica com 4 casas
format long e 3.141592653589793e+001 notação científica com 14 casas
format short g 31.146 5 casas decimais no total
format long g 31.4159265358979 15 casas decimais no total
format hex 403f6a7a2955385e hexadecimal
format bank 31.42 2 casas decimais após a vírgula
Format + + + , - ou 0
format rat 3550/113 aproximação racional

Para alterar o formato utilizado, deve-se acionar as seguintes opções na


barra de menu: > File > Preferences. Uma outra alternativa é digitar o comando
format na própria linha de comando, como ilustra o próximo exemplo.

 Exemplo 3.2:

No formato “default”
>> pi

ans =

3.1416

Alternado-se o formato, então:


>> format long

>> pi

ans =

3.14159265358979

 Observação: Independente do formato utilizado para apresentação dos


resultados, as operações numéricas são efetuadas com a maior precisão possível
(aritmética de precisão dupla).

3.2. Expressões aritméticas

Através da linha de comando do MATLAB, é possível realizar as operações


aritméticas elementares, de forma semelhante a uma calculadora comercial:

Operadores matemáticos
Operação Símbolo
Soma +
Subtração -
Multiplicação *
Divisão /
Potenciação ^

 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 determinação de 2 elevado a 10 dividido por 5, pode ser calculada por:


>> 2^10/5

Resultando em:
ans =

204.8

 Observação: O separador decimal no MATLAB é necessariamente o ponto, não


sendo possível alterar esta configuração através do Windows, como em alguns
aplicativos neste ambiente (por exemplo, Excel).

 Observação: Espaços entre os operadores e os termos de uma expressão


aritmética são ignorados. Ou seja,

>> 203/430+50*60 é equivalente a >> 230 / 130 + 50 * 60


 Observação: Como pôde ser observado nos exemplos anteriores, as
operações realizadas na linha de comando são automaticamente armazenadas
em uma variável “default” ans.

Os cálculos aritméticos no MATLAB são realizados de acordo com a ordem


normalmente utilizada nas demais linguagens de programação:

Ordenação:

1) Operações dentro dos parênteses (interno  externo);

2) Potenciação;

3) Multiplicação e divisão;

4) Soma e subtração.

 Observação: Operadores de mesma hierarquia são efetuados da esquerda


para a direita.

 Exemplo 3.5:
( 245/154 )
 (9,8 − 0,8) 
Determinar o valor da expressão:  − ( 4 − 50) 
 
>> ((9.8 - 0.8)/-(4-50))^(245/154)

ans =
0.0746

 Observação: Para construir as operações aritméticas devem ser utilizados


apenas parênteses. No MATLAB, os colchetes servem fundamentalmente para o
cálculo matricial como será visto posteriormente.

3.3. Operações com números complexos


Uma das características que diferenciam o MATLAB é a facilidade para
operar números complexos. No MATLAB, as variáveis i e j podem ser utilizadas
para representar o número imaginário.

 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

 Observação: Cada vez que o MATLAB é iniciado, as variáveis i e j assumem


como valor “default” o número imaginário. No entanto, caso o usuário deseje,
estas variáveis podem ser utilizadas para a atribuição de qualquer outro valor
(i.e., não são variáveis protegidas).

3.4. Funções

O MATLAB possui um grande número de funções matemáticas pré-


definidas. Sua utilização é 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

 Observação: Lembre-se que a variável pi é uma variável já pré-definida no


MATLAB com o valor de π .

 Observação: As funções trigonométricas no MATLAB devem receber


argumentos em radianos.

Nas tabelas a seguir, são apresentadas algumas das funções disponíveis


para serem utilizadas na programação em MATLAB:

Funções trigonométricas
Função Descrição
sin(x) Seno
cos(x) co-seno
tan(x) Tangente
asin(x) arco-seno
acos(x) arco-co-seno
atan(x) arco-tangente
sinh(x) seno hiperbólico
cosh(x) co-seno hiperbólico
tanh(x) tangente hiperbólica
asinh(x) arco-seno hiperbólico
acosh(x) arco-co-seno hiperbólico
atanh(x) arco-tangente hiperbólico
Funções exponenciais e logarítmicas
Função Descrição
exp(x) exponencial
log(x) logaritmo neperiano
log10(x) logaritmo de base 10
log2(x) logarimto de base 2
sqrt(x) raiz quadrada

Funções complexas
Função Descrição
abs(x) valor absoluto
angle(x) angulo de fase em radianos
conj(x) conjugado complexo
real(x) parte real
imag(x) parte imaginária

Funções de truncamento
Função Descrição
fix(x) arredondamento na direção do 0
floor(x) arredondamento na direção de − ∞
feil(x) arredondamento na direção de + ∞
round(x) arredondamento na direção do inteiro mais próximo
rem(x,y) resto da divisão de x por y
sign(x) sinal de x (-1, 1 ou 0)

Funções relativas à teoria dos números


Função Descrição
factor(x) decomposição em fatores primos
isprime(x) verificação de número primo (= 1, se primo)
primes(x) lista de números primos menores que x
gcd(x,y) MDC entre x e y
lcm(x,y) MMC entre x e y

Funções matemáticas especiais


Função Descrição
besselj(x,y) função de Bessel do primeiro tipo
bessely(x,y) função de Bessel do segundo tipo
besselh(x,y) função de Bessel do terceiro tipo
besseli(x,y) função modificada de Bessel do primeiro tipo
besselk(x,y) função modificada de Bessel do segundo tipo
beta(x,y) função Beta
erf(x) função erro
erfc(x) função erro complementar
Gamma(x) função gama

 Observação: Uma lista ampliada das funções disponíveis em MATLAB pode


ser encontrada através dos comandos de ajuda help elfun e help specfun.

 Observação: Em uma expressão aritmética, as funções são calculadas em


primeiro lugar.
4. VARIÁVEIS

4.1. Atribuição de variáveis

A sintaxe para estabelecer um certo valor para uma variável, através do


comando de atribuição = é:
variável = expressão

onde a o termo expressão acima corresponde a números, variáveis, expressões


aritméticas, etc.

O nome de uma variável no MATLAB pode ser representado por qualquer


seqüência de letras e números, começando por uma letra (até 31 caracteres são
reconhecidos), o símbolo _ também é permitido no nome, mas os símbolos de
pontuação ou acentos gráficos não ( ~ ` ‘ “ ; , . ). O MATLAB diferencia letras
maiúsculas e minúsculas, isto é, A e a são variáveis diferentes.

 Exemplo 4.1:
>> A1=3

A1 =

>> Bt=3^3
Bt =
27

>> expr=log(A1)/Bt
expr =
0.0407

 Observação: Os comandos do MATLAB devem ser necessariamente escritos


em letras minúsculas.

Sempre que um comando de atribuição é executado, o MATLAB apresenta


na tela o resultado desta atribuição. No entanto, caso não seja necessário que a
atribuição apareça na tela, como, por exemplo, em cálculos intermediários ao
longo de um programa, basta apenas que seja colocado o símbolo ; 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 atribuição é realizada, mas nada aparece na tela.

 Observação: Os valores das variáveis geradas no MATLAB ficam armazenadas


no que se convencionou denominar “MATLAB workspace”.

 Observação: Quando o valor de uma variável é alterado, os valores das


demais variáveis que foram definidas anteriormente a partir desta variável original
não são recalculados (ao contrário dos aplicativos baseados em planilhas de
cálculo). A atribuição de uma variável a partir de outras variáveis leva em conta o
valor das variáveis apenas no momento da atribuição.

4.2. Entrada e saída de valores para as variáveis

Além dos comandos de atribuição, a entrada de dados para as variáveis de


um certo problema pode ser também realizada através do comando input:
variável=input('mensagem');

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


espera-se o usuário digitar um dado de entrada, e, depois, o valor digitado é
armazenado em variável. Se o usuário digitar uma expressão aritmética, esta
será calculada e o resultado também será armazenado em variável. Este
comando é útil para preparar uma subrotina de entrada de dados que permita que
cada vez que o programa seja acionado, o usuário possa alimentar os valores
desejados para as variáveis, sem precisar alterar nenhum comando. Um exemplo
da utilização 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 variável na tela, basta apenas digitar o nome
da variável, e depois teclar enter. Outra opção é utilizar o comando disp:
disp(variável)

Este comando também apresentará na tela, o valor contido em variável. A


diferença entre estas duas formas de apresentação de resultados pode ser
ilustrada através do próximo exemplo:

 Exemplo 4.4:
>> P=30

P =

30

>> disp(P)

30

O comando disp também pode ser utilizado para a apresentação de


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

Observe que a mensagem está redigida entre os símbolos: ''.

 Exemplo 4.5:
>> P=30;

>> disp('O valor da pressão é (bar) : ') , disp(P)


O valor da pressão é (bar) :

30

4.3. Gerenciamento das variáveis

Através do comando who é possível apresentar na tela a lista de todas as


variáveis 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 R T V

Um outro comando semelhante é o comando whos que apresenta a lista


das variáveis, suas dimensões 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
P 1x1 8 double array

R 1x1 8 double array

T 1x1 8 double array

V 1x1 8 double array

Grand total is 4 elements using 32 bytes

O comando clear permite que uma ou mais variáveis sejam apagadas da


memória do MATLAB:
clear lista_de_variáveis

onde lista_de_variáveis corresponde às variáveis que devem ser apagadas.

É possível também apagar todas as variáveis 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 R T V
>> clear P R

>> who
Your variables are:

T V

Observe que P e R sumiram da lista de variáveis presentes.


>> clear all

>> who
Agora nenhuma variável aparece, pois foram todas apagadas.

 Observação: No desenvolvimento de um código computacional, muitas vezes


torna-se recomendável aplicar o comando clear all no início da rotina para
garantir que qualquer resultado proveniente de um processamento anterior seja
eliminado da memória, 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

A capacidade de processamento matricial é uma característica


fundamental do MATLAB, permitindo definir, operar e manipular matrizes e vetores
com facilidade.

5.1. Criação de matrizes e vetores

A entrada de uma variável na forma de uma matriz no MATLAB pode ser


realizada de maneira semelhante que as linguagens de programação
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 atribuição: A =  
 − 1 5

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

>> A

A =

1 2

-1 5

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 atribuição: A =  
 − 1 5
>> A=[ 1 2 ; -1 5 ];

>> A

A =

1 2

-1 5

Como pôde ser observado no exemplo, os colchetes indicam a existência de uma


matriz, os elementos ao longo de uma linha são separados por espaços
(poderiam ser vírgulas) e a passagem para uma próxima linha é indicada por
ponto-e-vírgula (poderia ser Enter).

Observe no próximo exemplo, a utilização desta forma de sintaxe para a


entrada de dois vetores:

 Exemplo 5.3:

2 
Efetuar as atribuição ao lado: c =   e d = [ π π 2 π3 ]
0 

>> c=[ 2 ; 0 ]

c =

>> d=[ pi , pi^2 , pi^3 ]

d =

3.1416 9.8696 31.0063

5.2. Operações matriciais

5.2.1. Operadores de álgebra linear

É possível realizar operações matriciais utilizando o MATLAB com a mesma


facilidade com que as linguagens tradicionais operam escalares. Os operadores
disponíveis para os cálculos envolvendo matrizes são aqueles tradicionalmente
utilizados na álgebra linear.
Sejam duas matrizes A e B que são empregadas para gerar uma matriz C.
A tabela a seguir exemplifica a utilização dos operadores matriciais:

Operadores matriciais

Operação Sintaxe Descrição


Soma C = A + B Cij = Aij + Bij

Subtração C = A - B Cij = Aij − Bij

Cij = ∑ Ail Blj


Multiplicação C = A * B

Transposição C = A’ Cij = A ji

 Exemplo 5.4:

Sejam as seguintes matrizes e vetores:

 2 
1 4 2 − 2  2   
A= , B= , c=  e d= 3 
0 5  3 − 1  3 − 4

Efetuar as seguintes operações:

a) A ⋅ B b) A + B c) A ⋅ B ⋅ c d) d T e) c − d

Inicialmente, vamos aplicar todas as atribuições:


>> A=[ 1 , 4 ; 0 , 5 ];

>> B=[ 2 -2

3 -1 ];

>> c=[ 2 ; 3 ];

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

Observe que as duas formas de atribuição utilizadas para as matrizes A e


B são equivalentes e igualmente válidas.

Podemos agora realizar as operações desejadas:


>> A*B

ans =

14 -6
15 -5

>> A+2*B

ans =

3 2

3 4

>> 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 dimensões dos vetores c e d não são compatíveis.

 Observação: As operações de soma, subtração, multiplicação e divisão entre


uma matriz e um escalar correspondem à operação do escalar em todos os
elementos da matriz.

 Exemplo 5.5:
>> 2 + [ 1 2 4 -5 ]

ans =

3 4 6 -3

O MATLAB possui também várias funções embutidas para o processamento


matricial. Na tabela abaixo, são apresentadas algumas destas funções:

Funções para processamento matricial

Função Descrição
inv(X) inversão de matrizes
det(X) cálculo do determinante
eig(X) determinação dos autovalores
rank(X) cálculo 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 traço e o posto da


matriz.

Inicialmente, entramos com a matriz A:


>> A=[ 1 2 ; 3 4 ]

A =

1 2

3 4

A inversa da matriz é calculada por


>> inv(A)

ans =

-2.0000 1.0000

1.5000 -0.5000

Observe que, de acordo com a definição de inversa:


>> A*inv(A)

ans =

1.0000 0

0.0000 1.0000

O determinante da matriz pode ser calculado por


>> det(A)

ans =

-2

Através da fórmula de cálculo 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 são:


» aval=eig(A)

aval =

-0.3723

5.3723

Novamente, é interessante verificar o resultado obtido através da definição:


» det(A-aval(1)*[ 1 0 ; 0 1 ])

ans =

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

ans =

Finalmente, o posto da matriz pode ser calculado por:


» rank(A)

ans =

Tal como era esperado pois o determinante é não nulo.

 Observação: Uma lista ampliada das funções para processamento matricial


disponíveis em MATLAB pode ser encontrada através 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 operações elemento a elemento, representadas na próxima tabela, onde A e B
são duas matrizes de mesma dimensão:

Operações elemento a elemento


Operação Sintaxe Descrição
Soma C = A + B Cij = Aij + Bij

Subtração C = A - B Cij = Aij − Bij

Multiplicação C = A .* B Cij = Aij Bij


C = A .^ B
Potenciação Cij = Aij Bij

 Exemplo 5.7:

Sejam as seguintes matrizes e vetores:

 2 
1 4 2 − 2  2   
A= , B= , c=  e d= 3 
0 5  3 − 1  3 − 4

Calcular as seguintes operações elemento a elemento:

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

Inicialmente, vamos aplicar todas as atribuições:


>> A=[ 1 4 ; 0 5 ];

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

>> c=[ 2 ; 3 ];

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

Podemos agora apresentar vários exemplos de aplicação das operações


elemento a elemento:
>> A.*A

ans =

1 16

0 25

>> A./B

ans =

0.5000 -2.0000

0 -5.0000

>>2.^c
ans =

>>d.^10

ans =

1024

59049

1048576

Caso uma função matemática 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

 Observação: Para gerar resultados equivalentes às diversas rotinas de


processamento matricial apresentadas, através de uma linguagem de
programação convencional, seria preciso preparar uma biblioteca de rotinas
específica para estas operações, incluindo laços envolvendo um ou mais
comandos de repetição encadeadas. Esta análise demonstra a grande
simplificação 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 série


de matrizes especiais que podem ser úteis no desenvolvimento de rotinas de
programação.
O comando ones(I,J) gera uma matriz de dimensão IxJ contendo 1 em
todas as posições. Alternativamente, o comando ones(I) gera uma matriz
quadrada de dimensão(I,I).

 Exemplo 5.9:
>> ones(2,3) , ones(2)

ans =

1 1 1

1 1 1

ans =

1 1

1 1

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 0 0

0 0 0

0 0 0

ans =

0 0 0 0 0 0 0 0 0 0

O comando eye gera matrizes identidade de acordo com as dimensões


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

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

ans =
1 0

0 1

ans =

1 0 0

0 1 0

Para gerar uma matriz contendo elementos selecionados de forma


randômica (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 números aleatórios
com distribuição normal padronizada (média zero e variância unitária).

 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 0 0

0 2 0

0 0 3

 Observação: A descrição de todas as matrizes especiais disponíveis no


MATLAB pode ser encontrada através do comando help elmat.
5.4. Manipulação de matrizes

Através de recursos de sintaxe especiais disponíveis no MATLAB, é possível


manipular matrizes e vetores de várias formas facilitando a sua utilização nas
rotinas de programação.

5.4.1. Identificação de dimensões

As dimensões de uma matriz podem ser determinadas através do


comando:
size(A)

onde é gerado um vetor cuja a primeira componente é o número de linhas e a


segunda é o número de colunas de A. Este comando também pode aparecer nas
formas:

size(A,1) ou size(A,2)

A primeira indica apenas o número de linhas e a segunda indica apenas o


número de colunas da matriz.

O seguinte comando indica o número de componentes de um vetor (não


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 2

3 4

4 0

v =

2 3 1 4 0 0

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

ans =

3 2

ans =
3

ans =

>> length(v)

ans =

5.4.2. Geração de vetores e matrizes

A construção de certos vetores, cujos elementos obedecem a um padrão


crescente, pode ser realizada de forma rápida, utilizando-se uma sintaxe da
forma:
vetor = lim_1 : lim_2;

Este comando gera um vetor linha cujos elementos formam uma seqüência de
números inteiros entre lim_1 e lim_2.

 Exemplo 5.15:
>> v = 2:10

v =

2 3 4 5 6 7 8 9 10

Uma variação desta sintaxe permite que os elementos estejam distribuídos


ao longo da seqüência de acordo com um incremento não unitário:
vetor = lim_1 : inc : lim_2;

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


na forma de uma seqüência que começa em lim_1 e se estende até lim_2
através de um incremento inc.

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

v1 =

2 4 6 8 10
v2 =

4.0000 3.5000 3.0000

Através da utilização deste recurso também é possível montar matrizes:

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

M =

1 2 3 4

4 3 2 1

Uma outra forma de criar vetores com padrão crescente, envolve a


utilização 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 execução de um programa pode ser necessário que a dimensão


de um vetor fornecido pelo usuário 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 3

2 6

3 7

5.4.3. Extração de elementos

De maneira semelhante que as linguagens de programação convencionais,


é possível extrair um elemento de uma matriz bastando apenas indicar os seus
índices.

 Exemplo 5.20:

O comando abaixo soma o elemento presente na posição (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 =

Além da extração de elementos na forma tradicional, o MATLAB também é


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

 Exemplo 5.21:

Este exemplo ilustra a apresentação do conceito aplicado a um vetor:


>> v = [ 1 4 7 4 7 8 9 5 8 5 4 ]

v =

1 4 7 4 7 8 9 5 8 5 4

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

u =
1 4 7 4

w =

7 8 9 5 8 5 4

z =

4 1 7 4

No exemplo acima foram gerados três vetores, o vetor u contém da


primeira à quarta componente do vetor v, o vetor w contém da quinta até a última
componente do vetor v, o vetor v contém 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 4 7

4 7 8

9 5 8

5 4 0

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

v1 =

1 4 7

v2 =

4 7

M3 =

4 7

7 8

O vetor v1 corresponde à primeira linha da matriz M. Neste caso, o símbolo


: indica todo os índices de uma certa dimensão. 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. Alteração de matrizes e vetores

As estruturas apresentadas para extração de elementos de uma matriz


também 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 5

2 -3 -3

9 0 8

2 4 3

4 5 6

Vamos agora realizar uma série de alterações na matriz M0. Inicialmente,


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

M0 =

2 3 5

2 -3 -3

9 0 4

2 4 3

4 5 6

Podemos também substituir a primeira linha da matriz pelo vetor [ 1 2 3 ]:


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

M0 =

1 2 3

2 -3 -3

9 0 4

2 4 3

4 5 6
As duas últimas linhas da matriz serão agora eliminadas:
>> M0(4:5,:) = []

M0 =

1 2 3

2 -3 -3

9 0 4

Finalmente, vamos incluir um elemento unitário na posição (1,4):


>> M0(1,4) = 1

M0 =

1 2 3 1

2 -3 -3 0

9 0 4 0

Note que como a matriz era dimensão 3x3, ao atribuir na posição (1,4) um
elemento, o próprio MATLAB se encarrega de preencher as demais posições
coerentes com valores nulos.

O MATLAB também dispõe de funções especiais para a alteração de


matrizes e vetores de acordo com certos padrões.

A função:
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 3 5

9 9 8

9 1 1

z=diag(M)

z =
2

A função:
triu(A)

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


função:
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 3 5

9 9 8

9 1 1

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

M_u =

2 3 5

0 9 8

0 0 1

M_u =

2 0 0

9 9 0

9 1 1

 Observação: A lista de funções especializadas para manipulação de matrizes


pode ser encontrada através do comando help elmat.

5.4.5. Composição de matrizes e vetores


É possível criar novas matrizes e vetores através da justaposição 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 próximos exemplos permitem esclarecer esta
idéia:

 Exemplo 5.26:

Sejam as matrizes representadas abaixo:


>> M1 = [ 1 4 7 ; 4 7 8 ] , M2 = [ 2 3 1 ; 3 7 3 ]

M1 =

1 4 7

4 7 8

M2 =

2 3 1

3 7 3

A partir da justaposição de matrizes, é possível gerar várias estruturas


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

Mat1 =

1 4 7 2 3 1

4 7 8 3 7 3

Mat2 =

1 4 7

4 7 8

2 3 1

3 7 3

Mat3 =

1 4 7

4 7 8

2 3 1
A matriz Mat1 foi gerada pela justaposição da matriz M2 à direita da matriz
M1, uma vez que foi utilizado como separador entre os dois blocos um caracter de
espaço que significa ao longo da mesma linha. A matriz Mat2 foi criada pela
justaposição da matriz M2 embaixo da matriz M1, uma vez que o separador entre
os blocos utilizado foi o ponto-e-vírgula, 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 4 2 7 1 4 2 7

Mat2 =

1 1

4 4

2 2

7 7

Mat3 =

1 4 2 7 1

1 4 2 7 4

A criação de matrizes por justaposição também pode ser realizada através


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 4 2

1 9 0

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

M_M_M =

1 4 2 1 4 2 1 4 2

1 9 0 1 9 0 1 9 0

Observe que a matriz M foi replicada uma vez ao longo da linha e três 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 dimensão ao longo da qual os blocos A e B serão justapostos.

 Exemplo 5.29:

Refazer o Exemplo 5.25 utilizando o comando cat:

Inicialmente, construímos as matriz M1 e M2.


>> M1 = [ 1 4 7 ; 4 7 8 ] , M2 = [ 2 3 1 ; 3 7 3 ]

M1 =

1 4 7

4 7 8

M2 =

2 3 1

3 7 3

A partir desta matriz, construímos as estruturas desejadas:


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

Mat1 =

1 4 7 2 3 1

4 7 8 3 7 3

Mat2 =
1 4 7

4 7 8

2 3 1

3 7 3

Mat3 =

1 4 7

4 7 8

2 3 1

 Observação: Em qualquer caso de composição de matrizes e vetores, a


coerência entre as dimensões da matrizes a serem combinadas deve ser
garantida, em caso contrário, o procedimento levará a uma mensagem de erro.

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

u =

-1 3 4 0

v =

3 4 2

>> [ u ; v ]

??? All rows in the bracketed expression must have the same

number of columns.

5.4.6. Pesquisando matrizes e vetores

Através do comando find, disponível no MATLAB, é possível identificar os


elementos de uma matriz ou de um vetor que atendem a uma certa condição.
Veja o exemplo a seguir:

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

v =

1 4 2 7 5 2 3 5 3
>> u=find(v>3)

u =

2 4 5 8

Através do comando find, foi gerado um vetor linha que indica os índices
dos elementos do vetor v para os quais a expressão relacional, presente no
argumento, é verdadeira (ou seja, = 1). Caso seja necessário extrair os elementos
que atendem a condição proposta, basta apenas utilizar os recursos especiais de
extração de elementos já apresentados:
>> v_maior_3 = v(u)

v_maior_3 =

4 7 5 5

O comando find também 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 4 2

7 5 2

3 5 3

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

lin =

col =

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 condição
estabelecida. Ou seja, os índices dos elementos que atendem a condição são
(lin(1) , col(1)) , ((lin(2) , col(2)) , ((lin(3) , col(3)), etc. Uma visão
geral destas posições pode ser observada utilizando-se o recurso de justaposição
apresentado na subseção anterior:
>> [ lin col ]

ans =

2 1

1 2

2 2

3 2

 Observação: Na utilização 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 à saída fornecida por uma função
através de dois componentes, não indicando a justaposição dos vetores lin e
col.

Dois outros comandos de pesquisa bastante úteis são os comandos min e


max. As sintaxes mais importantes para estas funções são:

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 (saída y), além do seu


índice (saída i).

min(x,y) ou max(x,y)

gera uma matriz, com a mesma dimensão das matrizes x e y, composta pelos
menores/maiores elementos nas duas matrizes ao longo das posições
correspondentes.

min(x,[],dim) ou max(x,[],dim)
quando x é uma matriz determina os menores/maiores ao longo da dimensão
dim.

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

v =

1 4 2 4 5 3 6

M =

2 4 0

7 4 2

4 9 3

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

ans =

1 6

>> min(M,[],1)

ans =

2 4 0

>> max(M(:,1),M(:,2))

ans =

5.5. Matrizes de dimensão superior

O MATLAB também é capaz de processar matrizes de dimensão maior que


2. Para facilitar a visualização, vamos apresentar aqui o desenvolvimento dos
conceitos apresentados para matrizes de três dimensões, no entanto, caso seja
necessário, todos os exemplos são plenamente aplicáveis para outras
dimensões. No caso de matrizes de três dimensões, a terceira dimensão será
denominada “página”.
A entrada de dados de uma matriz de três dimensões pode ser feita
compondo matrizes de duas dimensões ao longo do índice das páginas. Veja o
exemplo abaixo:

 Exemplo 5.34:

Vamos entrar com uma matriz de dimensão 2x3x2. Montamos a matriz


através das introdução das duas páginas:
>> 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 4 1

3 5 6

M(:,:,2) =

3 1 8

2 0 9

As técnicas apresentadas anteriormente para a extração de elementos e


alteração de matrizes e vetores também podem ser utilizadas.

 Exemplo 5.35:

Seja uma matriz M de dimensão 2x2x2:


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

M(:,:,1) =

0 4

3 3

M(:,:,2) =

9 1

2 1

Vamos apresentar agora, alguns exemplos de manipulação:


>> M(1,:,:)

ans(:,:,1) =

0 4

ans(:,:,2) =

9 1

>> M(:,1,:)

ans(:,:,1) =

ans(:,:,2) =

>> M(:,:,1)

ans =

0 4

3 3

As funções ones, zeros, eye, rand, randn para criação de matrizes


especiais e as funções para determinação da dimensão de matrizes também
podem ser aplicadas para matrizes de dimensão superior. Os comandos repmat e
cat também podem ser aplicados para composição de matrizes de dimensão
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 2 3

4 5 6

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

Mat1(:,:,1) =

1 2 3
4 5 6

Mat1(:,:,2) =

1 2 3

4 5 6

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

Mat2(:,:,1) =

1 2 3

4 5 6

Mat2(:,:,2) =

1 2 3

4 5 6

Note que ambas as operações forneceram o mesmo resultado.

Em relação às operações matemáticas para matrizes de dimensão superior


estão definidas as operações envolvendo escalares e as operações elemento a
elemento. Embora os operadores de álgebra linear não estejam definidos para
estas matrizes, estes podem ser aplicados para as “páginas” bidimensionais.

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

M(:,:,1) =

0 4

3 3

M(:,:,2) =

9 1

2 1

>> M+2

ans(:,:,1) =

2 6

5 5

ans(:,:,2) =

11 3
4 3

>> 2.^M

ans(:,:,1) =

1 16

8 8

ans(:,:,2) =

512 2

4 2

>> M(:,:,1)*[ 1 ; 2 ]

ans =

 Observação: Uma vez que a utilização de matrizes multidimensionais aumenta


a complexidade de processamento computacional e de endereçamento dos
dados, recomenda-se que este tipo de variável seja utilizado apenas quando
efetivamente trouxer um ganho na organização das informações do problema
abordado.

5.6. Matrizes de caracteres

Apesar do Matlab ser essencialmente um software para processamento


numérico, também é possível manipular textos (“strings”). Toda “string” ao ser
introduzida em uma variável no Matlab deve estar limitada por símbolos ''.
Quando uma “string” é armazenada em uma variável, esta variável 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 =
1 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 também 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

 Observação: Uma lista completa dos comandos de manipulação de “strings”


pode ser encontrada em help strfun.
6. MATRIZES CELULARES E ESTRUTURAS

6.1. Conceito

Matrizes celulares (“cell arrays”) e estruturas (“structures”) são classes de


dados disponíveis nas versões mais recentes do MATLAB que permitem agrupar
elementos de diferentes classes em um mesmo grupo. Desta forma, o
processamento de informação pode ser facilitado, pois um conjunto variado de
dados relacionados pode ser agrupado sob uma única variável. Como o objetivo
destas classes de dados é apenas ordenar a informação disponível, matrizes
celulares e estruturas não operam matematicamente (mas o conteúdo
armazenado sim).

6.2. Matrizes celulares

Matrizes celulares são matrizes compostas por células, onde cada célula
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 célula, uma
matriz convencional em outra e um vetor em mais outra. Matrizes celulares
podem ser construídas com qualquer dimensão, embora sejam usualmente
utilizadas na forma de um vetor.

6.2.1. Criação de matrizes celulares

Uma matriz celular pode ser construída através da atribuição de cada


célula individual. As células de uma matriz são representadas através de chaves
{ } e indexadas através 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 dimensão 2x2 e é formada por uma matriz
identidade 2x2, por um escalar, por um vetor linha com duas componentes e por
uma matriz de dimensão 0x0. Na representação de uma matriz celular, as células
contendo matrizes são apresentadas através da dimensão da matriz que está
armazenada.

Uma forma alternativa de alimentar dados em uma matriz celular


corresponde a indicar diretamente o conteúdo de cada célula. Neste caso, a
identificação da posição do conteúdo de uma célula é feita através 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 diferença é sutil mas deve ser observada, a indexação de uma célula é


realizada através de ( ) e a indexação do conteúdo da célula na matriz celular é
realizada através de { }. O exemplo abaixo permite esclarecer esta idéia.

 Exemplo 6.3:
Inicialmente vamos criar uma matriz celular 1x2, contendo duas matrizes
de zeros de diferentes dimensões
>> M3{1,1} = zeros(2);

>> M3{1,2} = zeros(3);

>> M3

M3 =

[2x2 double] [3x3 double]

Vamos agora apresentar a célula presente na primeira posição:


>> M3(1,1)

ans =

[2x2 double]

>> class(M3(1,1))

ans =

cell

Agora vamos apresentar o conteúdo da célula presente na primeira


posição:
>> M3{1,1}

ans =

0 0

0 0

>> class(M3{1,1})

ans =

double

As chaves { } podem representar não só células isoladas mas também


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 necessário, é possível inicializar uma matriz celular através do


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

 Exemplo 6.5:
>> cell(2,2)

ans =

[] []

[] []

6.2.2. Extração envolvendo matrizes celulares

Tal como foi apresentado no Exemplo 6.3, podemos acessar o conteúdo


de uma célula isolada de forma semelhante às matrizes convencionais. A
apresentação do conteúdo de grupo de células também 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 1 1

>> M6{1,:}

ans =

1 1 1

ans =

0 0 0

>> M6_2 = M6{1,:}

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


É importante observar neste exemplo que não foi possível atribuir o
conteúdo de um grupo de células em uma outra matriz celular. No entanto é
possível atribuir, não o conteúdo, mas um subgrupo de células como um todo, em
uma outra matriz celular.
>> M6_ = M6(1,:)

M6_ =

[1x3 double] [1x3 double]

Para apresentarmos o conteúdo de todas as células de uma matriz celular,


utilizamos o comando celldisp, conforme está apresentado no próximo 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 conteúdo de


todas as células:
>> celldisp(M7)

M7{1,1} =

1 2

M7{2,1} =

6 7 8 9

M7{1,2} =

3 4 5

M7{2,2} =

10 11 12 13

Este comando apresenta o conteúdo de cada célula. Observe, mais uma


vez, que é diferente da representação da célula como um todo:
>> M7
M7 =

[1x2 double] [1x3 double]

[1x4 double] [1x4 double]

Uma representação gráfica da estrutura da célula também pode ser obtida


através do comando abaixo:
>> cellplot(M7)

Através do comando deal é possível realizar múltiplas atribuições do


conteúdo de um grupo de células para um conjunto de variáveis:
[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 variáveis para a atribuição e


Mat_Cel ou Mat_Cel1, Mat_Cel2,... são o conjunto dos conteúdos das células
que serão distribuídas ao longos das variáveis

 Exemplo 6.8:
>> M8 = { eye(3) , zeros(2) ; 30 , -3 }

>> [M8_1,M8_2,M8_3,M8_4]=deal(M8{:})

M8_1 =

1 0 0

0 1 0

0 0 1

M8_2 =

30

M8_3 =

0 0

0 0

M8_4 =

-3
Além de acessarmos o conteúdo de uma célula, também é possível
acessar um certo elemento ou grupo de elementos de uma matriz contida em
uma célula.

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

M9 =

[ 1] [ 2]

[2x2 double] [3.1416]

>> M9_1 = M9{2,1}

M9_1 =

-1 2

4 8

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

M9_2 =

-1

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

M9_3 =

-1 2

6.2.3. Alteração de células

As técnicas utilizadas para manipular as matrizes convencionais também


podem ser utilizadas para matrizes celulares, como ilustra o próximo 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] [10]

Vamos alterar o conteúdo da terceiro célula:


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

ans =

2 -4

-8 -16

Agora, vamos eliminar a última célula:


>> M10(end)=[]

M10 =

[1] [2] [2x2 double] [1x2 double]

6.2.4. Composição de matrizes celulares

O próximo exemplo apresenta como as matrizes celulares podem ser


justapostas de forma equivalente às matrizes numéricas.

 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] [1x2 double] [2x1 double]

[-1] [2x2 double] [ 2] [ 100]

6.3. Estruturas

Estruturas são classes de dados semelhantes às matrizes celulares e


também têm como objetivo agrupar conjuntos de dados de classes diferentes
através de uma única variável. A diferença das estruturas consiste na forma de
armazenamento de dados. Enquanto nas matrizes os dados são armazenados
em células, identificadas através de números, nas estruturas os dados são
armazenados em diferentes campos (“fields”) identificados através de “strings”.
Estruturas também podem ser criadas com qualquer dimensão, mas são
usualmente utilizadas como vetores.

6.3.1. Criação de estruturas

Vamos apresentar a sintaxe de criação de estruturas através do próximo


exemplo, onde é criada uma variável para guardar as informações relativas a um
conjunto de dutos de uma unidade industrial.

 Exemplo 6.12:

Inicialmente, são introduzidas as diversas informações disponíveis 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 são escalares e o campo device é


uma outra estrutura, cujos campos são valve e sensor. Agora, vamos introduzir
as informações referentes ao próximo 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, também é possível alimentar dados em uma estrutura


através do comando struct:
struct_name = struct('field1',V1,'field2',V2,…)

onde struct_name é o nome da estrutura a ser criada; field1, field2, etc. são os
campos para armazenamento das informações; e V1, V2, etc. são matrizes
celulares de mesmo tamanho com as informações para serem armazenadas nos
diferentes campos.

 Exemplo 6.13:

Este exemplo armazena as mesmas informações apresentadas no


exemplo anterior na estrutura Duct. Primeiro, as informações a serem
armazenadas são 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. Extração envolvendo estruturas

As técnicas para a extração do conteúdo são similares àquelas utilizadas


para matrizes e vetores. É possível acessar um campo, um conjunto de campos,
ou elementos ou grupo de elementos em um certo campo. O próximo exemplo
ilustra a sintaxe utilizada nestas técnicas:

 Exemplo 6.14:

Este exemplo utiliza a estrutura Duct do exemplo anterior.


>> Duct

Duct =

1x2 struct array with fields:

number

diameter

length

device

O próximo comando apresenta as informações armazenadas no campo


number:

>> Duct.number

ans =

ans =

Agora, são 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 conteúdo do primeiro elemento
armazenado no campo diameter (diâmetro do duto 1):
>> Duct(1).diameter

ans =

Podemos calcular a soma dos comprimentos dos dutos:


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

O símbolo [ ] presente no comando acima é necessário para colocar as


saídas dos campos length em uma matriz, onde pode ser aplicado o comando
sum.

6.3.3. Alteração de campos

Utilizando os mesmos conceitos envolvidos nas matrizes convencionais e


celulares, é possível alterar o conteúdo 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 diâmetro do tubo 1:


>> Tube(1).diameter = 1.5;

>> Tube.diameter

ans =

5
ans =

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 função rmfield:


>> rmfield('Tube.device')

ans =

1x2 struct array with fields:

number

diameter

length

roughness

 Observação: Informações adicionais sobre matrizes celulares e estruturas


podem ser encontradas na documentação do MATLAB, digitando-se help
datatypes na linha de comando.
7. GRÁFICOS

O MATLAB oferece uma grande quantidade de recursos gráficos para a


apresentação de resultados, incluindo curvas no plano e no espaço, curvas de
nível, superfícies com diversas formas de representação e texturas, histogramas,
gráfico de barras, etc. A poderosa capacidade gráfica do Matlab constitui uma
das suas características mais importantes quando comparado às linguagens de
programação convencionais.

7.1. Gráficos 2-D

7.1.1. Traçando gráficos

A sintaxe básica para representar uma massa de dados em um gráfico


bidimensional é o comando plot, utilizado na sua forma mais simples da seguinte
maneira:
plot(x,y,'str')

onde x e y são os vetores contendo as coordenadas dos pontos a serem


apresentados no gráfico – desta forma, serão plotados os pontos (x1,y1) , (x2,y2) ,
etc.; e str é uma “string” de caracteres opcional indicando a cor, o símbolo dos
pontos e o estilo da linha empregados na representação gráfica. A tabela a seguir
apresenta a codificação de cor, símbolo e estilo da linha:

Codificação de cores

Caracter Cor Caracter Cor


b azul m magenta
g verde y amarelo
r vermelho k preto
c azul claro w branco

Codificação de símbolos
Caracter Símbolo Caracter Símbolo
. ponto ^ triângulo ()
o círculo v triângulo ()
x xis < triângulo ()
+ soma > triângulo ()
* asterisco p pentágono
s quadrado h hexágono
d losango

Codificação de estilos de linha

Caracter Símbolo
- linha contínua
: tracejado curto
-- tracejado longo
-. Traço - ponto

O exemplo a seguir ilustra a utilização 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 gráfico 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 através 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 traçar o gráfico utilizamos o comando plot. Vamos selecionar os
pontos na cor vermelha e representados como círculos. Não selecionaremos
nenhum estilo de linha, uma vez que queremos um gráfico de pontos discretos
não ligados (quando o caracter referente ao símbolo está presente e o caracter
referente ao estilo de linha não está presente, nenhuma linha é adicionada):
>> plot(t,T,'ro')

Finalmente, o MATLAB abrirá uma janela onde será apresentado o gráfico


abaixo:

55

50

45

40

35

30

25
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5

Vamos verificar outra combinação de cores e símbolos:


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

Como o código de cor não está presente, o MATLAB irá utilizar a cor
“default” azul, e de acordo com a codificação do caracter, os símbolos dos pontos
serão losangos:
55

50

45

40

35

30

25
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5

No Exemplo 7.1, foram preparados gráficos com conjuntos de pontos


isolados. No entanto, pode ser necessário traçar o gráfico da curva associada ao
comportamento de uma função. O procedimento neste caso envolve a utilização
do comando plot em conjunto com as operações matriciais elemento a elemento.
O exemplo a seguir ilustra esta abordagem.

 Exemplo 7.2:

Traçar o gráfico da função f ( x ) = [sen( x )]2 cos( x ) para x ∈[0,4π ] .

O primeiro passo para traçar um gráfico de uma função consiste em gerar


um vetor com as coordenadas da variável independente dos pontos (a rotina
gráfica não traça curvas contínuas, na verdade, o conjunto de pontos discretos é
plotado, e depois estes são ligados em seqüência para reproduzir a forma da
curva). Vamos utilizar os recursos de geração de vetores com padrão crescente
apresentados anteriormente (Subseção 5.4.2):
>> x = 0 :0.01:4*pi;

Além da estrutura de sintaxe utilizada acima, também poderia ser aplicado


alternativamente o comando linspace.
Uma vez criado o vetor da variável independente, deve ser criado o vetor
da variável dependente, através da imagem da função. Para este cálculo, devem
ser utilizadas as operações elemento a elemento. Desta forma, para cada
componente do vetor x, será calculado o valor da imagem da função,
armazenado então no vetor y:
>> y = sin(x).^2.*cos(x);

Finalmente, aplica-se o comando plot:


>> plot(x,y)

A “string” de identificação da cor e do símbolo não foi introduzida, como


conseqüência, o MATLAB irá utilizar os valores “default”: cor azul com os pontos
não marcados mas ligados através de uma curva contínua:

0.4

0.3

0.2

0.1

-0.1

-0.2

-0.3

-0.4
0 2 4 6 8 10 12 14

 Observação: No traçado de uma curva, o incremento utilizado para a geração


do vetor da variável independente deve ser suficientemente pequeno para
produzir uma curva precisa, o emprego de poucos pontos poderia levar a uma
curva poligonal que não representaria de forma correta o gráfico da função. Por
outro lado, um incremento excessivamente pequeno pode acarretar um esforço
computacional desnecessário.
Também é possível traçar o gráfico de múltiplas curvas simultaneamente,
utilizando a seguinte sintaxe:
plot(x1,y1,'str1',x2,y2,'str2',...)

onde x1,y1,str1 são as informações da primeira curva; x2,y2,str2 são as


informações da segunda curva e assim sucessivamente.

 Exemplo 7.3:

Traçar os gráficos das funções 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 gráfico (observe que o MATLAB utiliza


uma cor para cada curva):

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1
0 2 4 6 8 10 12 14

Alternativamente também 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 variável independente é combinado com as


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

 Observação: O Matlab também é capaz de traçar gráficos em escala log-log:


loglog(x,y,'str'); em escala monolog: semilogx(x,y,'str') ou
semilogy(x,y,'str'); além de coordenadas polares: polar(ang,raio,'str').
Todos estes comandos seguem a mesma sintaxe geral do comando plot.

7.1.2. Manipulando gráficos

Uma vez que um gráfico foi gerado, o MATLAB permite que o usuário possa
alterar vários dos seus aspectos. Vamos apresentar aqui um conjunto de
comandos que podem ser utilizados para a manipulação de gráficos.

A própria janela gráfica criada através do comando plot possui uma barra
de ferramentas com vários recursos que podem ser explorados para a
manipulação do gráfico: zoom, inclusão de textos, setas, rotação em 3D,
alterações de características, etc.

Através do comando grid on, o gráfico 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 gráficos no Matlab são embutidos em uma caixa que pode ser


desativada através do comando box off (o comando box on coloca a caixa e o
comando box coloca/retira caixa, dependendo do estado inicial).

A identificação do título do gráfico e das escalas pode ser feita,


respectivamente, através dos comandos:
title('mensagem')
xlabel('mensagem')

ylabel('mensagem')

onde mensagem é o texto de identificação a ser apresentado.

Quando múltiplas curvas são traçadas em um gráfico, como no exempo


acima, o comando legend permite que sejam adicionadas identificações para
cada curva:
legend('mensagem1','mensagem2',...)

onde mensagem1, mensagem2, etc. são as identificações da primeira curva, segunda


curva, etc.

 Exemplo 7.4:

Refazer o gráfico do Exemplo 7.3 incluindo uma malha de linhas


delimitadoras, retirando a caixa externa e incluindo a identificação do título e dos
eixos e uma legenda.

Caso os vetores não estejam mais armazenados no “workspace”, vamos


repetir a geração dos pontos:
>> x = 0:0.01:4*pi; , y = sin(x).^2.*cos(x); , z = sin(x);

Traçamos o gráfico base:


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

Agora, realizamos as alterações desejadas (sem fechar a janela inicial):


>> grid on

>> box off

>> title('Gráfico de duas curvas')

>> xlabel('Eixo x') , ylabel('Eixo y')

>> legend('Função f(x)','Função g(x)')

O resultado final é:
Gráfico de duas curvas
1
Função f(x)
0.8 Função g(x)

0.6

0.4

0.2
Eixo y

-0.2

-0.4

-0.6

-0.8

-1
0 2 4 6 8 10 12 14
Eixo x

A região do gráfico a ser visualizado pode ser alterada através do comando


axis:

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

onde [ xinf , xsup , yinf , ysup ] são os limites do gráfico a serem


visualizados. Para retornar a sistema de escalas automático utiliza-se axis on.

 Exemplo 7.5:

Reduzir a área de visualização do Exemplo 7.4 para x ∈[0,4π ] e y ∈[−1,0] .

Após executarmos o exemplo anterior, digitamos:


>> axis([ 0 4*pi -1 0 ])
Gráfico de duas curvas
0
Função f(x)
-0.1 Função g(x)

-0.2

-0.3

-0.4
Eixo y

-0.5

-0.6

-0.7

-0.8

-0.9

-1
0 2 4 6 8 10 12
Eixo x

 Observação: Lembre-se que para efetuar as alterações apresentadas nesta


subseção, inicialmente o gráfico deve ser traçado, e a sua janela deve estar ativa
antes dos comandos serem aplicados.

7.1.3. Gerenciando janelas gráficas

Quando vários comandos plot são executados em seqüência, o MATLAB


sempre apaga o gráfico anterior. No entanto, a visualização de várias janelas
gráficas diferentes pode ser feita através do comando figure. Uma vez acionado
este comando, o MATLAB cria uma janela adicional e qualquer novo gráfico vai
para esta nova janela, mantendo as demais intactas. À medida que as janelas
são criadas em seqüência, estas vão sendo numeradas como pode ser visto na
barra de título 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 número da janela. Todas as manipulações gráficas apresentadas na
subseção anterior são aplicadas na janela que estiver ativa naquele instante.

Através da linha de comando também é possível fechar janelas, utilizando-


se 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 número da janela: close(n). Finalmente, o comando close all fecha
todas as janelas gráficas abertas.

Quando uma janela gráfica está ativa, o comando hold on faz com que
qualquer comando plot adicional seja desenhado na janela ativa sem apagar o
conteúdo desta (hold off desativa o comando e hold alterna entre os dois
estados).

Vários gráficos podem ser visualizados no MATLAB simultaneamente,


através da divisão da janela gráfica em regiões, utilizando-se o comando subplot:
subplot(lin,col,n)

onde lin e col são os números de linhas e colunas em que deve ser dividida a
janela gráfica e n é a posição em que o próximo gráfico deve ser colocado (a
numeração das posições caminha da esquerda para a direita ao longo de uma
linha, começando 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 ) e

k ( x ) = [cos( x )]3 para x ∈[0,2π ] , em separado mas em uma mesma janela gráfica.

>> 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('Funçao f(x)')

>> subplot(2,2,2) , plot(x,z) , title('Funçao g(x)')

>> subplot(2,2,3) , plot(x,w) , title('Funçao h(x)')

>> subplot(2,2,4) , plot(x,v) , title('Funçao k(x)')

Gerando assim o gráfico das quatro curvas em uma “matriz” 2x2:


Funçao f(x) Funçao g(x)
1 1

0.5 0.5

0 0

-0.5 -0.5

-1 -1
0 2 4 6 8 0 2 4 6 8

Funçao h(x) Funçao k(x)


1 1

0.5 0.5

0 0

-0.5 -0.5

-1 -1
0 2 4 6 8 0 2 4 6 8

 Observação: Informações adicionais sobre as rotinas gráficas 2-D do Matlab


podem ser encontradas em help graph2d.

7.2. Gráficos 2-D especiais

Além dos gráficos 2-D convencionais apresentados, o MATLAB também


possui várias ferramentas para traçar gráficos especiais como histogramas,
gráficos de barra, gráficos tipo torta, etc.

7.2.1. Histogramas

Dada uma certa coleção 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 número de


barras que devem ser incluídas (“default” n = 10).

 Exemplo 7.7:
Traçar o histograma de um conjunto 10.000 de pontos com distribuição
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 0 1 2 3 4

7.2.2. Gráficos de barra

A sintaxe geral para a construção de um gráfico 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 são os vetores utilizados para construção do gráfico e cor é o caracter


opcional para definição da cor das barras. A diferença entre os comandos
apresentados está na apresentação do gráfico (vertical ou horizontal;
bidimensional ou tridimensional).

 Exemplo 7.8:

A produção média de uma refinaria (em milhares de barris/dia) ao longo


dos meses de um certo ano está representada na tabela abaixo:
Mês 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 representação da produção ao longo do ano com gráfico de


barras.

Para ilustrar a utilização das diversas formas de gráfico de barras


disponíveis, vamos utilizara o recurso do subplot.

Os vetores de dados são:


>> mes = 1:12;

>> prod = [ 200 220 230 80 90 150 220 230 225 275 280 285 ];

Os comandos para traçar os gráficos são:


>> bar3(mes,prod)

>> title('Gráfico da produção')

Gráfico da produção
300

250

200

150

100

50

1
2
3
4
5
6
7
8
9
10
11
12

7.2.3. Gráficos tipo torta

Os comandos pie ou pie3 permitem gerar um gráfico 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 não (=0). A única diferença ente estes dois
comandos é a aparência do gráficos (2-D ou 3-D).

 Exemplo 7.9:

Traçar um gráfico 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 traçar um gráfico tipo torta com aparência 3-D
utilizando-se os dados armazenados no vetor x, destacando-se o mês de maior
produção.

11%
11%

8%
11%

9%

9%
9%

3% 9%
4%
6% 9%

7.2.4. Gráficos com barras de erro

Para traçarmos um gráfico incluindo barras de erro na indicação dos


pontos utilizamos o comando errorbar:
errorbar(x,y,e,'str')

onde x, y e e são vetores de mesma dimensão. 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 características do gráfico utilizando a mesma codificação já
apresentada.

 Exemplo 7.10:
Traçar um gráfico da curva de aquecimento do Exemplo 7.1, incluindo uma
representação do erro da medida de ±1 ºC.

Os pontos da curva de aquecimento são:


>> 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, traçamos o gráfico, com quadrados verdes:


>> errorbar(t,T,e,'gs')

>> title('Curva de aquecimento')

>> xlabel('Tempo (h)')

>> ylabel('Temperatura (ºC)')

C urva de aquecimento
55

50

45
Temperatura (ºC )

40

35

30

25

20
-1 0 1 2 3 4 5
Tempo (h)

 Observação: Uma lista completa de todos os gráficos especiais 2-D disponíveis


no MATLAB pode ser encontrada através do comando help especgraph.

7.3. Gráficos 3-D


Os gráficos 3-D no MATLAB podem ser traçados de forma equivalente que
os gráficos 2-D tradicionais, permitindo gerar curvas e superfícies no espaço com
facilidade. Os comandos apresentados anteriormente para a manipulação de
gráficos e gerenciamento de janelas também podem ser aplicados para os
gráficos 3-D apresentados ao longo desta Subseção.

7.3.1. Traçando gráficos de curvas

Para traçar o gráfico de uma curva no espaço 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 são as informações da primeira curva; x2,y2,z2,str2 são as


informações da segunda curva, e assim sucessivamente.

 Exemplo 7.11:

Traçar o gráfico da função parametrizada: x ( t ) = t ⋅ cos( t ) , y( t ) = t ⋅ sen( t ) e


z ( t ) = t para t ∈[0, 20π ] .

Os vetores para a geração da curva são:


>> t = 0:0.01:20*pi;

>> x = t.*cos(t); , y = t.*sin(t); , z = t;

O gráfico resultante é:
>> title('Curva em espiral')

>> xlabel('Eixo x') , ylabel('Eixo y') , zlabel('Eixo z')


70

60

50

40
Eixo z
30

20

10

0
100
50 100
0 50
0
-50
-50
Eixo y -100 -100
Eixo x

7.3.2. Traçando gráficos de superfícies

O procedimento para traçar o gráfico da superfície de uma função


f :ℜ 2 → ℜ envolve inicialmente a criação de uma malha de pontos cobrindo a
região do domínio do gráfico.

Esta malha de pontos pode ser gerada através da função meshgrid, que
recebe dois vetores relativos às coordenadas independentes do gráfico e gera
duas matrizes, cujos os pares de elementos correspondentes formam a malha
desejada para a geração da superfície. A sintaxe do comando é:
[X,Y]=meshgrid(x,y)

onde x e y são os vetores das coordenadas independentes; e X e Y são as


matrizes formadas.

Uma vez que a malha foi criada, na forma de duas matrizes, deve-se
calcular o valor da função em cada par de elementos, armazenando-se então o
resultado em uma terceira matriz, relativa à variável dependente.

Após as três matrizes que descrevem a superfície foi gerada, o MATLAB


possui uma variedade de comandos diferentes para traçar o gráficos em
diferentes formas de apresentação. Os dois comandos básicos são:
mesh(X,Y,Z)

surf(X,Y,Z)

waterfall(X,Y,Z)
onde X,Y e Z são as matrizes que representam os pontos da superfície.

Para explorar as diferenças entre cada ferramenta de apresentação gráfica


3-D, vamos analisar o exemplo a seguir.

 Exemplo 7.12:

Traçar o gráfico da superfície da função z ( x , y ) = x 2 + y 2 para x ∈[−11


,] e
y ∈[−11
, ].

O primeiro passo é definir vetores de valores nas variáveis independentes


que originarão a malha de pontos que deve cobrir a região:
>> x = -1:0.05:1;

>> y = -1:0.05:1;

O próximo 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 função em
cada ponto da malha, utilizando-se para isto operações elemento a elemento:
>> Z = X.^2 + Y.^2;

De posse das três matrizes que representam os pontos por sobre a


superfície, geramos o gráfico utilizando o comando mesh.
>> mesh(X,Y,Z)

O gráfico resultante é:
Note no gráfico acima que as cores são alteradas dependendo do valor da
função objetivo. Observe também que a superfície é “opaca”. Esta característica
pode ser alterada através dos comandos hidden on (transparente), hidden off

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


>> hidden

Uma outra opção de apresentação gráfica é o comando surf, semelhante


ao comando mesh, mas com os espaços entre as linhas são coloridos.
>> surf(X,Y,Z)
A textura da superfície pode ser alterada através dos comandos shading
faceted (“default”), shading interp ou shading flat.
>> shading interp

Deixamos ao leitor interessado um passeio através das formas de


apresentação gráfica 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. Traçando gráficos de curvas de nível

Curvas de nível indicam os pontos da superfície que possuem um mesmo


valor para a função.

As curvas de nível no MATLAB podem ser representadas através 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 são as matrizes da superfície, n é o número opcional de curvas de


nível a serem traçadas, e cor é o código opcional identificando a cor das curvas
de nível. A diferença entre os comandos é a forma de apresentação: contour3
coloca as curvas de nível ao longo da superfície, contour coloca as curvas de
nível no plano, contourf é semelhante a contour mas colorindo o espaço entre as
curvas e pcolor representa as curvas de nível através de um mapa de cores.

 Exemplo 7.12:

Traçar o gráfico das curvas de nível da função 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 traçar as curvas de nível com o comando contour.


>> contour(X,Y,Z)

Aproveitando vamos também digitar os comandos necessários para indicar


os valores da função ao longo das curvas de nível:
>> [C,h] = contour(X,Y,Z);

>> clabel(C,h)

O resultado final é:
1
6 1 1 1 .2 1.
1 . .4 6
0.8 1 0 .8 0 .8 1.
0.6 4
2
1. 0 .4
0.6 0.
6

1
4

1
0.4 0.

0 .8

6
0.
2 0.
0. 2

0 .8
0.2

0 .4

0 .4
0
1

0 .6
0 .6
-0.2
0 .8

0.
2

1
-0.4 0 .2

8
0.
0 .4
-0.6 0 .4
1 0 .6 0 .6
-0.8 0 .8
1. 1.
4 0 .8 1 4
6 1 .2 1 . 1 .6 8
1 .2 1.
-1 1
-1 -0.5 0 0.5 1

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


shading interp):

>> pcolor(X,Y,Z)

>> shading interp


8. INTRODUÇÃO À LINGUAGEM MATLAB

O objetivo deste Capítulo é apresentar como as rotinas de programação


em MATLAB podem ser desenvolvidas, descrevendo o conjunto de passos
necessários para a criação de um arquivo de comandos (“script file”) em MATLAB.
São apresentados também os principais comandos normalmente utilizados para
direcionar o fluxo da informação ao longo do programa (comandos condicionais e
comandos de repetição).

8.1. Arquivos de comando

Até este ponto, aplicamos todos as instruções ao MATLAB através da linha


de comando. No entanto, torna-se óbvio que para resolver problemas maiores
esta forma de interface não pode ser utilizada, pois requer a introdução dos
comandos passo a passo e, caso seja necessário repetir um procedimento, todos
os comandos devem ser novamente digitados.

Para permitir a realização de tarefas mais complexas, o MATLAB possibilita


a criação de arquivos de comandos (“script files”). Arquivos de comandos são
arquivos texto onde é armazenada uma seqüência qualquer de comandos, de
maneira que estes podem ser executados quando necessário. Estes arquivos
correspondem às listagens de programa utilizadas pelas linguagens de
programação convencionais. Através de um arquivo de comandos, é possível
inclusive acionar outros arquivos de comandos.

Como opção “default”, os arquivos de comandos podem ser escritos em


um editor de texto embutido no próprio MATLAB, sendo reconhecidos pela
extensão “.m” (os arquivos de comando também são denominados “m-files”).

Para executar um arquivo de comandos, deve-se apenas digitar o nome do


arquivo na linha de comando. No entanto, é necessário antes da execução do
arquivo, indicar ao MATLAB em que subdiretório se encontra o arquivo. Para esta
tarefa, é possível utilizar os seguintes comandos:

path(path,'endereço_do_subdiretório') ou cd endereço_do_subdiretório

ou, então, indicar o subdiretório de trabalho através da barra de ferramentas.


Abaixo está apresentado, passo a passo, o procedimento básico para a
criação de um programa:

- Passo 1

Através 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
vírgula.

- 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 estarão 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 extensão).

 Observação: Após qualquer alteração realizada no programa, o arquivo deve


ser novamente salvo. Caso o programa não seja salvo, o MATLAB continuará
executando a versão anterior da rotina.

Para facilitar a leitura posterior da listagem de programação é possível


incluir comentários através do caracter %. A direita deste caracter, o MATLAB
ignora o que estiver escrito.

Caso seja necesso interromper o programa durante a sua execução, 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 conversão de temperaturas °F → °C e K

% Programa para a conversão de temperaturas

% Inicialização

clc , clear all

% Entrada de dados

Tf=input('Digite a temperatura em graus Fahrenheit');

% Cálculos

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 repetição) são largamente utilizados em qualquer linguagem de programação,
serão apresentados aqui apenas uma breve descrição de sua sintaxe,
destacando-se as características específicas do seu emprego em um ambiente
MATLAB.

8.2.1. Comandos condicionais

Os operadores relacionais utilizados pelo MATLAB estão apresentados na


próxima tabela.
Operador Significado Operador Significado
= = igual >= maior ou igual
~= diferente < menor
> maior <= menor ou igual

Para expressar condições mais complexas são utilizados os seguintes


operadores lógicos:

Operador Significado
& and / e
| or / ou
~ not / não
xor exclusive or/exlcusivo ou
~ not / não

O principal comando condicional disponível no MATLAB é o comando if.


Este comando permite controlar o fluxo de um programa de acordo com o
resultado de uma ou mais expressões booleanas (condições verdadeiro ou falso).
A sintaxe deste comando em sua forma mais simples é:
if <condição>

subrotina executada se
<condição> for verdadeira

end

onde condição é uma expressão fornecendo um resultado do tipo verdadeiro (=1)


ou falso (=0).

Este comando também pode aparecer nesta forma:


if <condição>

subrotina executada se
<condição> for verdadeira

else
subrotina executada se
<condição> for falsa

end

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


if <condição1>

subrotina executada se
<condição1> for verdadeira

elseif <condição2>

subrotina executada se
<condição2> for verdadeira

elseif <condição3>

subrotina executada se
<condição1> for verdadeira

...

else

subrotina executada se
nenhuma das condições
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 switch-


case, que permite direcionar o fluxo de um programa de acordo com a
comparação do valor de uma expressão com diversas opções 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 contrário, 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('Gráfico não executado')

end

8.2.2. Comandos de repetição

O comando for permite que uma rotina do programa seja executado um


número pré-determinado de vezes. A sintaxe do comando é:
for var = matriz

subrotina

end
A subrotina é executada para cada coluna da matriz, com a variável var
assumindo o valor da coluna correspondente a cada repetição. Na prática, 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

 Observação: 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., operações elemento a elemento).
Sempre que possível deve se buscar a “vetorização” dos programas
desenvolvidos.

O comando while é um comando de repetição que permite que uma rotina


do programa seja executada até que uma certa condição seja alterada. A sintaxe
do comando é:
while <condição>

subrotina

end

Enquanto <condição> for verdadeira, a subrotina será executada


seqüencialmente.

 Exemplo 8.4:
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 função

Funções (“function files”) são uma classe especial de arquivos de


comandos. As funções recebem um ou mais argumentos, e, a partir destes
argumentos, procedem a execução de um conjunto de comandos, gerando na
saída um ou mais resultados. A grande vantagem das funções é que, uma vez
definidas, estas podem ser empregadas quantas vezes forem necessárias em um
ou mais programas diferentes.

Com o objetivo de apresentar, na prática, como deve ser montado um


arquivo de função, considere a criação de uma função para o cálculo da pressão
de um gás, a partir da temperatura e do volume, segundo a equação de estado
dos gases ideais.

A função deve ser criada em um arquivo exclusivo para ela. Todo arquivo
de função deve começar pelo comando function. Ao lado deste comando,
escreve-se a variável interna de saída da função (no nosso caso p, a pressão)
igualado ao nome da função (eq) seguido pelos argumentos de entrada (T,V;
respectivamente, temperatura e volume). Seguem-se então o conjunto de
definições, operações matemáticas e comandos que permitirão a função
determinar o resultado da saída. Finalmente, a função deve ser gravada em um
arquivo necessariamente com o nome declarado inicialmente (no nosso caso,
eq.m).

O arquivo de função proposto possui a seguinte estrutura:


function p=eq(T,V)

R=8314;

p=R*T/V;
É possível, agora, utilizar a função de cálculo da pressão de um gás (eq)
na linha de comando, em um arquivo de comando qualquer ou até mesmo em
outra função.

Por exemplo, o comando:


PT = eq(273.15,22.4);

calcula o valor da pressão nas coordenadas consideradas de temperatura e


volume, armazenando o resultado na variável PT.

8.3.1. Variáveis locais e globais

Quando um arquivo de comandos convencional é executado, as variáveis


envolvidas são 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.

Funções, no entanto, operam de maneira diferente. As variáveis definidas


no interior de uma função (variáveis locais) não são armazenadas após a
execução da função, e também não interferem com as demais variáveis externas.
Da mesma maneira, as operações matemáticas e os comandos utilizados no
interior da função só reconhecem as variáveis internas à função.

Caso seja necessário, é possível permitir que uma função compartilhe uma
ou mais variáveis externas. Neste caso utiliza-se o comando global,
global A B C ...

onde A, B, C, etc. são os nomes das variáveis a serem exportadas.

O comando global deve ser incluído na função e também no arquivo de


comandos ou funções onde as variáveis globais aparecem.

Em teoria, é possível nunca usar o comando global, introduzindo todos os


valores numéricos necessários para o cálculo da função, ou através do
argumento, ou definindo-os no interior da própria função. Mas este pode não ser
o procedimento mais prático sempre. Em um programa onde um grande número
de parâmetros é calculado através de um arquivo de comandos principal e depois
estes parâmetros são utilizados em várias funções diferentes, torna-se mais
prático “distribuir” estes parâmetros através do comando global.
 Exemplo 8.5:

A função abaixo (arquivo eos.m) calcula a pressão através da equação de


van der Waals, assim como as coordenadas reduzidas do gás.
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 saída o cálculo de uma pressão hipotética P2 a partir das
coordenadas T2 e V2, a função deve ser chamada da seguinte forma:
>> P2 = eos(T2,V2)

Caso seja necessário gerar todas as saída, a sintaxe da chamada seria:


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

You might also like