Matlab Basico

101
Curso MATLAB BÁSICO Comandos Escola de Química/UFRJ Novembro/2001

Transcript of Matlab Basico

Page 1: Matlab Basico

Curso

MATLAB BÁSICO

Comandos

Escola de Química/UFRJ

Novembro/2001

Page 2: Matlab Basico

Í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

Page 3: Matlab Basico

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

Page 4: Matlab Basico

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

Page 5: Matlab Basico

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

Page 6: Matlab Basico

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 =

1

� Exemplo 1.3:

Pode-se fechar o MATLAB através da barra de menu: File > Exit MATLAB.

Page 7: Matlab Basico
Page 8: Matlab Basico

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

Page 9: Matlab Basico

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 =

2

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:

Page 10: Matlab Basico

� Exemplo 2.3:

>> log10(100) ...

, sqrt(144)

ans =

2

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.

Page 11: Matlab Basico

� 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.

Page 12: Matlab Basico

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=

1

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

Page 13: Matlab Basico

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

Page 14: Matlab Basico

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

Page 15: Matlab Basico

� 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:

Determinar o valor da expressão: ( , , )

( )

( / )9 8 0 8

4 50

245 154−

− −

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

Page 16: Matlab Basico

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 3+ i 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:

Page 17: Matlab Basico

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

Page 18: Matlab Basico

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

Page 19: Matlab Basico

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.

Page 20: Matlab Basico

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 =

3

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

Page 21: Matlab Basico

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

Page 22: Matlab Basico

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)

Page 23: Matlab Basico

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

Page 24: Matlab Basico

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

Page 25: Matlab Basico

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).

Page 26: Matlab Basico

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:

Efetuar a seguinte atribuição: A =−

1 2

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:

Efetuar a seguinte atribuição: A =−

1 2

1 5

Page 27: Matlab Basico

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

Efetuar as atribuição ao lado: c =

2

0 e [ ]d = π π π2 3

>> c=[ 2 ; 0 ]

c =

2

0

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

Page 28: Matlab Basico

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 C A Bij ij ij= +

Subtração C = A - B C A Bij ij ij= −

Multiplicação C = A * B C A Bij il lj=∑

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

� Exemplo 5.4:

Sejam as seguintes matrizes e vetores:

A =

1 4

0 5, B =

2 2

3 1, c =

2

3 e d =

2

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

Page 29: Matlab Basico

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

Page 30: Matlab Basico

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:

Seja a seguinte matriz quadrada: A =

1 2

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:

Page 31: Matlab Basico

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

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

Page 32: Matlab Basico

Operação Sintaxe Descrição

Soma C = A + B C A Bij ij ij= +

Subtração C = A - B C A Bij ij ij= −

Multiplicação C = A .* B C A Bij ij ij=

Potenciação C = A .^ B C Aij ij

Bij=

� Exemplo 5.7:

Sejam as seguintes matrizes e vetores:

A =

1 4

0 5, B =

2 2

3 1, c =

2

3 e d =

2

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

Page 33: Matlab Basico

ans =

4

8

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

Page 34: Matlab Basico

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 =

Page 35: Matlab Basico

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.

Page 36: Matlab Basico

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 =

Page 37: Matlab Basico

3

ans =

2

>> length(v)

ans =

6

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

Page 38: Matlab Basico

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 ];

Page 39: Matlab Basico

>> [ 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 =

9

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 =

Page 40: Matlab Basico

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.

Page 41: Matlab Basico

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

Page 42: Matlab Basico

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 =

Page 43: Matlab Basico

2

9

1

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

Page 44: Matlab Basico

É 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

Page 45: Matlab Basico

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 ];

Page 46: Matlab Basico

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 =

Page 47: Matlab Basico

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

Page 48: Matlab Basico

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

2

1

2

3

col =

1

2

2

2

Page 49: Matlab Basico

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)

Page 50: Matlab Basico

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 =

4

7

9

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”.

Page 51: Matlab Basico

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:

Page 52: Matlab Basico

>> M(1,:,:)

ans(:,:,1) =

0 4

ans(:,:,2) =

9 1

>> M(:,1,:)

ans(:,:,1) =

0

3

ans(:,:,2) =

9

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

Page 53: Matlab Basico

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

Page 54: Matlab Basico

4 3

>> 2.^M

ans(:,:,1) =

1 16

8 8

ans(:,:,2) =

512 2

4 2

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

ans =

8

9

� 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 =

Page 55: Matlab Basico

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.

Page 56: Matlab Basico

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 ] };

Page 57: Matlab Basico

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

Page 58: Matlab Basico

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 =

Page 59: Matlab Basico

[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.

Page 60: Matlab Basico

É 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

Page 61: Matlab Basico

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

Page 62: Matlab Basico

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};

Page 63: Matlab Basico

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

Page 64: Matlab Basico

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=[ ];

Page 65: Matlab Basico

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

Page 66: Matlab Basico

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 =

1

ans =

2

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]}

Page 67: Matlab Basico

O comando abaixo apresenta o conteúdo do primeiro elemento

armazenado no campo diameter (diâmetro do duto 1):

>> Duct(1).diameter

ans =

2

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

Page 68: Matlab Basico

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

Page 69: Matlab Basico

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

Page 70: Matlab Basico

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 ];

Page 71: Matlab Basico

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:

0 0.5 1 1.5 2 2.5 3 3.5 4 4.525

30

35

40

45

50

55

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:

Page 72: Matlab Basico

0 0.5 1 1.5 2 2.5 3 3.5 4 4.525

30

35

40

45

50

55

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 x x( ) [sen( )] cos( )= 2 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.

Page 73: Matlab Basico

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 2 4 6 8 10 12 14-0.4

-0.3

-0.2

-0.1

0

0.1

0.2

0.3

0.4

� 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.

Page 74: Matlab Basico

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 x x( ) [sen( )] cos( )= 2 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 2 4 6 8 10 12 14-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

Alternativamente também poderia ser utilizado o seguinte comando:

Sejam x, y, z vetores linha

Page 75: Matlab Basico

>> 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')

Page 76: Matlab Basico

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 é:

Page 77: Matlab Basico

0 2 4 6 8 10 12 14-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1Gráfico de duas curvas

Eixo x

Eixo y

Função f(x)Função g(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 ])

Page 78: Matlab Basico

0 2 4 6 8 10 12-1

-0.9

-0.8

-0.7

-0.6

-0.5

-0.4

-0.3

-0.2

-0.1

0Gráfico de duas curvas

Eixo x

Eixo y

Função f(x)Função g(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

Page 79: Matlab Basico

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 x( ) sen( )= , g x x( ) [sen( )]= 3 , h x x( ) cos( )= e

k x x( ) [cos( )]= 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:

Page 80: Matlab Basico

0 2 4 6 8-1

-0.5

0

0.5

1Funçao f(x)

0 2 4 6 8-1

-0.5

0

0.5

1Funçao g(x)

0 2 4 6 8-1

-0.5

0

0.5

1Funçao h(x)

0 2 4 6 8-1

-0.5

0

0.5

1Funçao k(x)

� 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:

Page 81: Matlab Basico

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')

-4 -3 -2 -1 0 1 2 3 40

100

200

300

400

500

600

700

800

900

1000Histograma

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:

Page 82: Matlab Basico

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')

12

34

56

78

910

1112

0

50

100

150

200

250

300Gráfico da produção

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)

Page 83: Matlab Basico

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.

9%

11%

9%

11%

9%6%

11%

4%3%

8%

9%

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:

Page 84: Matlab Basico

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)')

-1 0 1 2 3 4 520

25

30

35

40

45

50

55Curva de aquecimento

Tempo (h)

Temperatura (ºC

)

� 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

Page 85: Matlab Basico

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 t( ) cos( )= ⋅ , y t t t( ) sen( )= ⋅ 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')

Page 86: Matlab Basico

-100

-50

0

50

100

-100

-50

0

50

1000

10

20

30

40

50

60

70

Eixo xEixo y

Eixo z

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)

Page 87: Matlab Basico

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 y( , ) = +2 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 é:

Page 88: Matlab Basico

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)

Page 89: Matlab Basico

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).

Page 90: Matlab Basico

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 y( , ) = +2 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 é:

Page 91: Matlab Basico

-1 -0.5 0 0.5 1-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

0.20.2

0.20.2

0.4

0.4 0.4

0.4

0.4

0.4

0.6

0.6 0.6

0.6

0.6

0.6

0.6

0.8

0.80.8

0.8

0.8

0.80.8

0.8

1

1

1

1

1

1

11

1

1.2

1.2

1.2

1.2

1.4

1.4

1.4

1.4

1.6

1.6

1.6

1.6 1.8

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

shading interp):

>> pcolor(X,Y,Z)

>> shading interp

Page 92: Matlab Basico

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.

Page 93: Matlab Basico

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.

Page 94: Matlab Basico

� 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.

Page 95: Matlab Basico

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

Page 96: Matlab Basico

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>

Page 97: Matlab Basico

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

Page 98: Matlab Basico

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:

Page 99: Matlab Basico

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;

Page 100: Matlab Basico

É 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.

Page 101: Matlab Basico

� 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)