Você está na página 1de 95

UNIVERSIDADE FEDERAL DO CEAR

Departamento de Engenharia de de
Teleinformtica
Curso de Graduao em Engenharia de de
Teleinformtica

Apostila de

Matlab Elaborao:
R

PET - Teleinformtica

Fortaleza
2012
Prefcio

Com o intuito de auxiliar a aprendizagem dos alunos do Curso de Graduao em


Engenharia de Teleinformtica da Universidade Federal do Cear - UFC, o PET
Teleinformtica desenvolveu esta apostila de Matlab R
, uma ferramenta compu-
tacional de imensa utilidade no ramo da Engenharia em geral e, em especial, da
Engenharia de Teleinformtica. Apesar disso, tal software no tema especfico ou
nico de qualquer disciplina da grade curricular da graduao, cabendo, assim, a
seus alunos, sozinhos, o aprendizado do mesmo. Tendo isso em vista, esta apostila
tambm visa ao suprimento da falta de material prprio do aluno de Engenharia de
Teleinformtica a respeito de Matlab.
Tentamos expor o contedo de forma prtica e envolvente ao longo da apostila.
Para isso, deixamos uma seo em cada captulo com algumas aplicaes do Matlab
em algumas reas da Fsica, Engenharia e da Matemtica em geral. Alm disso, h
uma lista de funes do Matlab no final de cada captulo, objetivando, assim, que
essa apostila seja til para futuras consultas.
Alm disso, antes de comear a exposio dos diversos tpicos concernentes
utilizao o Matlab R
, vale ressaltar que esta apostila apenas uma obra introdu-
tria ao tema, tendo em vista que uma total explanao sobre as capacidades de
tal sotfware mostraria-se temporalmente dispendiosa e fugiria dos objetivos gerais
de aprendizado aqui propostos. Para um estudo mais aprofundado sobre o tema,
algumas outras fontes so citadas na seo Referncias Bibliogrficas, ao fim da
apostila.
Por fim, importante, para promover o melhor aprendizado, que o leitor esteja
munido de um computador com o Matlab R
instalado e o utilizando em meio a
leitura da apostila.
Esperamos que o leitor aprecie e tire proveito desta apostila da melhor forma.

PET - Eng. de Teleinformtica


Sumrio

1 Conhecendo o Matlab 1
1.1 As janelas do Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Variveis escalares e funes elementares . . . . . . . . . . . . . . . . 3
1.3 Aplicaes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4 Lista de comandos e funes escalares do Matlab . . . . . . . . . . . 8
1.4.1 Alguns comandos do ambiente do Matlab . . . . . . . . . . . 9
1.4.2 Algumas funes escalares do Matlab . . . . . . . . . . . . . 10

2 Vetores e Matrizes 13
2.1 Criando vetores e matrizes . . . . . . . . . . . . . . . . . . . . . . . . 13
2.1.1 A partir de uma lista de nmeros . . . . . . . . . . . . . . . . 14
2.1.2 Com elementos espaados de um fator constante . . . . . . . . 14
2.1.3 Utilizado funes para criao de arranjos especiais . . . . . . 15
2.2 Referenciando e eliminando elementos . . . . . . . . . . . . . . . . . . 16
2.2.1 O referenciamento de elementos em vetores e matrizes . . . . . 16
2.2.2 A eliminao de elementos em vetores e matrizes . . . . . . . 18
2.3 Operaes com arranjos . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.3.1 Operaes aritmticas . . . . . . . . . . . . . . . . . . . . . . 19
2.3.2 Operaes lgicas e relacionais . . . . . . . . . . . . . . . . . . 21
2.4 Funes matriciais do Matlab . . . . . . . . . . . . . . . . . . . . . 22
2.5 Aplicaes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.6 Lista de funes matriciais do Matlab . . . . . . . . . . . . . . . . . 27

3 Rotinas e Programao 31
3.1 Scripts no Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.1.1 Criando e executando uma rotina . . . . . . . . . . . . . . . . 32
3.1.2 Os comandos input e disp . . . . . . . . . . . . . . . . . . 34
3.2 Criando Funes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.3 Estruturas de Deciso e de Repetio . . . . . . . . . . . . . . . . . . 36
3.3.1 Sentenas condicionais . . . . . . . . . . . . . . . . . . . . . . 37
3.3.2 Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Apostila de Matlab

3.4 Aplicaes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.5 Lista de funes para rotinas no Matlab . . . . . . . . . . . . . . . 42

4 Grficos em Matlab 45
4.1 O comando plot() - Desenhando curvas bidimensionais . . . . . . . 45
4.1.1 O grfico de uma funo . . . . . . . . . . . . . . . . . . . . . 46
4.1.2 Especificadores de linha e Propriedades . . . . . . . . . . . . . 47
4.2 Formatando o Grfico . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.2.1 Ttulo do grfico, rtulos dos eixos e texto . . . . . . . . . . . 49
4.2.2 Formatao dos eixos e grades . . . . . . . . . . . . . . . . . . 50
4.2.3 Mltiplos grficos . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.3 Tipos variados de grficos 2D . . . . . . . . . . . . . . . . . . . . . . 53
4.4 Grficos em 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.4.1 Curvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.4.2 Malhas e superfcies . . . . . . . . . . . . . . . . . . . . . . . . 55
4.5 Outras representaes grficas . . . . . . . . . . . . . . . . . . . . . . 57
4.6 Aplicaes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.7 Lista de funes grficas do Matlab . . . . . . . . . . . . . . . . . . 63

5 Introduo Matemtica Simblica 67


5.1 Objetos simblicos e sua manipulao . . . . . . . . . . . . . . . . . . 67
5.1.1 Criando objetos simblicos . . . . . . . . . . . . . . . . . . . . 68
5.1.2 O valor numrico de uma expresso simblica . . . . . . . . . 70
5.1.3 Funes teis para variveis e expresses simblicas . . . . . . 71
5.2 Resolvendo equaes algbricas - a funo solve() . . . . . . . . . 73
5.3 Aplicaes em Clculo . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.3.1 Limites - a funo limit() . . . . . . . . . . . . . . . . . . . 75
5.3.2 Derivadas - a funo diff() . . . . . . . . . . . . . . . . . . 76
5.3.3 Integrais - a funo int() . . . . . . . . . . . . . . . . . . . . 76
5.4 Grficos de expresses simblicas . . . . . . . . . . . . . . . . . . . . 77
5.5 Aplicaes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
5.6 Lista de funes para expresses simblicas . . . . . . . . . . . . . . . 83

Referncias Bibliogrficas 86

Pet - Eng. de Teleinformtica UFC


Captulo 1

Conhecendo o Matlab

E ste nosso primeiro captulo tem por objetivo a introduo dos con-
ceitos bsicos da utilizao do nosso software em estudo, o Matlab
R

que sero muito teis no desenvolvimento das prticas dos prximos cap-
,

tulos. Antes, entretanto, interessante um embasamento terico sobre a


ferramenta computacional que estamos lidando.

A origem do nome MATLAB vem da abreviao MATrix LABoratory,


pois realmente essa a sua maior utilidade: desenvolver o clculo numrico
a partir da manipulao de matrizes e vetores. O Matlab uma lingua-
gem de alta performance para computao tcnica, pois integra ambientes
de clculo, de programao e de visualizao. Alm disso, esse um ambi-
ente dispe de uma moderna linguagem de programao: tem estruturas de
dados sofisticados, contm ferramentas de depurao e suporta programao
orientada a objeto. Esses fatores fazem o Matlab uma excelente ferramenta
para ensino e pesquisa.

O Matlab, atualmente, propriedade da empresa MathWorks R


e foi desen-
volvido por Cleve Moler no fim dos anos 1970. Hoje, ele um dos softwares
matemticos de maior abrangncia no meio cientfico ao lado do Mathema-
tica, da Wolfram Research
R
, e do Scilab, da Scilab Enterprises
R
.

A partir de agora conheceremos a organizao lgica desse incrvel software


e de suas funes preliminares.

1.1
As janelas do Matlab
Ao se inicializar o Matlab, a primeira imagem que nos mostrada nos apresenta
muitas janelas juntas de forma aparentemente complicada, assim como mostra a
Figura 1.11 , porm tal impresso logo desparecer depois de um certo conhecimento
sobre o Matlab. Tais janelas so de enorme utilidade, pois nelas onde vamos
programar, visualizar e debugar nossas aplicaes em Matlab.
1
A verso do Matlab utilizado durante todo o texto a R2011b, mas as informaes aqui
presentes so compatveis com todas as verses anteriores.
2 Apostila de Matlab

Figura 1.1 Uma primeira viso do Matlab


R
e sua janelas

Figura 1.2 A janela Editor Figura 1.3 A janela Figures

De todas as janelas que o Matlab nos oferece iremos nos concentrar nas mais
comumente utilizadas. Elas, esto apresentadas nas Figuras 1.1, 1.3 e 1.2, so:

Command Window Janela principal, nela onde trabalharemos a maior parte


das vezes, pois o seu escopo o local principal de digitao de comandos e
chamamento de funes e arquivos.

Workspace Janela de exibio de variveis com seus respectivos valores utiliza-


das durante a execuo de um comando ou cdigo. Tais variveis podem ser
visualizadas ou alteradas com de dois cliques sobre elas.

Current Folder Nos mostra a pasta atual de onde estamos utilizando nossas
rotinas e para onde iro arquivos gerados pelo Matlab.

Pet - Eng. de Teleinformtica UFC


Captulo 1. Conhecendo o Matlab 3

Command History Janela que nos apresenta os comandos e os arquivos utili-


zados recentemente.
Editor Este o editor de scripts do Matlab (vide Figura 1.2 e Captulo 3).
nessa janela onde os cdigos .m (as M-files) do Matlab so postos em
execuo e depurao.
Figure Esta janela nos oferece a visualizao de figuras criadas pelo Matlab
(vide Figura 1.3 e Captulo 4). Nela possvel alterar diversas caractersticas
de visualizao e manejo do grfico.

1.2
Variveis escalares e funes
elementares
Nossas atenes de agora at captulo 3 se concentraro na janela Command Win-
dow. nela onde criaremos nossas variveis e executaremos clculos sobre elas.
Inicialmente, note a existncia do smbolo >> no comeo desta janela. Tal sm-
bolo indica que o Matlab est pronto para operar e nele onde iremos pr nossos
comandos e variveis.
Para comearmos, deveremos conhecer os caracteres especiais e as operaes nu-
mricas simples que o Matlab nos oferece durante a sua programao. Os primeiros
caracteres reservados do Matlab, teis para ns, so os seguintes:

O sinal de atribuio (=) Assim como em C, este sinal atribui o que est a
sua direita varivel que est a sua esquerda.
O ponto-e-vrgula (;) Este sinal impede que o Matlab mostre o resultado
de uma determinada atribuio ou comando logo aps dele ser executado.
O vrgula (,) Uma de suas utilidades que, separados por vrgula, possvel
digitar diversos comando em uma mesma linha e com todas os resultados
mostrados juntos e seguidos.
O Porcento (%) Este o operador que comenta todo o cdigo aps ele em
uma mesma linha, ou seja, essa parte do cdigo ser desconsiderada durante
a execuo dele.
Os Parnteses (()) Estes so teis para indicar a precedncia de certa opera-
o em relao a outras, assim como em C.

A partir de agora podemos nos concentrar na utilizao de funes de manipu-


lao de dados escalares, tipo de dado que iremos trabalhar neste captulo 2 , bem
como utilizar a funo de calculadora do Matlab. As operaes aritmticas bsicas
esto presentes no nosso software da forma como mostra a Tabela 1.1.
2
Os tipos de dados na forma de matrizes so deixados para o Captulo 2

UFC Pet - Eng. de Teleinformtica


4 Apostila de Matlab

Tabela 1.1 Operaes elementares em Matlab

Operao Smbolo Exemplo


Adio + 2+3
Subtrao - 23
Multiplicao * 23
Diviso direita / 2/3
Diviso esquerda \ 2\3 = 3/2
Exponenciao 23

Para executar determinada operao elementar matemtica em Matlab deve-


mos digitar, em linha, os nmeros e as operaes requeridas e, depois de concluda a
digitao, teclar Enter. Podemos, ainda, colocar nossos valores numricos escalares
em variveis definidas por ns, usurios. Diferentemente de outras linguagens de
programao como C ou Pascal, no necessrio em Matlab a declarao explcita
do tipo de uma varivel no comeo do cdigo. Assim, basta digitar certo nome de
varivel e fazer, ento, operaes com ela, iniciando, sempre, com uma atribuio.
Para saber o valor contedo de certa varivel, basta digit-la no Command Win-
dow e teclar Enter ou observar a Janela Workspace. O Cdigo 1.1 nos mostra um
exemplo da utilizao de todos os conhecimentos at aqui adquiridos.
Cdigo 1.1 Exemplo do uso de operaes aritmticas
>> ((4*5)^2)-7 % Isto um comentrio
ans =

393

>> a = 4 % Atribuio de um valor a uma varivel


a =

>> b = 5, c = 2 % Vrios comandos em linha


b =

5
c =

>> d = 7; % Utilizao do ponto-e-vrgula


>> e = ((a*b)^c)-d % Operaes com variveis
e =

393

Pet - Eng. de Teleinformtica UFC


Captulo 1. Conhecendo o Matlab 5

>> f = e-ans
f =

No cdigo apresentado, podemos notar a existncia de uma varivel pr-definida


no Matlab, a varivel ans, que, como visto, guarda o valor numrico de certa
operao matemtica que no foi atribuda a nenhuma outra varivel. Alm desta,
existem outras variveis pr-definidas de constantes em Matlab e elas esto listadas
na Tabela 1.2. O Matlab permite a manipulao de tais variveis e, inclusive, a
utilizao delas em nomes de variveis, desde que no exista ambiguidade em um
mesmo cdigo. Assim, pode-se atribuir a uma varivel i o valor 5, por exemplo.

Tabela 1.2 Variveis e constantes pr-definidas do Matlab

Smbolo Funo
ans Resposta mais recente no atribuda nenhuma varivel.
eps Preciso do ponto-flutuante, ou seja, a menor diferena poss-
vel entre dois nmeros alcanada pelo Matlab. Ela equivale
252 ou, aproximadamente, 2, 2204.1016 .

iej Unidade imaginria, 1.
Inf/inf Ambas representam, matematicamente, o infinito.
NaN Valor numrico indefinido (Not a Number ). Ocorre, normal-
mente, quando se tenta realizar a operao de 0/0 ou /.
pi Valor numrico de (3.141592653589793...).
realmax Representa o maior nmero finito, em ponto flutuante, que
pode ser representado no Matlab. Ele vale, aproximada-
mente, 1, 7977.10308 .
realmin Representa o menor nmero positivo normalizado, em ponto
flutuante, que pode ser representado no Matlab. Ele vale
21022 ou, aproximadamente, 2, 2251.10308 .

Vale a pena falar que o Matlab Case-Sensitive, ou seja, diferencia as letras


maisculas e minsculas nos nomes das variveis, portanto Num, NUM e num so
nomes para trs variveis diferentes.
Apesar de importante para o manejo de variveis, as funes elementares apre-
sentadas na Tabela 1.1 no suprem inteiramente as necessidades do programador de
Matlab. Para isso, existem funes muito teis na manipulao de valores escala-
res, as funes escalares. Elas representam muitas funes simples, encontradas
em calculadoras cientficas, como sin(x), tan1 (x), x e exp x. Na Seo 1.4 mui-
tas funes escalares podem ser analisadas e o Cdigo 1.2 demonstra a utilidade de
algumas delas.

UFC Pet - Eng. de Teleinformtica


6 Apostila de Matlab

Cdigo 1.2 Exemplo do uso de algumas funes escalares do Matlab


>> a = sin(pi/10) % pi/10 = 18o
a =

0.3090

>> b = cos(pi/10)
b =

0.9511

>> a^2+b^2 % Identidade trigonomtrica


ans =

1.0000

>> exp(1) % Uma forma de encontrar um valor para e


ans =

2.7183

>> atan(cos(pi/4))^(sqrt(log(7))) % Uma expresso mais complexa


ans =

0.5081

1.3
Aplicaes
Aplicao 1.1 Utilizando o Matlab, mostre para alguns valores de x, a va-
lidade da Relao de Euler:

exp(ix) = cos(x) + i sin(x)

Soluo O Matlab, obviamente, tambm manipula nmeros complexos


como se fossem dados numricos comuns. Para, por exemplo, atribuir uma varivel
um nmero complexo ou manipul-lo, basta, apenas, digit-lo na forma z = a + bi
ou usar a funo complex(a,b), ambos com a e b reais. O cdigo a seguir mostra
essa capacidade (na Seo 1.4 so apresentadas algumas funes do Matlab para
Nmeros Complexos).

>> z1 = 3 + 4i % Ou z1 = 3 + 4*i
z1 =

3.0000 + 4.0000i

Pet - Eng. de Teleinformtica UFC


Captulo 1. Conhecendo o Matlab 7

>> z2 = complex(3,4)
z2 =

3.0000 + 4.0000i

>> z = z1 * z2
z =

-7.0000 +24.0000i

Voltando ao pedido nesta aplicao, podemos atingir nossa meta para a demons-
trao da Relao de Euler utilizando as funes exp(x), sin(x) e cos(x) e os
conhecimentos apresentados no pargrafo anterior. O Cdigo 1.3 mostra esse feito
para x = 0.75 rad e para x = rad, por exemplo.
Cdigo 1.3 Aplicao 1.1
>> a = exp(0.75i) % x = 0.75 rad
a =

0.7317 + 0.6816i

>> b = cos(0.75) + i*sin(0.75)


b =

0.7317 + 0.6816i

>> c = exp(pi*i) % x = pi rad


c =

-1.0000 + 0.0000i

>> d = cos(pi) + i*sin(pi)


d =

-1.0000 + 0.0000i

..................................................................................
Aplicao 1.2 A distncia d de um ponto (x0 , y0 ) reta Ax + By + C = 0
dada por
|Ax0 + By0 + C|
d=
A2 + B 2
Determine a distncia do ponto (2, 3) reta 3x+5y 6 = 0 utilizando o Matlab.

Soluo Esse o tpico exemplo da facilidade que o Matlab nos proporci-


ona para se resolver questes diretas em que apenas exigido o clculo bruto em
si. Assim, utilizando o nosso software em estudo, podemos desenvolver o seguinte
cdigo:

UFC Pet - Eng. de Teleinformtica


8 Apostila de Matlab

Cdigo 1.4 Aplicao 1.2


>> A = 3; B = 5; C =-6;
>> x0 = 2; y0 = -3;
>> d = abs(A*x0 + B*y0 + C)/sqrt(A^2 + B^2)
d =

2.5725

Note, no cdigo anterior, a utilizao das funes abs(x) e sqrt(x) listadas


na Seo 1.4. Como voc ir perceber com a experincia, o Matlab, normalmente,
possui uma funo que executa determinada aplicao matemtica sem a necessidade
da elaborao dela por parte do usurio.
..................................................................................
Aplicao 1.3 Um sequncia da forma S = (a1 , a2 , . . . , an ), onde an+1 = qan ,
n 2, e an = a1 , n = 1, chamada de Progresso Geomtrica (PG) de razo q.
Nessas condies, an = a1 q n1 . Sabendo que
n
Q n
ai = a1 a2 a3 . . . an = (a1 an ) 2
i=1
Determine o valor do produto dos 20 primeiros termos da PG iniciada com 4, 5 e
com razo 2.7 utilizando o Matlab.

Soluo Nessas ocasies nota-se a dificuldade da manipulao de nmeros


grandes, impossvel para a maioria das calculadoras cientficas comuns. O Matlab,
entretanto usufrui essa capacidade, como pode ser notado no Cdigo 1.5, abaixo:
Cdigo 1.5 Aplicao 1.3
>> format long % Os nmeros vem com mais dgitos (Seo 1.4)
>> a1 = 4.5, q = 2.7, n = 20; % Variveis do exemplo
>> an = a1*q^(n-1) % Frmula do termo geral para n = 20
an =

7.065193045869377e+008

>> P = (a1*an)^(n/2) % Frmula do produto de 20 termos


P =

1.055274553172061e+095

1.4
Lista de comandos e funes escalares
do Matlab
Esta seo mostra alguns dos importantes comandos e funes escalares do Matlab R

e ser de grande utilidade para futuras consultas. Como voc poder perceber a lista

Pet - Eng. de Teleinformtica UFC


Captulo 1. Conhecendo o Matlab 9

de tais aplicaes , s vezes, extensa, por isso colocamos em negrito aquelas fun-
es ou comandos de maior uso. Comearemos com os comandos do Matlab.

1.4.1 Alguns comandos do ambiente do Matlab


Abaixo so apresentados muitos comandos de ambiente do Matlab R
, ou seja,
instrues no-matemticas que manejam diversos aspectos do ambiente de progra-
mao do Matlab R
tais como as janelas, a forma de apresentao dos dados e
os arquivos do Current Folder. Antes de comearmos, no entanto, vale ressaltar a
importncia do comando help dentre os que sero citados, pois, como voc notar
com a prtica, o Matlab oferece inmeras funes em que, normalmente, no se
reconhece de cara quais argumentos sero colocados nelas nem a forma de sua
sada. Portanto, no toa que a ferramenta de ajuda do Matlab R
muito bem
elaborada para isso e, assim, deve tirar-se proveito dela.

Tabela 1.3 Comandos do Matlab


R

Comandoa Ao
clc Limpa o contedo digitado ou impresso no Command
Window.
clear Remove as variveis atuais da memria, ou seja, limpa
o Workspace.
dir Mostra no Command Window os nomes dos arquivos na
pasta atual.
exist arg Checa a existncia de arg no Workspace (como varivel)
ou no Current Folder (como arquivo).
exit/quit Finaliza o Matlab
format short/long Formata a maneira como o Matlab ir apresentar os
resultados: com muitos dgitos de preciso (long) ou
poucos (short).
help arg Procura um tpico de ajuda especfico para a expresso
em arg. Esse comando tem similar utilidade ao se teclar
F1 em cima da palavra qual se procura ajuda.
lookfor arg Procura algum tipo de ajuda para a palavre em arg.
which arg Localiza a funo ou arquivo arg.
who Lista as variveis do Workspace no Command Window.
whos Lista as variveis, junto aos seus tamanhos e tipos.
a
Alguns comandos possuem diferentes funes quando um argumento colocado aps ele ou no.
Para maiores informaes consulte www.mathworks.com/help/techdoc/matlab_product_
page.html.

UFC Pet - Eng. de Teleinformtica


10 Apostila de Matlab

1.4.2 Algumas funes escalares do Matlab


O Matlab possui uma imensido de funes escalares disponveis para o usurio.
Aqui tentamos apresentar algumas das mais importante. Saiba, antes, que certas
funes escalares tem o seu comportamento tambm especificados para vetores e
matrizes, assunto do prximo captulo, e que, nesta seo, os nmeros complexos
so considerados como dados escalares.

Tabela 1.4 Funes Exponenciais e Logartmicas

Funo Descrio
exp(x) Exponencial de x, ex .
log(x) Logaritmo natural, ln(x).
log2(x) Logaritmo na base 2 de x, log2x .
x
log10(x) Logaritmo na base 10 de x, log10 .

nthroot(x, n) Raiz n-sima de x, n x.

sqrt(x) Raiz quadrada de x, x.

Tabela 1.5 Funes Tabela 1.6 Funes


Trigonomtricas Hiperblicas

Operao Descrio Operao Descrio


sin(x) Seno sinh(x) Seno hiperblico
cos(x) Cosseno cosh(x) Cosseno hiperblico
tan(x) Tangente tanh(x) Tangente hiperblico
csc(x) Cossecante csch(x) Cossecante hiperblico
sec(x) Secante sech(x) Secante hiperblico
cot(x) Cotangente coth(x) Cotangente hiperblico
asin(x) Arco seno asinh(x) Arco seno hiperblico
acos(x) Arco cosseno acosh(x) Arco cosseno hiperblico
atan(x) Arco tangente atanh(x) Arco tangente hiperblico
acsc(x) Arco cossecante. acsch(x) Arco cossecante hiperblico
asec(x) Arco secante asech(x) Arco secante hiperblico
acot(x) Arco cotangente acoth(x) Arco cotangente hiperblico

Pet - Eng. de Teleinformtica UFC


Captulo 1. Conhecendo o Matlab 11

Tabela 1.7 Funes para Nmeros Complexos

Funo Descrio
abs(x) Valor absoluto de x, |x|.
angle(x) ngulo de um nmero complexo, ^x.
conj(x) Conjugado complexo de x, x .
complex(x,y) Cria o nmero complexo z = a + bi.
imag(x) Parte imaginria de x, I (x).
real(x) Parte real de x, R (x).

Tabela 1.8 Funes Arredondamento e Resto

Funo Descrio
ceil(x) Arredonda ao primeiro inteiro na direo de +.
fix(x) Arredonda ao primeiro inteiro na direo de 0.
floor(x) Arredonda ao primeiro inteiro na direo de .
rem(x,y) Resto da diviso de x por y.
rat(x) Aproximao de x em soma de fraes.
rats(x) Aproximao de x em uma frao.
round(x) Arredonda ao inteiro mais prximo.

Tabela 1.9 Outras Funes

Funo Descrio
factorial(x) Fatorial de x (x 0), x!.
gcd(x,y) Menor divisor comum (MDC) entre x e y.
lcm(x,y) Maior mltiplo comum (MMC) entre x e y.

UFC Pet - Eng. de Teleinformtica


Captulo 2

Vetores e Matrizes

C omo j foi comentado antes, o Matlab encontra sua grande utilidade


e eficincia ao ser utilizado como manipulador de vetores e matrizes
(ou seja, arranjos) como dados numricos. Assim, este captulo se concentra
no cerne da utilizao do nosso software e no ser exagero considerar essa
parte da apostila como a mais importante. O conhecimento que aqui ser
desenvolvido, no entanto, depende do bsico que foi explanado no captulo
anterior.

Alm disso, todos os processos que sero mostrados mostram-se melhor apro-
veitveis com o conhecimento bsico de vetores e matrizes, trazidos do Ensino
Mdio, ou de lgebra Linear, aprendida habitualmente no Ensino Superior.
Entretanto, nada impede um leito mais inexperiente de entender os proces-
sos e as aplicaes que aqui sero desenvolvidos.

Na verdade, qualquer um poder notar, a medida que a experincia com


o Matlab aumenta, que, realmente, a grande maioria dos eventos fsico-
matemticos que nos rodeiam podem ser bem modelados e simulados utili-
zando esse poderoso software matemtico e sua manipulao matricial. Ape-
sar disso, no se desmotive no momento em que encontrar alum processo ou
algoritmo de difcil compreenso durante um estudo que envolva o Matlab,
pois muito do que se pode modelar atravs dele advm de muita experincia
e observao.

2.1
Criando vetores e matrizes

A criao de vetores e matrizes no Matlab , como deveria ser, muito prtica e,


tendo em vista que uma matriz uma composio de vetores em linhas e colunas,
a formao de arranjos bidimensionais (matrizes) apenas uma extenso da ideia
de formao de vetores. Com esse objetivo, podemos citar alumas formas de criar
arranjos.
14 Apostila de Matlab

2.1.1 A partir de uma lista de nmeros


Esta a forma mais simples de criar um vetor-linha, por exemplo, pois basta atri-
buir um conjunto de nmeros separados por espaos ou por vrgulas (,) e limitados
por colchetes uma varivel qualquer, da seguinte maneira:

vetor_linha = [num1 num2 num3 ... numN]


ou

vetor_linha = [num1,num2,num3,...,numN]

No caso de um vetor-coluna, os elementos devem ser separados por ponto-e-vrgula


(;) ou, ento, pode-se colocar, quando se tratando de vetores, o operador de
transposio, a aspa simples (), aps a digitao de um vetor-linha, pois um
vetor-coluna nada mais que um vetor-linha transposto:

vetor_coluna = [num1;num2;num3;...;numN]
ou

vetor_coluna = [num1 num2 num3 ... numN]

A essa altura, pode-se notar que as matrizes, constitudas de vetores-coluna e


vetores-linha, podem ser criadas com nmeros separados por espaos para suas li-
nhas1 e os pontos-e-vrgulas como separadores de colunas:

matriz = [num1 num2 ... numN1;num3 num4 ... numN2;


...;num5 num6 ... numNN]

Tambm possvel criar uma matriz a partir de vetores-linha j existentes como


linhas. Isso feito colocando entre os pontos-e-vrgulas os nomes das variveis a
quais esses vetores foram atribudos.

2.1.2 Com elementos espaados de um fator constante


Dessa maneira possvel criar vetores com seus elementos em Progresso Arit-
mtica (P.A.) de razo q, valor inicial m e valor final n, da seguinte forma:

nome_da_variavel = [m:q:n] ou nome_da_variavel = m:q:n

Tambm pode-se declarar um vetor da forma a seguir:

nome_da_variavel2 = m:n

onde q sub-entendido como valendo 1. Note que possvel declarar as linhas


de uma matriz dessa forma tambm, mas, como sempre, necessria a ateno ao
nmero de elementos constante em suas linhas.
1
Lembre que as linhas da matriz devem ter o mesmo nmero de elementos, seno o Matlab
apresenta um erro logo aps a declarao.

Pet - Eng. de Teleinformtica UFC


Captulo 2. Vetores e Matrizes 15

2.1.3 Utilizado funes para criao de arranjos especiais


Para a criao de vetores (e, portanto, linhas para matrizes) com n elementos
igualmente espaados pode-se utilizar a funo linspace(). Nela, pode-se desen-
volver um vetor com o nmero de elementos e os valores dos elementos final e inicial
especificados. Ela toma a seguinte forma:

vetor = linspace(xi,xf,n)

onde n o nmero de elementos requerido e xi e xf so os valores inicial e final,


respectivamente.
Para criao de certas matrizes especiais, teis em clculos algbricos, tambm
existem funes especiais. Para a criao de matrizes de 0s com n linhas e m colunas,
pode-se utilizar a funo zeros(). Analogamente, a funo ones() forma uma
matriz de 1s n por m:

matriz_0s = zeros(n,m) , matriz_1s = ones(n,m)

Uma matriz identidade pode ser definida no Matlab pela funo eye():

matriz_ident = eye(p)

em que p o nmero de linhas e colunas da matriz gerada (matrizes identidades


so quadradas, pp). Existem outras funes que criam matrizes ou as formam a
partir de outros arranjos. Voc pode consultar outras funes assim na Seo 2.6.
Por fim, nota-se a utilizao das formas de se declarar um vetor e uma matriz
no Matlab no Cdigo 2.1:
Cdigo 2.1 Declaraao de arranjos em Matlab
>> vet1 = [1 2.3 2,3 -78] % Note diferena entre 2.3 e 2,3
vet1 =

1.0000 2.3000 2.0000 3.0000 -78.0000

>> vet2 = [5.7:1.5:13.1] % PA de razo 1.5


vet2 =

5.7000 7.2000 8.7000 10.2000 11.7000

>> vet3 = linspace(4,5,5) % 5 elem. igualmente espaados


vet3 =

4.0000 4.2500 4.5000 4.7500 5.0000

>> zeros(1,5) % Um vetor(matriz de um linha) de zeros


ans =

0 0 0 0 0

UFC Pet - Eng. de Teleinformtica


16 Apostila de Matlab

>> mat1 = [1 2 3 4 5;vet1;vet2;vet3;ans]


mat1 =

1.0000 2.0000 3.0000 4.0000 5.0000


1.0000 2.3000 2.0000 3.0000 -78.0000
5.7000 7.2000 8.7000 10.2000 11.7000
4.0000 4.2500 4.5000 4.7500 5.0000
0 0 0 0 0

2.2
Referenciando e eliminando elementos
O referenciamento (endereamento) de um ou mais elementos em um vetor ou em
uma matriz um procedimento importante quando queremos manipular ou extrair
as informaes contidas em um arranjo depois de um procedimento algbrico, por
exemplo. Quando endereado, um elemento pode ser utilizado em outros clculos
tambm. J a questo de eliminao de elementos encontra uma importante utili-
dade na otimizao temporal de clculos com matrizes grandes que, por conterem
informaes repetidas ou indesejadas, podem ser diminudas.

2.2.1 O referenciamento de elementos em vetores e matrizes


Dado um determinado vetor VET, a referncia de um elemento nele a simples
colocao da posio dele entre parnteses, VET(n), para o elemento na n-sima
posio. Assim, se VET dado por
 
VET = 1 3 5 7 9 2 4 6 8
ento VET(5)= 9 e VET(8)= 6.
Para matrizes, precisamos fornecer o nmero da linha e da coluna do elemento
em questo. Assim, dada a matriz MAT, um elemento referenciado por MAT(n,m),
ele estando na linha n e na coluna m. Se MAT for

1 3 5
MAT = 2 4 6
7 8 9
pode-se dizer que MAT(2,1)= 2 e MAT(1,3)= 5.
Torna-se til, algumas vezes, a referenciao de um sequncia de elementos em
uma matriz, seja uma linha toda ou parte de uma coluna ou uma pequena matriz
dentro dessa maior. Com essa inteno, podemos usar o dois-pontos (:) para separar
as posies inicial e final do vetor gerador ou as posies inicial e final das linhas
e das colunas de uma matriz geradora.
Assim, VET(3:5)= [5 7 9] e MAT(2:3,1:2)= [ 27 48 ]. Caso voc queira refe-
renciar uma linha ou uma coluna toda basta colocar apenas o dois-pontos e mais
nada: VET(:)= [1 3 5 7 9 2 4 6 8], MAT(2:3,:)= [ 27 48 69 ].
O Cdigo 2.2 nos mostra exemplos do referenciamento.

Pet - Eng. de Teleinformtica UFC


Captulo 2. Vetores e Matrizes 17

Cdigo 2.2 Referenciamento em arranjos do Matlab


>> v = [ 4.5 9.86 7.85 9.23 1 2.2]
v =

4.5000 9.8600 7.8500 9.2300 1.0000 2.2000

>> v(3) = 12 % possivel alterar os valores anteriores


v =

4.5000 9.8600 12.0000 9.2300 1.0000 2.2000

>> resp = exp(-v(6))*cos(v(3))+v(1) % E manipul-los


resp =

4.5935

>> m = [v;1 2 3 6 5 4;7.8 9.45 12.3 10.6 4.5 4.5;7 8 9 1 4 7]


m =

4.5000 9.8600 7.8500 9.2300 1.0000 2.2000


1.0000 2.0000 3.0000 6.0000 5.0000 4.0000
7.8000 9.4500 12.3000 10.6000 4.5000 4.5000
7.0000 8.0000 9.0000 1.0000 4.0000 7.0000

>> resp2 = m(3,2)^m(2,2) + sin(m(2,1)) - log(m(4,1))


resp2 =

88.1981

>> m1 = m(3,:)
m1 =

7.8000 9.4500 12.3000 10.6000 4.5000 4.5000

>> m2 = m(:,5)
m2 =

1.0000
5.0000
4.5000
4.0000

>> m3 = m(2:4,1:3)
m3 =

1.0000 2.0000 3.0000


7.8000 9.4500 12.3000
7.0000 8.0000 9.0000

UFC Pet - Eng. de Teleinformtica


18 Apostila de Matlab

2.2.2 A eliminao de elementos em vetores e matrizes


Para eliminar um conjunto de elementos de um arranjo, basta referenci-lo e
igual-lo a um abre e fecha colchetes ([]), das seguinte forma, dado um vetor VET
e uma matriz MAT2 :

VET(pi:pf) = [] , MAT(li:lf,ci:cf) = []

O Cdigo 2.3 mostra a eliminao de alguns elementos em matrizes e vetores.


Cdigo 2.3 Eliminando elementos em vetores e matrizes
>> v = [23 45 78 96 41 12]
v =

23 45 78 96 41 12

>> v(1:4) = []

v =

41 12

>> m = [1 2 3 4 5;2 4 6 8 10;3 6 9 12 15]


m =

1 2 3 4 5
2 4 6 8 10
3 6 9 12 15

>> m(:,3) = [] % Exclui a


m =

1 2 4 5
2 4 8 10
3 6 12 15

>> m(1,:) = []
m =

2 4 8 10
3 6 12 15

>> m(:,2:4) = [] % Note a necessidade de um parmetro ser (:)


m =

2
3

2
Para uma matriz no ficar quebrada, necessrio que, dada uma sequncia de linhas (li:lf)
a ser eliminada, tambm sejam eliminadas todas as colunas correspondentes e vice-versa.

Pet - Eng. de Teleinformtica UFC


Captulo 2. Vetores e Matrizes 19

2.3
Operaes com arranjos

2.3.1 Operaes aritmticas


Em Matlab R
, como a de se prever, possvel realizar toda e qualquer operao
aritmtica bsica com matrizes. Portanto, usando alguns conhecimentos de lgebra
Linear e as matrizes-exemplo A = [ 13 24 ] e B = [ 25 37 ], estas so as operaes aritmticas
do Matlab:

Adio e Subtrao (+ e -) Com A e B de mesmas dimenses, a soma


comum de matrizes:
>> A+B >> A-B >> (-3)*B
ans = ans = ans =

3 5 -1 -1 -6 -9
8 11 -2 -3 -15 -21

Multiplicao (*) Como matricial, o nmero de colunas do primeiro fator


deve ser igual ao nmero de linhas do segundo:
>> A*B >> B*A
ans = ans =

12 17 11 16
26 37 26 38

Exponenciao () Multiplicao repetida de uma matriz, necessita que ela


seja quadrada:
>> A^2 >> B^3 >> A^(-1) % Inversa de A
ans = ans = ans =

7 10 173 246 -2.0000 1.0000


15 22 410 583 1.5000 -0.5000

Diviso esquerda (\) Para resoluo de equaes algbricas como M x = y


(x e y vetores-coluna), esse comando pode ser utilizado. Outra forma de
coloc-la em uso a operao (A(-1))*B. Alguns exemplos:
>> A\B >> B\A
ans = ans =

1.0000 1.0000 2.0000 -2.0000


0.5000 1.0000 -1.0000 2.0000

UFC Pet - Eng. de Teleinformtica


20 Apostila de Matlab

Diviso direita (/) til na resoluo de sistemas lineares do tipo x| M =


y| (x| e y| vetores-linha), ela corresponde multiplicao A*B(-1). Dessa
forma:
>> A/B >> B/A
ans = ans =

3.0000 -1.0000 0.5000 0.5000


-1.0000 1.0000 0.5000 1.5000

Alm dessas operaes bsicas, o Matlab fornece outras operaes bem simila-
res e de grande aplicabilidade, s vezes maior que a das apresentadas acima. Essas
so as operaes ponto a ponto, ou seja de elemento a elemento da matriz, algo como
a soma e a subtrao de matrizes fazem naturalmente. Essas operaes so:
Multiplicao ponto a ponto (.*) Multiplica cada elemento no primeiro fa-
tor pelo correspondente no segundo (assim, A.*B=B.*A):
>> A.*B % = B.*A
ans =

2 6
15 28

Exponenciao ponto a ponto (.) Eleva a um expoente cada elemento da


matriz sendo operada:
>> A.^2 >> B.^3
ans = ans =

1 4 8 27
9 16 125 343

Diviso ponto a ponto direita (./) Divide cada elemento no primeiro fa-
tor pelo correspondente no segundo:
>> A./B
ans =

0.5000 0.6667
0.6000 0.5714

Diviso esquerda (.\) Divide cada elemento no segundo fator pelo corres-
pondente no primeiro (ou seja, para A e B, A.\B = B./A):
>> A.\B
ans =

2.0000 1.5000
1.6667 1.7500

Pet - Eng. de Teleinformtica UFC


Captulo 2. Vetores e Matrizes 21

2.3.2 Operaes lgicas e relacionais


Com o objetivo geral de tomada de deciso, presente em todas as linguagens
de programao, o Matlab possui os operadores bsicos das expresses lgicas
booleanas. Eles so os seguintes:

Tabela 2.1 Tabela 2.2


Operadores relacionais Operadores lgicos

Carac. Funo Carac. Funo Carac. Funo


< Menor que >= Maior ou igual a & AND
<= Menor ou igual a == Igual a (lgico) | OR
> Maior que = Diferente de NOT

Os operadores acima geram repostas do tipo verdadeiro/falso, representados em


linha de comando por 1 e 0, respectivamente. Note que vetores e matrizes, bem como
escalares, podem ser operados dessa forma. O Cdigo 2.4 nos mostra a utilizao
desses processos:

Cdigo 2.4 Operaes lgicas e relacionais em Matlab


>> a = [1 2 3 4;5 6 7 8]; b = [0 3 9 4;6 6 1 2];
>> a > b % Elementos de a maiores que de b
ans =

1 0 0 0
0 0 1 1

>> (a > b) & (a < b) % Impossivel ser maior E menor


ans =

0 0 0 0
0 0 0 0

>> c = (a == b) % c recebe valores lgicos de a iguais a b


c =

0 0 0 1
0 1 0 0

>> d = (a >= 4) & (a < 7) % d recebe valores de a >=4 E <7


d =

0 0 0 1
1 1 0 0

Note que, a cada relao verdadeira entre as ditas matrizes, o resultado retorna
como 1, enquanto, a cada informao falsa, ele retorna 0.

UFC Pet - Eng. de Teleinformtica


22 Apostila de Matlab

2.4
Funes matriciais do Matlab
Conhecido o principal tipo de dado do Matlab R
, o tipo matricial, pode-se defi-
nir a sintaxe geral de qualquer funo desse software, tendo em vista que boa parte
de todos os argumentos possveis so em forma de matrizes (ou vetores, matrizes
de um a linha/coluna, ou escalares, matrizes de um nico elemento). Assim, essa
sintaxe :

[saida1,saida2,...,saidaN ] =
nome_da_funcao(entrada1,entrada2,...,entradaN )

Perceba que as entradas podem ser vetores, matrizes ou escalares, o mesmo para
as sadas, e que os parmetros de sada so limitados por colchetes, enquanto os de
entrada, limitados por parnteses. Caso as variveis de sada no sejam fornecidas
pelo usurio, o programa retorna apenas a primeira sada (saida1) na varivel
padro ans. Na Seo 2.6, voc ir perceber, tambm, que certas funes retornam
um padro de resposta quando uma varivel de sada especificada e outro padro
quando mais de uma sada indicada.
Por fim, til mostrar que todas as funes bsicas que vimos no captulo an-
terior so tambm consideradas funes matriciais3 , pois podem receber matrizes
ou vetores como argumentos. Nessas funes, os elementos do arranjo de seu argu-
mento so aplicados como meros escalares, como no Captulo 1. O cdigo a seguir
nos mostra isso.
Cdigo 2.5 Exemplo de funo com argumento matricial
>> v = [0:pi/4:pi]% Vetor de ngulos (0o , 90o , 180o , 270o , 360o )
>> resp = cos(v)
resp =

1.0000 0.7071 0.0000 -0.7071 -1.0000

>> resp3 = exp([1,pi,6]) % Um vetor direto como argumento


resp3 =

2.7183 23.1407 403.4288

>> m = [1 4 9;16 25 36;49 64 81];


>> resp2 = sqrt(m)
resp2 =

1 2 3
4 5 6
7 8 9

3
Uma lista maior de funes matriciais pode ser encontrada na Seo 2.6 e esta pode ser acoplada
lista do Captulo 1.

Pet - Eng. de Teleinformtica UFC


Captulo 2. Vetores e Matrizes 23

2.5
Aplicaes

R1
Aplicao 2.1 A figura ao lado mostra
um circuito eltrico composto de resistores e
+
fontes de tenso. V1 i1
Utilizando o Matlab, determine as cor- R2 R3
rentes i1 , i2 , i3 e i4 que percorrem cada resistor
valendo-se da Lei de Kirchhoff para tenses e
+
o mtodo das correntes de malha. R4 i3 V2
Dados:
R5 i2
DDPs: V1 = 20V , V2 = 12V , V3 = 40V ;
R6
R7 V
Resitncias: R1 = 18, R2 = 10, R3 = i4 + 3
16, R4 = 6, R5 = 15, R6 = 8,
R7 = 12, R8 = 14.
R8

Soluo Este um exemplo clssico do poder de resoluo de sistemas lineares


que o Matlab possui.
A partir dos conhecimentos do ensino mdio das leis das tenses (ou lei das
malhas) de Kirchhoff, sabemos que a energia potencial total de uma corrente que
percorre uma malha zero. Assim, lembrando que a fonte de tenso um prove-
dor de potencial eltrico, quando seus polos esto no sentido da corrente, ou um
sorvedouro de energia, quando em sentido contrrio, e que a corrente total em um
resistor na fronteira das malhas a soma das correntes de cada malha (de acordo
com o sentido de cada uma), podemos gerar uma equao para cada malha. Essas
equaes so linearmente independentes e podemos escrev-las na forma:


V1 R1 i1 R3 (i1 i3 ) R2 (i1 i2 ) =0

R i R (i i ) R (i i ) R (i i ) = 0
5 2 2 2 1 4 2 3 7 2 4
V2 R6 (i3 i4 ) R4 (i3 i2 ) R3 (i3 i1 )
=0

V3 R8 i4 R7 (i4 i2 ) R6 (i4 i3 )

=0
ou em sua forma matricial Ai = y (se tiver dvidas, confira as multiplicaes):
(R1 + R2 + R3 ) R2 R3 0 i1 V1

R2 (R2 + R4 + R5 ) R4 R7 i
2
0

=
(R3 + R4 + R6 )

R3 R4 R6 i3 V2
0 R7 R6 (R6 + R7 + R8 ) i4 V3
| {z } | {z } | {z }
A i y

Dessa forma, basta agora usar o Matlab


R
e sua diviso esquerda de matrizes,
como o Cdigo 2.6 nos mostra.

UFC Pet - Eng. de Teleinformtica


24 Apostila de Matlab

Cdigo 2.6 Aplicao 2.1


>> V1 = 20; V2 = 12; V3=40;
>> R1 = 18; R2 = 10; R3 = 16; R4 = 6;
R5 = 15; R6 =8; R7 = 12; R8 = 14;
>> A = [-(R1+R2+R3) R2 R3 0;
R2 -(R2+R4+R5+R7) R4 R7;
R3 R4 -(R3+R4+R6) R6;
0 R7 R6 -(R6+R7+R8)]
A =

-44 10 16 0
10 -43 6 12
16 6 -30 8
0 12 8 -34

>> y = [-V1;0;V2;-V3]
y =

-20
0
12
-40

>> i = A\y % Vetor de respostas


i =

0.8411
0.7206
0.6127
1.5750

Assim, i1 = 0.8411 A, i2 = 0.7206 A, i3 = 0.6127 A e i4 = 1.5750 A.


..................................................................................
Aplicao 2.2 Uma das formas de obter o nmero de Euler e, que vale
aproximadamente 2.718282, :

X 1 1 1 1 1
e= = + + + +
n=0
n! 0! 1! 2! 3!

Use o Matlab para mostrar que, para n indo de 0 a 10, o erro de aproximao
menor que 107 .
Soluo Aqui, podemos notar o poder e a praticidade das operaes ponto
a ponto do Matlab. Podemos perceber que a definio de e nada mais que a
diviso elemento a elemento de um vetor de 1s por um vetor dos fatoriais dos
nmeros naturais (0, 1, 2, 3, 4, 5...) e sua posterior soma. Esse ser o algoritmo que
iremos implementar no Matlab. Assim, fazendo o uso das funes sum(v), que
soma os elementos de v, e factorial(n), que calcula o fatorial de n, podemos
gerar o seguinte cdigo:

Pet - Eng. de Teleinformtica UFC


Captulo 2. Vetores e Matrizes 25

Cdigo 2.7 Aplicao 2.2


>> format long % Nmeros com mais casas decimais
>> num = ones(1,11); % Vetor de 1s como numerador do somatrio
>> aux = 0:10; % Vetor auxiliar: [0 1 2 3 4 5 6 7 8 9 10]
>> denom = factorial(aux); % Denominador do somatrio
>> div = numer./denom; % Div = [1/0!, 1/1!, 1/2!, ... , 1/10!]
>> resp = sum(div)
resp =

2.718281801146385

>> erro = exp(1)-resp % Atente ao expoente deste clculo


erro =

2.731266102173890e-008

Percebe-se a praticidade desse processo (que, diminuindo o nmero de variveis,


poderia ser mais prtico) em relao a, por exemplo, um clculo assim em C.
..................................................................................
Aplicao 2.3 Em lgebra Linear, uma matriz M 4 pode sofrer uma decom-
posio espectral (ou autodecomposio) da seguinte forma:

M = QQ1

onde, Q a matriz de auto-vetores de M , Q1 sua inversa e uma matriz


diagonal com os auto-valores de M. Use o Matlab para mostrar os seguintes fatos
dessa decomposio:
a - A multiplicao QQ1 realmente retorna M ;
b - O trao (soma dos elementos da diagonal principal) de M igual ao de ;
Q
c - O determinante de M a i (onde i so os auto-valores de M ).
i

Soluo Esta aplicao til para colocarmos em prtica algumas funes do


matriciais do Matlab. A principal delas aqui eig(M), que, quando com duas
sadas, retorna a matriz de auto-vetores de M (ou seja Q) e uma matriz diagonal de
seus auto-valores (ou seja, ). Quando com uma sada, eig(M) corresponde a um
vetor de auto-valores de M. Alm dessa funo, det(M) (calcula o determinante de
M), trace(M) (calcula o trao), prod(v) (produto dos elementos de v) e inv(M)
(inversa de M) tambm so utilizadas no cdigo a seguir:
Cdigo 2.8 Aplicao 2.3
>> M = [1 4 9;16 25 36;49 64 81]
M =

1 4 9
16 25 36
49 64 81
4
Essa matriz, deve, na verdade, ser diagonalizvel antes de tudo.

UFC Pet - Eng. de Teleinformtica


26 Apostila de Matlab

>> [Q Lambda] = eig(M) % Duas sadas para eig(M)


Q =

-0.0876 -0.5624 0.5222


-0.3908 -0.4838 -0.7936
-0.9163 0.6705 0.3123

Lambda =

112.9839 0 0
0 -6.2880 0
0 0 0.3040

>> Q*Lambda*(inv(Q)) % -ITEM a (ento, decomposio certa)


ans =

1.0000 4.0000 9.0000


16.0000 25.0000 36.0000
49.0000 64.0000 81.0000

>> trace(M)-trace(Lambda) % -ITEM b (portanto, traos iguais)


ans =

-4.2633e-014

>> AutoVal_M = eig(M) % Vetor de auto-valores de M


AutoVal_M =

112.9839
-6.2880
0.3040

>> det(M)-prod(AutoVal_M) % -ITEM c (assim, igualdade correta)


ans =

-6.3949e-012

Note que o Matlab, nesses casos, nunca dar um zero exato como resposta e
sempre apresentar resultados to prximos dele que podero ser considerados nulos
(como 4.2633 1014 e 6.3949 1012 ).
..................................................................................
Aplicao 2.4 Defina os pontos P (1, 2, 3) e Q(2, 1, 3) e um vetor n =
2ux + 2uy + 3uz e com, uma subtrao e um produto escalar, mostre, pelo Matlab,
que Q no est no plano que contm P e normal a n.
Soluo Nesse caso, alm dos conhecimentos de geometria de vetores e um
pouco de lgica, necessrio o usurio do Matlab saber como diferenciar, na
prtica, as representaes dos pontos no plano (arranjos com as coordenadas x, y e
z) e dos vetores em si (arranjos com as componentes deles em ux , uy e uz ).

Pet - Eng. de Teleinformtica UFC


Captulo 2. Vetores e Matrizes 27

Voltando ao problema, vemos que, para os pontos P e Q estarem no mesmo


plano normal (P j est, por definio) a n, a reta que os liga deve fazer 90o com o

vetor n, ou seja, n P Q = 0, onde P Q o vetor-distncia P Q. O Matlab dispe
da funo dot(v1,v2) para o clculo do produto escalar de v1 e v2. O Cdigo
abaixo implementa o discutido e esclarece a dificuldade do pargrafo anterior.
Cdigo 2.9 Aplicao 2.4
>> P = [1 -2 3]; Q = [2 -1 3]; % Define os PONTOS P e Q
>> n = [2 2 3]; % Define o VETOR n
>> dist_PQ = P-Q; % Define o VETOR P-Q
>> dot(dist_PQ,n) % Testa o produto escalar pedido
ans =

-4

Como o produto no-nulo, o ponto Q no est no plano normal a n que contm


P . Note que, para contornar a dificuldade falada anteriormente, basta pensar nos
pontos P e Q como vetores-posio e manipul-los como tais.

2.6
Lista de funes matriciais do Matlab
A seguir so apresentadas funes teis na criao e manipulao de matrizes.
Nos argumentos dessas funes usaremos o seguinte padro de variveis: v (ou v1,
v2, ...) para vetores, M (ou M1, M2, ...) para matrizes e n (ou m, s1, s2, ...) para
escalares. As funes em negrito so as de relativo uso maior.
Tabela 2.3 Informaes bsicas sobre arranjos

Funo Descrio
length(v) Determina o nmero de elementos no vetor v.
size(M) Retorna em um vetor o nmero de linhas (1o elemento)
e o de colunas (2o elemento) de M.
max(v)/max(M) Determina o elemento de maior valor no vetor v. /De-
termina em um vetor-linha os elementos de maior valor
em cada coluna de M.
min(v)/min(M) Determina o elemento de menor valor no vetor v. /De-
termina em um vetor-linha os elementos de menor valor
em cada coluna de M.
mean(v) Retorna a mdia dos elementos de v.
median(v) Retorna o valor mediano entre os elementos de v.
std(v) Retorna o valor do desvio-padro dos elementos de v.

UFC Pet - Eng. de Teleinformtica


28 Apostila de Matlab

Tabela 2.4 Criao de arranjos bsicos

Funo Descrio
diag(v)/ diag(A) Cria uma matriz com os elementos de v na diagonal
principal. / Cria um vetor-coluna com os elementos
da diagonal principal de A.
eye(n) Cria uma matriz identidade n por n.
linspace(s1,s2,n) Cria um vetor-linha comeando em s1, terminando
em s2 e com n termos linearmente espaados.
logspace(s1,s2,n) Cria um vetor-linha comeando em s1, terminando
em s2 e com n termos logaritmicamente espaados.
ones(n,m) Cria uma matriz de 1s n por m.
rand(n,m) Cria uma matriz com nmeros pseudoaleatrios uni-
formemente distribudos n por m.
randn(n,m) Cria uma matriz com nmeros pseudoaleatrios nor-
malmente distribudos n por m.
randperm(n) Cria um vetor-linha contendo uma permutao alea-
tria de nmeros de 1 at n.
zeros(n,m) Cria uma matriz de 0s n por m.

Tabela 2.5 Operaes com vetores e matrizes

Funo Descrio
cross(v1,v2) Retorna o produto vetorial entre v1 e v2.
dot(v1,v2) Retorna o produto escalar entre v1 e v2.
prod(v)/prod(M) Determina o produto dos elementos do vetor v. / De-
termina, em um vetor-linha, o produto dos elementos
de cada coluna de M.
sum(v)/sum(M) Determina a soma dos elementos do vetor v. / De-
termina, em um vetor-linha, a soma dos elementos de
cada coluna de M.
cumsum(v) Retorna um vetor com a soma cumulativa dos elemen-
tos de v de acordo com a sua posio nele.
sort(v)/sort(M) Ordena os elementos de v em ordem crescente. / Or-
dena os elementos das colunas de M em ordem crescente.
tril(M) Retorna a matriz triangular inferior de M.
triu(M) Retorna a matriz triangular superior de M.

Pet - Eng. de Teleinformtica UFC


Captulo 2. Vetores e Matrizes 29

Tabela 2.6 lgebra linear

Funo Descrio
det(M) Retorna o determinante da matriz quadrada M.
eig(M) Com uma sada indicada, retorna o vetor-coluna de auto-
valores. Com duas sadas, retorna uma matriz de auto-
vetores e uma matriz diagonal de auto-valores.
inv(M) Retorna a matriz inversa de M.
transpose(M) Retorna a matriz transposta de M (mais eficiente que a uti-
lizao do operador ).
lu(M) Com duas sadas, retorna a matriz triangular superior e a
inferior da Decomposio LU de M.
norm(v) Retorna a norma de v.
rank(M) Retorna o rank (posto) de M.
rref(M) Retorna a forma escalonada de M.
trace(M) Retorna o trao da matriz M.

Tabela 2.7 Operaes com polinmiosa

Funo Descrio
poly(v1) Cria um vetor-polinmio cujas razes so os elementos de v1.
polyder(v) Retorna a derivada de v em forma de vetor.
polyint(v,n) Retorna a integral de v com constante de integrao n.
polyval(v,n) Determina o valor do polinmio v em x = n.
roots(v) Determina, em um vetor-coluna, as razes de v.
conv(v1,v2) Convolui v1 e v2 (aqui, o mesmo que multiplicar v1 e v2).
a
No Matlab R
, polinmios como P = an xn + an1 xn1 + ... + a2 x + a1 so representados como
o vetor p = [an an1 ... a2 a1 ]. Nesta tabela, v representa um vetor com os coeficientes de
um polinmio qualquer.

Tabela 2.8 Outras funes

Funo Descrio
perms(v) Retorna uma matriz cujas linhas correspondem a todas as
permutaes dos elementos de v.
primes(n) Retorna um vetor com todos os nmeros primes menores ou
igual a n.
magic(n) Cria um quadrado mgico n por n.

UFC Pet - Eng. de Teleinformtica


Captulo 3

Rotinas e Programao

m importante atributo do Matlab


U
R
a capacidade de desenvolvi-
mento de uma programao estruturada em seu ambiente. Uma forma
de programao, diga-se de passagem, muito parecida com a Linguagem C.
Muitos dizem, inclusive, que programar em Matlab como programar em
C com mais liberdade. Isso porque muitos aspectos de nosso software em
estudo favorecem uma estruturao mais ordenada e simples de ideias em
forma de cdigo estruturado mais funcional e especializado.

Neste captulo veremos importantes noes de programao em Matlab e,


para isso, faremos uso da janela Editor. De fato, at aqui, todos os comandos
foram executados no Command Window. Como esses comandos no podem
ser salvos e executados outras vezes, passaremos a criar uma lista de coman-
dos em scripts, salv-la e execut-la depois. Tais scripts tambm favorecem
a utilizao de laos e sentenas condicionais e a criao de funes prprias
do usurio, alm de poderem ser editadas.

Voc ver que, neste ponto, a cincia da modelagem e simulao se une


programao estruturada, podendo, assim, expandir suas capacidades de
uma forma prtica e concisa. Assim, como todo aprendizado em cincias
da computao, basta a prtica e o uso da lgica computacional para um
usurio obter os resultados desejados.

3.1
Scripts no Matlab
Para comear a criao de script (tambm chamado de M-file), devemos criar um
modelo em branco. Isso feito indo ao menu File New Script (ou M-file,
em algumas verses do Matlab R
), de acordo com o idioma do software utilizado1 .
Ento aparecer a janela Editor, apresentada na Figura 3.1. Fique atento, alm
disso, janela Current Folder, pois por ela que saberemos em qual pasta o nosso
1
Vale dizer que qualquer programa gerador de arquivos de texto pode criar uma M-file, bastando
este ser salvo com a extenso .m ao final.
32 Apostila de Matlab

script, depois de salvo, ir se localizar e onde ele rodar.

Figura 3.1 Editor, ambiente para criao de scripts

3.1.1 Criando e executando uma rotina


Tendo aberto uma janela do Editor, o processo de criao de um script resume-
se a digitar a sequncia de declaraes, funes e clculos que voc deseja. Depois
de finalizado esse trabalho, voc deve salvar tal aquivo e o nome desse arquivo
representar o conjunto de comandos que voc quer executar. Um exemplo de
rotina salva como exemplo.m (a extenso do arquivo colocada automaticamente
depois dele ser salvo) encontra-se abaixo.
Cdigo 3.1 A rotina exemplo.m
%% Exemplo de um script (M-file)
% Este programa cria um vetor de nmeros de 1 at 7, multiplica
% escalarmente ele por ele mesmo e, depois, tira sua raiz.
x = [1:7]
y = dot(x,x);
mod = sqrt(y)

Note a inexistncia do smbolo >> no comeo de cada linha, sinal de que


estamos escrevendo um cdigo no Editor. Tambm atente facilidade de se escrever
comentrios2 . Essa uma importante caracterstica do Matlab R
que traz eficincia
produo de cdigos nele. For fim, salve o script com um nome diferente de
qualquer varivel existente na prpria rotina ou no atual Workspace.
Depois de salvo (neste caso com o nome exemplo.m), j podemos execut-lo.
Para isso, voc deve certificar-se que sua pasta atual, apresentada na janela Current
Folder, a pasta onde se encontra sua M-file, seno, procure-a e selecione-a. Feito
isso, voc pode agir de trs formas para executar sua rotina recm-criada:
1. Digite o nome do arquivo (sem o .m) de sua rotina no Command Window
depois de >> e tecle Enter ;
2. No Editor, aperte F5 (run);
3. No Editor, tecle no cone (este varia de acordo com a verso do Matlab).
2
Em verses mais atuais do Matlab o uso da dupla porcentagem (%%) enfatiza mais o cometrio
feito e organiza o cdigo em blocos, tendo em vista a documentao dele.

Pet - Eng. de Teleinformtica UFC


Captulo 3. Rotinas e Programao 33

Se, ao executar uma rotina pelas for-


mas 2 ou 3, aparecer uma janela como a ao
lado, sinal de que voc no est na pasta
do arquivo. Para resolver, basta clicar em
Change Folder, que mudar sua pasta atual
para a que o cdigo desejado est.
O cdigo a seguir executa a rotina exemplo.m pelo Command Window :
Cdigo 3.2 A execuo de exemplo.m
>> exemplo
x =

1 2 3 4 5 6 7

mod =

11.8322

>> y % valor de dot(x,x)


y =

140

Voltando rotina presente no Cdigo 3.1, note que apenas apareceram os re-
sultados dos comandos que no tinham o ponto-e-vrgula (;) ao final da linha e
que, no fim, a execuo seguiu a sequncia prevista. Perceba, tambm, que o script
cria variveis que podem ser utilizadas no decorrer de outros comandos e cdigo.
Fique atento, portanto, aos nomes de suas variveis atuais, pois elas podem ser
substitudas com a execuo de alguma rotina.
Variveis que j existem tambm podem ser teis em uma rotina. O script e o
cdigo executado abaixo nos mostram isso:
Cdigo 3.3 A (nova) rotina exemplo.m
y = dot(x,x);
mod = sqrt(y)

Cdigo 3.4 A execuo do novo exemplo.m


>> x = [1:7];
>> exemplo
mod =

11.8322

>> x = [1:8];
>> exemplo
mod =

14.2829

UFC Pet - Eng. de Teleinformtica


34 Apostila de Matlab

Pereba que podemos, assim alterar o valor de x, varivel presente na nova rotina
exemplo.m.
Por fim, basta salientar que, se existir um ou mais erros (de sintaxe de funes,
matemtico ou outros) em uma rotina, ela ir ser executada at a linha do primeiro
erro e o Matlab evidenciar e comentar apenas esse primeiro erro e, quando este
for ajeitado, aparecer o segundo erro (se existir) e assim sucessivamente.

3.1.2 Os comandos input e disp


Esses so dois comandos do Matlab utilizados dentro de M-files que propi-
ciam uma certa comunicao entre uma rotina e o usurio dela. Primeiramente, o
comando input possui a seguinte sintaxe:

var = input(string de texto)

Essa funo exibe no Command Window a string que est em seu argumento e
espera, no caractere seguinte, algum valor para ser atribudo a varivel var. Assim
essa funo til para importarmos valores (entradas) s variveis de uma rotina.
De forma parecida, existe o comando disp, cuja sintaxe :

disp(nome_da_variavel) ou disp(string de texto)

Ela exibe no display (Command Window ) a varivel ou a string de texto em


seu argumento. Nota-se que ela til para mostrar os resultados de uma rotina em
execuo ou que j foi executada. A rotina abaixo faz uso dessa funes.
Cdigo 3.5 O uso de input e disp
disp(MEDIA DOS ELEMENTOS DE UM VETOR);

% Recebe o vetor
x = input(- Digite um vetor: );

% Faz os clculos com esse vetor para se obter a mdia


med = sum(x)/length(x);

% Apresenta os resultados
disp( ); % Pula uma linha
disp(A mdia dos elementos desse vetor :);
disp(med)

Cdigo 3.6 Execuo da rotina acima


>> media % Chama a rotina
MEDIA DOS ELEMENTOS DE UM VETOR
- Digite um vetor: [1.2 4.5 7.8 9.6] % Digita um vetor qualquer

A mdia dos elementos desse vetor :


5.7750

Pet - Eng. de Teleinformtica UFC


Captulo 3. Rotinas e Programao 35

3.2
Criando Funes
Esta seo, embora fcil de entender e rpida, de vital importncia no entendi-
mento do Matlab, pois em muitas ocasies voc utilizar funes criadas por voc
ao invs de simples rotinas.
Funes so muito parecidas com os scripts criados at agora, pois elas tambm
so M-files (arquivos .m) e, portanto, tambm so criadas na janela Editor. Para
criar uma funo, deve-se, na primeira linha do Editor, digitar o nome da funo,
suas entradas e suas sadas, da seguinte forma:

function [s1,s2,...,sN] = nome_da_funcao(e1,e2,...,eN)

Essa sempre ser a primeira linha de uma M-file que contenha uma funo,
j que ela que define o arquivo em questo como um arquivo de funo. Note
que ns definimos a quantidade e o nome de todas as variveis que entraro na
funo (e1, e2, . . . eN) e que sairo (retornaro) da mesma (s1, s2, . . . e sN). Tais
variveis de entrada sero utilizadas durante a execuo e, quando a funo finalizar
sua utilidade, ela procurar as variveis de sada com os nomes especificados e as
retornaro.
Digitada a primeira linha, as prximas linhas do M-file so para, optativamente,
se documentar a funo que se est em construo com diversos comentrios sobre
ela. Isso interessante pois so esses primeiros comentrios que aparecero no
Command Window quando digitarmos help nome_da_funcao. Essa uma
importante prtica para entendermos como a funo atua.
Depois do ltimo comentrio, so colocados os clculos e frmulas em que as
entradas estaro presentes, da mesma forma de uma rotina como que fizemos na
seo passada. Terminada a funo, basta salv-la, lembrando que o nome da M-file
correspondente a ela deve ser o mesmo nome da funo em si.
O cdigo a seguir nos mostra um exemplo de funo de converso de temperatu-
ras (nome da funo TransformaTemp e o seu arquivo TransformaTemp.m):

Cdigo 3.7 Exemplo de funo no Matlab


function [TempF TempK TempR] = TransformaTemp(TempC)
% Retorna o valor em graus Fahrenheit, em Kelvin e em graus
% Rankine de uma temperatura em graus Celsius.
% - ENTRADA: TempC (Temperatura em graus Celsius)
% - SAIDAS: TempF (Temperatura em graus Fahrenheit)
% TempK (Temperatura em Kelvin)
% TempR (Temperatura em graus Rankine)

TempK = TempC+273;
TempF = 1.8*TempC+32;
TempR = 1.8*TempK;

UFC Pet - Eng. de Teleinformtica


36 Apostila de Matlab

Cdigo 3.8 Execuo da funo do Cdigo 3.7


>> help TransformaTemp
Retorna o valor em graus Fahrenheit, em Kelvin e em graus
Rankine de uma temperatura em graus Celsius.
- ENTRADA: TempC (Temperatura em graus Celsius)
- SAIDAS: TempF (Temperatura em graus Fahrenheit)
TempK (Temperatura em Kelvin)
TempR (Temperatura em graus Rankine)

>> [x y z] = TransformaTemp(20)
x =

68
y =

293
z =

527.4000

>> t = TransformaTemp(20) % Retornar s a temperatura em oF

t =

68

Note que no somos obrigados a expressar as variveis de entrada com os mes-


mos nomes que elas possuem dentro da funo. Alm disso, note que, se colocarmos
menos variveis de sada, nosso retorno ter apenas a quantidade de sadas espe-
cificadas. Essa quantidade no pode, entretanto, exceder o nmero de retornos da
funo.

3.3
Estruturas de Deciso e de Repetio

Assim como toda linguagem de programao, o Matlab possui toda um base com-
putacional para tomadas de decises e repetio de comandos, de uma forma muito
semelhante ao C (uma grande diferena a necessidade de se colocar a palavra
end no final de cada sentena, como se ver a seguir). Abordaremos aqui alguns
dos principais componentes desse ferramental provido pelo Matlab R
. Alm disso,
saiba que as estruturas de programao que sero vistas so teis tanto nas rotinas
comuns quanto nas funes.
Por fim, relembre as operaes lgicas e relacionais vistas na Seo 2.3.2, que
retornam um valor lgico 1 ou 0 (verdadeiro ou falso) para alguma condio. Elas
sero teis na formao das condies de cada estrutura que ser vista aqui.

Pet - Eng. de Teleinformtica UFC


Captulo 3. Rotinas e Programao 37

3.3.1 Sentenas condicionais


Estas so as estruturas de tomada de deciso, ou seja, se uma condio for aceita
logicamente (utilizado os operadores lgicos e relacionais), determinado conjunto de
comandos ser executado, seno, esse conjunto ser pulado no fluxo do programa.
Como se sabe, vindo do C, essas estruturas so:
A estrutura if-else Esta a mais simples estrutura e tambm a de lgica mais
fcil. Suas trs possveis sintaxes em Matlab so3 :

if(condio) if(condio 1)

end elseif(condio 2)

if(condio) elseif(condio 3)

else else

end end
Como se sabe, a funcionalidade dessa estrutura ocorre da seguinte forma:
se a condio no if for verdadeira (valor 1), a rotina entra nos comandos
abaixo dele, seno ele testa a validade condio do elseif e entra ou no em
seus comandos. Assim, sucessivamente at chegar no else final (se existir),
em que seu bloco de comandos ir ser cumprido, pois todo os outros blo-
cos resultaram em condies falsas (0 lgico). Note que podem existir vrios
elseifs, mas apenas um else.
A estrutura switch-case Tambm tomada emprestada das outras lingua-
gens de programao modernas, como o C, ela tem a seguinte sintaxe:

switch expresso (normalmente uma varivel)


case valor 1

case valor 2

case valor 3

otherwise

end
Esta estrutura testa, de forma lgica (0 ou 1), se cada valor presente aps
os cases um valor presente na expresso depois de switch (uma varivel).
Assim, se essa varivel for igual a valor 1, a rotina entrar no bloco de
comandos correspondente a ele. Similarmente, se for igual a valor 2, e
da mesma forma para cada case at chegar no optativo otherwise (caso
contrrio), onde a rotina entrar se nenhuma condio acima dele for atendida.
3
O uso dos parnteses opcional.

UFC Pet - Eng. de Teleinformtica


38 Apostila de Matlab

3.3.2 Loops
A utilizao de laos de repetio tambm importantssima na programao
em alto nvel em Matlab, alm disso, como se mostrar, eles podem teis como
ferramenta para montar vetores (algo que no existe em outras linguagens de forma
to fcil). As principais estruturas de repetio so:
O lao for Das estruturas de deciso e de repetio essa, provavelmente a
mais til, no tirando a importncia das outras. Sua utilidade repetir um
bloco de comandos de acordo com um vetor presente em sua primeira linha.
A sua sintaxe comum :
for i = termo_inicial:inc:termo_final

end

Aqui, notamos que i a varivel que ir mudar de valor a cada volta


que o loop realizar, ou seja, ele normalmente atuar como a varivel de ndice
de nosso lao. O i caminhar, a cada volta, no vetor que a ele atribudo,
assim, ele assumir o valor de cada elemento at que esse se finalize. No caso
da mais comum construo desse lao, apresentado acima, o nosso i varia
entre termo_inicial e termo_final com um passo (incremento) inc,
que, se no for especificado, tratado como 1.

O lao while Da mesma forma que em C, esse loop repete uma sequncia de
comando at que a sua condio seja satisfeita. Em, Matlab ele possui a
seguinte forma:

while(condio)

end

De forma simples e eficaz, esse lao testa a validade de condio (uma


expresso lgica-relacional) a cada volta e s finaliza seu procedimento de
repetio quando essa validade for verdadeira.
A rotina a seguir cria o vetor 112 212 612 testa duas formas de se somar seus
 

elementos. Ela e a sua execuo representam uma simples utilizao de exemplo dos
conhecimentos dessa seo:
Cdigo 3.9 Rotina-exemplo ForAndIf.m
% Este cdigo testa a criao de vetores usando o for,
% sua utilidade de repetio, e o uso da estrutura if.

soma = 0; % Valor inicial da soma que ser feita


for i = 1:6 % i ir percorrer o vetor [1 2 3 ... 6]
aux = 1/i^2;
soma = soma + aux;
x(i) = aux; % Cria cada elemento do vetor x
end % end do for

Pet - Eng. de Teleinformtica UFC


Captulo 3. Rotinas e Programao 39

% Agora, a rotina testa se a soma dos elementos de x se mostra


% igual a soma encontrada pelo loop.
if(sum(x) == soma)
disp(Deu certo !!!);
else
disp(Erro encontrado);
end % end do if

Cdigo 3.10 Execuo da rotina acima


>> ForAndIf
Deu certo !!!
>> x
x =

1.0000 0.2500 0.1111 0.0625 0.0400 0.0278

Neste cdigo, presenciamos a utilidade da criao de um vetor pelo lao for. Aqui
x nem tinha sido declarado antes o loop, mas seus elementos, assim que comeou
o lao, foram sendo declarados a cada volta. Note tambm, que foram usados dois
processos de soma de elementos para o vetor x. No final, deu certo, mas saiba que
a funo sum(x) mais eficiente temporalmente (mais rpida) que o lao.

3.4
Aplicaes
Aplicao 3.1 Na aplicao 2.2, usamos o Matlab para testar a validade
de uma das mais simples sries, a expanso de e. Agora, usando uma rotina para
uma situao mais complexa, teste a seguinte srie para :

1
Q 
1+ 4n2 1 4 16 36
n=1 3
15
35

= = 1 1 1
P 1 3
+ 15
+ 35
+
4n2 1
n=1

Como esta convergncia para muito lenta (so necessrios muitos ns),
teste essa frmula para n variando de 0 a 100000.

Soluo Apesar de se mostrar uma frmula complexa, traduzindo ela para


o Matlab, torna-se fcil de resolv-la. Para isso precisamos fazer dois laos: um
para o numerador e outro para o denominador. A rotina abaixo nos apresenta isso:

Cdigo 3.11 Aplicao 3.1, a rotina Aplicacao31.m


% Variveis que sero teis
nMax = 100000;
numerador = 1;
denominador = 0;

UFC Pet - Eng. de Teleinformtica


40 Apostila de Matlab

% Loop para o produtrio do numerador:


for n = 1:nMax
aux1 = 1 + 1/(4*(n^2)-1); % Termo repetido no produtrio
numerador = numerador*aux1;
end

% Loop para o somatrio do numerador:


for n = 1:nMax
aux2 = 1/(4*(n^2)-1); % Termo repetido no somatrio
denominador = denominador + aux2;
end

% Resposta final
resp = numerador/denominador;
disp(O valor de Pi : )
disp(resp)

O trabalho ento est terminado, apesar de que o Matlab ir repetir cada loop
100000 vezes, algo, nesse caso, fcil para ele:

Cdigo 3.12 Execuo do Cdigo 3.11


>> format long
>> Aplicacao31
O valor de Pi :
3.141600507581234

>> pi
ans =

3.141592653589793

Note, que mesmo com 100000 repeties o erro de aproximao ainda relativa-
mente grande.
..................................................................................
Aplicao 3.2 A sequncia de Fibonacci, F = (0, 1, 1, 2, 3, 5, 8, 13, ),
dada pelo seguinte termo geral:

F0 = 0, F1 = 1, Fn = Fn1 + Fn2

Crie uma rotina do Matlab que gere um vetor com os 10 primeiros termos da
sequncia de Fibonacci como seus elementos.

Soluo Este um exemplo simples onde devemos criar um vetor. Apesar de a


sequncia de Fibonacci ser simples, devemos prestar ateno um detalhe quanto a
sua formulao em Matlab R
: quando criarmos um vetor usando um loop, devemos
lembrar que um vetor no pode ter elemento de ndice 0 ou negativo. Assim, nosso
F0 da sequncia acima ser o elemento F(1) do vetor que queremos, F1 ser o
elemento F(2) e, por fim, Fn ser F(n+1). O Cdigo e a execuo a seguir nos
mostram isso:

Pet - Eng. de Teleinformtica UFC


Captulo 3. Rotinas e Programao 41

Cdigo 3.13 Aplicao 3.2, a rotina Aplicacao32.m


for i = 0:11
if (i == 0)
F(1) = 0; % Primeiro Termo
elseif (i == 1)
F(2) = 1; % Segundo Termo
else
F(i+1) = F(i)+F(i-1); % Termo Geral
end
end

disp(Os dez primeiros termos da sequncia de Fibonacci so:)


disp(F);

Cdigo 3.14 Execuo do Cdigo 3.13


>> Aplicacao32
O dez primeiros termos da sequncia de Fibonacci so:
0 1 1 2 3 5 8 13 21 34

..................................................................................
Aplicao 3.3 Uma importante funo em probabilidade e estatstica a
Funo Erro, erf(x). Ela uma integral que no podemos resolver analiticamente
(no podemos encontrar outra funo que corresponda a ela, como se faz com cos2 (x)
ou xex ), apenas numericamente, com aproximaes. A Funo Erro a seguinte:
Zx
2 2
erf(x) = et dt

0

Crie uma funo, com um argumento x do Matlab R


que retorne um valor
aproximado para erf(x), usando um lao de repetio.

Soluo Sabendo que esse no o melhor mtodo para se resolver numeri-


camente uma integral no Matlab (existem outros mtodos numricos que podem
ser aplicados que diminuiriam consideravelmente o tempo de processamento dessa
integral), tentaremos mostrar como resolver essa integral com uma soma.
Isso feito, lembrando da Soma de Riemanm, dizendo que nossa integral pode
2
ser aproximada como um somatrio de vrios valores de f (t) = et , para ts muito
prximos um do outro e variando de 0 a x, multiplicados por um pequeno deslo-
camento x. Esse somatrio, como j vimos, pode ser feito usando um loop for.
Assim, a funo pedida torna-se:
Cdigo 3.15 Aplicao 3.3, a funo FuncErro.m
function erro = FuncErro(x)
% Funo que gera uma aproximao para a Funo Erro de x
% - Procedimento: com um soma, tentaremos aproximar o
% integral em questo, fazendo a diferencial dt
% como um valor pequeno e t variando de 0 a x.

UFC Pet - Eng. de Teleinformtica


42 Apostila de Matlab

dt = 0.000001; % Incremento diferencial


integral = 0;

% Soma que gerar a integral pedida


for t = 0:dt:x
aux = exp(-t^2)*dt;
integral = integral + aux;
end

erro = 2/sqrt(pi)*integral;

Note que usamos um incremento muito pequeno. Quanto menor ele, melhor ser
nossa aproximao. Para testar nossa funo, podemos comparar o resultado dela
para um nmero qualquer com o resultado da funo nativa do Matlab erf(x),
tambm para funo erro, e notamos que a ossa funo foi bem sucedida:
Cdigo 3.16 Execuo do Cdigo 3.15
>> format long
>> FuncErro(1)
ans =

0.842701564692999

>> erf(1)
ans =

0.842700792949715

3.5
Lista de funes para rotinas no
Matlab
Sero apresentadas a seguir algumas funes teis durante a programao e a
criao de rotinas no Matlab para informaes lgicas sobre arranjos, por exemplo.
Aqui, seguiremos o padro de M (ou M1, M2, ...) representando matrizes quaisquer.
Tabela 3.1 Identificao lgica das informaes

Funo Descrio
all(M) Determina logicamente se todos os elementos de M so no-zero
(verdadeiro lgico).
any(M) Determina logicamente se todos os elementos de M so zero (falso
lgico).

Pet - Eng. de Teleinformtica UFC


Captulo 3. Rotinas e Programao 43

isequal(M1,M2,...) Retorna logicamente (1 ou 0) quais elementos dos


vetores M1,M2,... so iguais.
isequaln(M1,M2,...) Retorna (1 ou 0) quais elementos dos vetores
M1,M2,... so iguais, tratando NaNs (Not a
Number ) como iguais.
isfinite(M) Retorna (1 ou 0) quais os elementos de M so finitos.
isinf(M) Retorna (1 ou 0) quais os elementos de M so infini-
tos.
isnan(M) Retorna (1 ou 0) quais os elementos de M so NaN
(Not a Number ).
isreal(M) Retorna (1 ou 0) quais os elementos de M so reais
(no possuem parte imaginria).

Tabela 3.2 Outras Operaes Lgicas

Funo Descrio
and(M1,M2) Operao lgica AND (O mesmo que &).
or(M1,M2) Operao lgica OR (O mesmo que |).
not(M1,M2) Operao lgica NOT (O mesmo que ).
xor(M1,M2) Operao lgica XOR.
logical(M) Converte valores numricos em lgicos
find(M) Procura os ndices no-zero de M ou que aceitem a condi-
o em seu argumento (por exemplo se find(M>3), ele
procura os valores maiores que 3 em M).

Tabela 3.3 Outras Funes

Funo Descrio
error(string) Este comando exibe uma mensagem de erro, com o
comentrio em string, quando rotina passa por ele,
finalizando-a .
warning(string) Este comando exibe uma mensagem de aviso, com o
comentrio em string quando rotina passa por ele,
sem finaliz-la.
pause(n) Impe uma pausa de n segundos a uma rotina ou
funo.
tic e toc Colocando tic no incio de algum(s) comando(s) e
toc no final, eles retornam o tempo de processa-
mento gasto entre esses comandos.

UFC Pet - Eng. de Teleinformtica


Captulo 4

Grficos em Matlab

U ma das melhores formas de se apresentar resultados e dados em geral


de forma concisa e de fcil discernimento por parte de um leitor, por
exemplo, por meio de grficos e tabelas. Obviamente, o Matlab R
, por
sua vez, possui um extenso ferramental gerador de grficos dos mais diversos
tipos, algo a se esperar de um poderoso software cientfico.

Este captulo, portanto, ir tratar de uma vertente do Matlab mais vol-


tada apresentao dos dados obtidos por meio das modelagens e clculos
matriciais vistos no Captulo 2. Criaremos tambm muitas rotinas para ela-
borao de grficos mais informativos usando os conhecimentos do Captulo
3 e faremos uso intenso de funes nativas do ambiente computacional vi-
sando elaborar grficos em duas e trs dimenses que melhor representem os
dados os quais queremos apresentar.

Por fim, necessrio ressaltar a facilidade existente na manipulao das fun-


es apresentadas nesta parte desta apostila. Assim, basta o leitor pratic-
las, nunca esquecendo os conceitos matemticos por trs delas, para alcanar
o domnio quase completo das aes grficas do Matlab e melhorar seus
trabalhos e suas pesquisas.

4.1
O comando plot() - Desenhando
curvas bidimensionais
A mais simples representao grfica que pode ser feita em Matlab a curva1
gerada pelo comando plot() a partir de, pelo menos, dois vetores v1 e v2. Ele
possui a seguinte sintaxe:

plot(v1,v2,Especificador de linha,Propriedade,
Valor_da_Propriedade,...)

1
Pode-se entender curva, aqui, como um grfico de linha simlples.
46 Apostila de Matlab

onde apenas a citao dos vetores (v1 e v2) essencial, deixando os outros argu-
mentos, que formatam a linha criada e sero explicados depois, como opcionais.
A maneira como o Matlab implementa essa funo plot() bem simples: ela
relaciona, em um grfico, cada elemento do primeiro vetor v1 com o elemento da
mesma posio no vetor v2, formando pontos que iro ser colocados no grfico (com
os elementos de v1 como valores do eixo x e os elementos de v2, do eixo y). O
vetores em questo devem, portanto, ter o mesmo nmero de elementos N e formar,
assim, N pontos que sero ligados em sequncia.
Assim se tivermos os vetores v1 = [1 3 5 8] e v1 = [5 1 5 6], ser criado um
grfico com os seguintes pontos (1, 5), (3, 1), (5, 5) e (8, 6), ligados nesta sequncia.
Esse aspecto est apresentado no cdigo e na figura abaixo.
Cdigo 4.1 Exemplo do uso de plot()
>> x = 2000:2012; % Valores do eixo x
>> y = [55 28 31 25 85 12 72 78 67 39 41 86 45]; % e do eixo y
>> plot(x,y) % O retorno desta funo est na figura abaixo

Figura 4.1 Figura gerada pelo cdigo acima

Note que uma janela do Figure aberta (isso sempre ocorrer, portanto essa ser
a ltima vez que a mostraremos) e os eixos do grfico so automaticamente criados.

4.1.1 O grfico de uma funo


Tendo em vista a criao de curvas para certas funes, basta aplicar vetores que
melhor especifiquem a funo desejada ao comando plot(). Assim, deve-se criar
um vetor de valores para x e depois aplicar a funo que voc quer sobre esse vetor
para gerar outro vetor y = f (x), da mesma forma como fizemos na seo 2.4. Tendo
esses dois vetores em mo, basta coloc-los em plot().
Tome cuidado, no entanto, com a preciso que voc deseja, pois, como se sabe,
muitas funes so matematicamente contnuas e o Matlab, como mquina, no
gera valores contnuos, mas pode simul-los se voc colocar muitos pontos no
clculo. Os cdigos a seguir mostram essa capacidade.

Pet - Eng. de Teleinformtica UFC


Captulo 4. Grficos em Matlab 47

Cdigo 4.2 Cdigo de grfico com Cdigo 4.3 Cdigo de grfico com
baixa preciso alta preciso
>> x = -2:0.5:4; >> x = -2:0.01:4;
>> length(x) % Tamanho de x >> length(x) % Tamanho de x
ans = ans =

13 601
>> y = exp(-0.5*x).*cos(6*x); >> y = exp(-0.5*x).*cos(6*x);
>> plot(x,y) % Figura abaixo >> plot(x,y) % Figura abaixo

Note, primeiro, a facilidade de se representar a curva contnua de um cosseno


amortecido (no caso, f (x) = e0,5x cos (6x)) em Matlab com a ajuda da multipli-
cao ponto a ponto (.*) e dado o vetor de xs, que varia de 2 a 4.
Note tambm a diferena na preciso existente nos dois grficos. Enquanto a
curva da esquerda bastante discretizada (com incrementos maiores e 13 pontos), a
da direita nos traz a iluso de uma curva contnua (j que possui 601 pontos e, assim,
incrementos menores), embora tambm seja discreta. dessa forma que se plota
uma funo contnua no Matlab: quanto maior o nmero de pontos e menores os
incrementos, mais a curva trar o aspecto de continuidade.

4.1.2 Especificadores de linha e Propriedades


Estes so os campos opcionais descritos no comeo dessa seo. O primeiro deles
diz respeito ao estilho de linha, cor da linha e ao tipo de marcador usado (como um
ponto no grfico ir aparecer). Assim, os especificadores de linha so os seguintes
caracteres:
Tabela 4.1 Especificadores de estilo de linha

Estilo Especificador Estilo Especificador


Slida (padro) - Pontilhada :
Tracejada -- Trao-ponto -.

UFC Pet - Eng. de Teleinformtica


48 Apostila de Matlab

Tabela 4.2 Especificadores de cor de linha

Cor Especificador Cor Especificador


Azul (padro) b (blue) Preto k (black )
Vermelha r (red ) Branco w (white)
Verde g (green) Ciano c
Amarelo y (yellow ) Magenta (roxo) m

Tabela 4.3 Especificadores de tipo de marcador

Marcador Especificador Marcador Especificador


Cruz + Quadrado s (square)
Crculo o Diamante d
Asterisco * Estrela de 5 pontas p (penta)
Ponto . Estrela de 6 pontas h (hexa)

Para definir tais especificadores, apenas deve-se colocar, depois dos vetores e
entre aspas, um smbolo de cada tabela anterior em qualquer ordem. Por exemplo,
plot(v1,v2,-g) cria uma curva de v1 e v2 tracejada e verde (sem marcador),
plot(v1,v2,rd:) plota um grfico com marcadores em diamante e linha
pontilhada vermelha e plot(v1,v2,*) mostra na tela uma linha azul e slida
(default) com asteriscos como marcadores.
No caso do campo propriedades, o usurio deve colocar o nome da propriedade
em questo entre aspas depois das propriedades de linha, se existirem, e o valor de
tal propriedade em seguida. Algumas propriedades2 interessantes do Matlab so:

Tabela 4.4 Propriedades do comando plot()

Marcador Especificador Valores possveis


LineWidth/ Especifica a largura da li- Nmero em quantidade de
linewidth nha. pontos (default: 0.5pt).
MarkerSize/ Especifica o tamanho do Nmero em unidade de
markersize marcador. pontos.
MarkerEdgeColor/ Especifica a cor do mar- Especificadores de cor da
markeredgecolor cador ou de sua borda. tabela anterior digitados
como string.
MarkerFaceColor/ Especifica a cor do preen- Especificadores de cor da
markerfacecolor chimento do marcador. tabela anterior digitados
como string.

2
Mais em www.mathworks.com/help/techdoc/ref/line_props.html

Pet - Eng. de Teleinformtica UFC


Captulo 4. Grficos em Matlab 49

Voc pode colocar, assim, valores como plot(x,y,LineWidth,5) para


uma linha grossa ou plot(x,y,+,MarkerFaceColor,b) para cruzes
azuis ou plot(x,y,-+,LineWidth,5,MarkerFaceColor,r) para
as duas opes ao mesmo tempo (note que, nesse caso, voc deve especificar que quer
uma linha slida, seno o Matlab no colocar uma linha de ligao).

4.2
Formatando o Grfico
Depois de criada a curva que se deseja, necessria apresent-la da melhor forma.
Para isso uma formatao dela pode ser til. Assim, apresentaremos, a seguir,
algumas funes de formatao de grficos teis em Matlab. Saiba que as mesmas
funes atuam sobre os mais diversos tipos de grficos do Matlab, no se detendo
apenas as curvas 2D, e que, a partir de agora, a utilizao de linhas de comando do
Command Window no faz mais sentido para alguns dos prximos cdigos. Iremos
usar, rotinas, ento.

4.2.1 Ttulo do grfico, rtulos dos eixos e texto


Os comandos para dispor um ttulo a um grfico e para nomear seus eixos so:
title() Comando que gera o ttulo do grfico. Ele recebe uma string (o ttulo)
de argumento e possui a seguinte sintaxe:

title(ttulo do texto)

xlabel() e ylabel() Geram os nomes de cada eixo3 presente num grfico a


partir de seus argumentos em forma de string:

xlabel(rtulo do eixo x)
ylabel(rtulo do eixo y)

text() Inclui uma string (caixa de texto) em uma posio de coordenadas x e


y (de acordo com os eixos da figura) que ela recebe em seu argumento:

text(x,y,texto da caixa)

interessante saber que possvel melhorar o texto contido nas strings acima,
ou seja, elas tambm podem ser formatadas. possvel, por exemplo, apresentar
caracteres sobrescritos ou subscritos digitando {} ou _{}, respectivamente, colo-
cando os caracteres desejados entre as chaves. Tambm possvel escrever letras
gregas nos ttulos ou rtulos. Para isso basta digitar as strings da tabela a seguir
para cada letra.
3
Para grficos 3D ainda h a funo zlabel(string).

UFC Pet - Eng. de Teleinformtica


50 Apostila de Matlab

Tabela 4.5 Algumas letras gregas do Matlab

Letra String Letra String Letra String


\alpha \lambda \Delta
\beta \pi \Lambda
\gamma \sigma \Pi
\delta \omega \Sigma
\theta \Gamma \Omega

4.2.2 Formatao dos eixos e grades


possvel, pelo Matlab, formatar os eixos e as grades dos nossos grficos. O
principais comandos para isso so:

axis Este comando define a forma como sero os eixos do grfico. Ele pode
receber um argumento (um vetor) ou uma palavra chave. Quando recebe um
argumento, ele deve ser um vetor de 4 elementos, quando estamos formatando
um grfico 2D4 , com a seguinte sintaxe:

axis([xmin xmax ymin ymax])

onde, nitidamente, os elementos acima representam os limites do eixo x e


do eixo y. O comando axis pode receber uma das muitas palavras-chave
possveis. As mais teis combinaes so: axis off, tira os eixos do grfico;
axis on, coloca-os; axis tight, seleciona os limites da funo presente
no grfico como os limites do mesmo e axis equal, coloca os eixos com a
mesma proporo em suas unidades de comprimento.

grid As maiores utilidades deste comando so com palavras chave. Assim as


principais combinaes so grid on, coloca uma grade no grfico; axis
off, retira-a e grid minor, pe uma grade mais precisa.

A rotina no Cdigo 4.4 e a Figura 4.2 nos mostra uma aplicao dos conheci-
mentos desta seo at aqui.
Cdigo 4.4 Exemplo de formatao de grficos
% Valores para x e sua sada y
x = [0:0.01:3*pi];
y = sin(x).*log2(x); % Uma funo qualquer

% Plote de uma curva preta e tracejada um pouco mais grossa


plot(x,y,--b,linewidth,3); % Comandos na mesma linha
4
Para desenhos 3D, o vetor-argumento tem 6 elementos da forma v=[xmin xmax ymin ymax
zmin zmax] .

Pet - Eng. de Teleinformtica UFC


Captulo 4. Grficos em Matlab 51

% Ttulo do grfico e dos eixos


title(Funo f(x) = sin(x)*log_2^x, com x = [0,2\pi])
xlabel(Valores de x);
ylabel(Amplitude);

% Umas caixas representando um pico e um vale do grfico


text(1.8,1.2, Pico);
text(4.5,-2.5, Vale);

% Configura os eixos e pe uma grade


axis([-2 12 -3.5 3.5]);
grid on;

Figura 4.2 Resultado do Cdigo 4.4

4.2.3 Mltiplos grficos


Muitas vezes, tambm importante apresentar diversos grficos a partir de uma
nica rotina, normalmente, para efeito de comparao entre eles. Existem, pelo
menos, trs formas de se fazer isso, por meio de trs funes/comandos diferentes:

figure (Grficos em janelas diferentes) Esse comando abre uma nova ja-
nela Figure e, assim, pode por-se outro grfico nela. Note que o primeiro
plot j abre uma janela dessas, portanto voc s precisa usar esse comando a
partir do segundo grfico. Saiba tambm que voc pode em cada grfico pr,
de forma independente, ttulos, grades, etc. O cdigo a seguir apresenta esse
exemplo:
x = 0:0.1:4*pi;
y1 = sin(x);
y2 = cos(x);

UFC Pet - Eng. de Teleinformtica


52 Apostila de Matlab

plot(x,y1,-k) % Plota o primeiro grfico


title(SEN(X));

figure; % Abre uma nova janela Figure


plot(x,y2,:k) % Plota o segundo grfico na nova janela
title(COS(X));

hold (Curvas em um mesmo grfico) Como a prpria traduo direta diz,


esse comando segura todas as curvas em um mesmo conjunto de eixos. Ele
deve receber palavras-chave para o seu liga-desliga: hold on ou hold off.
Nesse caso, podemos incluir apenas um ttulo, definir um eixo, etc. Podemos
utilizar esse comando para refazer o grfico anterior:
x = 0:0.1:4*pi;
y1 = sin(x);
y2 = cos(x);

hold on % Liga o hold


plot(x,y1,-k)
plot(x,y2,:k);

title(SEN(X) e COS(X));

subplot() (Grficos em uma mesma janela) Com essa funo colocam-


se diversos grficos independentes (diferentes ttulos, eixos, ...) lado-a-lado
em uma mesma janela Figure. Colocando essa funo antes de um plot()
especfico, essa funo adquire a seguinte sintaxe:

subplot(l,c,pos)

onde uma janela Figure divida em uma matriz de l linhas e c colunas e


o prximo grfico posicionado na posio pos (para, por exemplo, uma
matriz A(2 2), essas posies valem: pos= 1 a posio A11 ; pos= 2,
A12 ; pos= 3, A21 e pos= 4, A22 , ou seja, ele vai percorrendo a matriz linha
por linha). Abaixo, os grficos anteriores com a funo subplot().

x = 0:0.1:4*pi;
y1 = sin(x);
y2 = cos(x);

subplot(1,2,1) % pos = 1
plot(x,y1,-k)
title(SEN(X));

subplot(1,2,2) % pos = 2
plot(x,y2,:k);
title(COS(X));

Pet - Eng. de Teleinformtica UFC


Captulo 4. Grficos em Matlab 53

4.3
Tipos variados de grficos 2D
O Matlab R
tambm disponibiliza outros tipos de grficos teis em outras situa-
5
es . Para cada um deles, existe uma funo especfica com sintaxe normalmente
parecida com a sintaxe de plot(). Alguns desses outros grficos so:
Tabela 4.6 Outros tipos de grficos

Tipo/comando Rotinas-exemplo Grfico


Barras/ x = [2000:2006];
bar(x,y) y = [2 3 5 2 6 8 5];
bar(x,y,k);

axis([1999 2007 1 9])


xlabel(Ano)
ylabel(Vendas);

Degraus/ x = [2000:2006];
stairs(x,y) y = [2 3 5 2 6 8 5];
stairs(x,y,k);

axis([2000 2006 1 9])


xlabel(Ano)
ylabel(Vendas);

Hastes/ x = [2000:2006];
stem(x,y) y = [2 3 5 2 6 8 5];
stairs(x,y,k);

axis([1999 2007 1 9])


xlabel(Ano)
ylabel(Vendas);

Pizza/ notas = [9 8 7 5 3];


pie(x) pie(notas);

title(NOTAS
DA TURMA);

5
Voc pode conferir mais algumas funes para grficos especiais do Matlab na Seo 4.7.

UFC Pet - Eng. de Teleinformtica


54 Apostila de Matlab

4.4
Grficos em 3D
O Matlab oferece um grande suporte criao de grficos tridimensionais. O
desenho 3D tambm utiliza a janela Figure e pode receber ttulos, nomes e con-
figuraes de eixos, mltiplos plotes, e assim por diante, da mesma forma que os
grficos 2D receberam. Nos concentraremos aqui nos dois tipos mas importantes de
representaes 3D, as curvas e as superfcies.

4.4.1 Curvas
As curvas 3D so simples de serem concebidas, assim como foram as curvas 2D.
Elas obedecem funo plot3(), muito similar ao plot(), que tem a seguinte
forma:

plot3(v1,v2,v3,Especificador de linha,Propriedade,
Valor_da_Propriedade,...)

onde os vetores v1, v2 e v3, de mesmas dimenses, especificam as coordenadas


dos pontos que sero plotados de acordo com os eixos x, y e z, respectivamente.
Os especificadores de linha e as propriedades seguem os mesmos padres vistos
anteriormente.
Fazendo uma analogia com as funes em curvas 2D para curvas 3D, basta
aplicarmos uma srie de funes para cada variao em x, y e z. Uma forma mais
comum e prtica de fazermos isso parametrizando os eixos de nossa curvas em
funes de, digamos, t; ou seja, as coordenadas sero x(t), y(t) e z(t). O cdigo
abaixo nos traz um exemplo disso.

Cdigo 4.5 Curva 3D


% Variao de x, y e z com t
t = 0:0.1:4*pi;
x = sin(t); y = cos(t); z = 0.5*t;

plot3(x,y,z,k);
grid on;
xlabel(x);ylabel(y);zlabel(z);

Tendo uma janela Figure em mos, podemos usar uma interessante ferramenta
dela presente nas verses mais recentes do Matlab: a rotao da figura 3D. Ela
acionada ao se clicar no cone (Rotate 3D, nas verses em ingls) na barra
de ferramentas de Figure. Clicando nela e arrastando o plote tridimensional,
possvel rotacionar a figura de forma a percebermos mais detalhes dela. De fato,
existem muitas outras ferramentas teis alm dessa, como os cones de zoom e de
movimento de translao da figura.

Pet - Eng. de Teleinformtica UFC


Captulo 4. Grficos em Matlab 55

4.4.2 Malhas e superfcies


As malhas e as superfcies so duas formas de representar funes da forma
z = f (x, y) (x e y independentes e z dependente), ou seja, onde o valor de z
completamente estabelecido para quaisquer combinaes de x e y.
Entretanto, antes de podermos descrever as funes do Matlab para criarmos
superfcies e malhas, precisamos esclarecer como construdo o domnio (variao
total de x e de y) que uma funo f (x, y), representante de uma superfcie, por
exemplo.
Anteriormente, notamos que bastava um vetor de xs (uma linha) para definir
o domnio de uma curva 2D. Agora, nossa funo f (x, y) vai precisar de uma rea
como domnio e, para isso, usaremos matrizes (e no vetores) para represent-la.
Assim, devemos ter uma matriz com todos os x que sero teis para a funo e
outra, de mesma dimenso, com todos os y. Cada combinao elemento-a-elemento
entre essas matrizes nos dar um ponto (x, y) em que f (x, y) ser aplicada.
Para um domnio, por exemplo, 1 x 6 e 1 y 5, x e y inteiros, temos a
figura abaixo e as matrizes que representam cada coordenada:

6


1 2 3 4 5 6


(1,5) (2,5) (3,5) (4,5) (5,5) (6,5)
1 2 3 4 5 6



5




(1,4) (2,4) (3,4) (4,4) (5,4) (6,4)



X = 1 2 3 4 5 6


4

1
2 3 4 5 6



(1,3) (2,3) (3,3) (4,3) (5,3) (6,3)
1 2 3 4 5 6
3



(1,2) (2,2) (3,2) (4,2) (5,2) (6,2)
5 5 5 5 5 5

2



4 4 4 4 4 4

(1,1) (2,1) (3,1) (4,1) (5,1) (6,1)



1

3

3 3 3 3 3


Y =


2 2 2 2 2 2




0 1 2 3 4 5 6 7

1 1 1 1 1 1

Note que se fizermos combinaes elemento-a-elemento de cada matriz acima, reco-


nheceremos todos os pontos (x, y) da grade-domnio, em que f (x, y) atuar. Obvi-
amente, o Matlab R
possui uma funo especfica para criar tais matrizes dado o
domnio requerido. Ela a funo meshgrid(), que recebe 2 vetores e cuja sintaxe
mais til a seguinte:

[X,Y] = meshgrid(Xi:incX:Xf,Yi:incY:Yf)

onde, como se pode constatar, os vetores-argumento da funo so duas P.A.s, uma


variando de Xi at Xf e outra variando de Yi at Yf, que formam, juntamente,
o domnio de uma f (x, y) desejada. Note que possvel determinar a preciso
da diferena de um ponto para o outro com incX e incY. Para criar a grade
representada acima, na forma das matrizes X e Y , teramos que utilizar o meshgrid
da seguinte forma: [X,Y] = meshgrid(1:6,1:5).

UFC Pet - Eng. de Teleinformtica


56 Apostila de Matlab

Criado o domnio de z = f (x, y) no Matlab, podemos ento represent-lo


tridimensionalmente em forma de malha ou de uma superfcie, as duas formas mais
comuns de grficos 3D. Para isso faremos f (x, y) atuar ponto-a-ponto nas matrizes
X e Y criadas anteriormente com meshgrid() e, assim, formar uma nova matriz
Z. Essas trs matrizes sero argumentos de:

Malhas 3D - a funo mesh() Um grfico em malha todo montado de po-


lgonos retangulares (triangulares, paralelogrmicos, etc) construdos a par-
tir das linhas que conectam os pontos (x, y, z), onde z = f (x, y). A funo
mesh() cria um grfico em malha e possui a seguinte sintaxe:

mesh(X,Y,Z)

onde X e Y so as matrizes criadas pelo meshgrid() e Z a matriz criada a


partir da aplicao de uma funo em X e Y (z = f (x, y)).

Superfcies - a funo surf() Superfcies diferem-se dos grficos em malhas,


porque as reas delimitadas pelas pelas linhas das malhas aparecem coloridas,
sugerindo que a superfcie lisa, e no uma rede. No Matlab a criao de
superfcies d-se, principalmente, pela funo surf(), cuja sintaxe :

surf(X,Y,Z)

onde X, Y e Z tem a mesma utilidade que em mesh().

O exemplo abaixo nos mostra o uso dos comandos acima para a funo z =
2 2
f (x, y) = xex y (um dos logos do Matlab).
Cdigo 4.6 Superfcies e malhas 3D
% Cria a grade-domnio de f(x), -2 < x,y < 2, com uma dife-
% rena (definidora da preciso) de 0.1 entre seus elementos
[X,Y] = meshgrid(-2:0.1:2 , -2:0.1:2);

% Funo Z = f(x)
Z = X.*exp(-X.^2 - Y.^2);

% Plote da superfcie
subplot(1,2,1);
mesh(X,Y,Z);
title(Uso do surf());

% Plote da malha
subplot(1,2,2)
surf(X,Y,Z);
title(Uso de mesh());

Pet - Eng. de Teleinformtica UFC


Captulo 4. Grficos em Matlab 57

2 y 2
Figura 4.3 Plote da funo f (x, y) = xex como superfcie e como malha

4.5
Outras representaes grficas
Alm das curvas, malhas e superfcies apresentadas anteriormente, o Matlab
prov ao seu usurio outras formas de expressar informaes em grficos. Algumas
dessas outras importantes possibilidades se encontram a seguir.
Vetores - funes quiver() e quiver3() Para criar vetores em Matlab
usamos as funoes quiver() (vetores em 2D) e quiver3() (vetores em
3D). Eles possuem a seguinte sintaxe:

quiver(px,py,u,v) quiver3(px,py,pz,u,v,w)

onde px, py e pz representam os pontos iniciais do vetor a ser criado, enquanto


u, v e w (com e pz e w s em vetores 3D) representam as intensidades nos
eixos x, y e z desse vetor. Todos esses valores podem ser escalares, vetores
ou matrizes (nestes ltimos so criados varios vetores a partir de combinaes
ponto-a-ponto entre seus elementos), como mostra o exemplo a seguir, que
utiliza as funes quiver() (no plano xy) e quiver3():

% Cria a grade-domnio
[X,Y] = meshgrid(-1:.2:1,-1:.2:1);

% Cria um vetor 3D e vrios 2D


quiver3(0,0,0,0,0,1)
hold on
quiver(X,Y,-Y,X)
axis equal

UFC Pet - Eng. de Teleinformtica


58 Apostila de Matlab

Curvas de nvel - funes contour() e contour3() Curvas de nvel so


desenhos sobre um plano das interseces de uma superfcie sobre uma famlia
de planos paralelos ao plano xy, ou seja, eles representam linhas imaginrias
que unem pontos de mesma altura em uma superfcie. No Matlab, eles
so criados pela funo contour(), para uma visualizao 2D, e pela funo
contour3(), para a anlise 3D:

contour(X,Y,Z,n) contour3(X,Y,Z,n)

onde as matrizes X, Y e Z so as mesmas que em mesh() e em surf() e


n, opcional, o nmero de curvas plotadas. A rotina e o plote a seguir nos
2 2
mostram a criao de curvas de nvel para a funo f (x, y) = xex y .

% Cria a grade-domnio
[X,Y] = meshgrid(-2:0.1:2,-2:0.1:2);

% Aplica a funo grade


Z = X.* exp(-X.^2 - Y.^2);

% Desenvolve os plotes
subplot(2,1,1)
contour(X,Y,Z,15);
title(Curvas de nvel em 2D)
grid off

subplot(2,1,2)
contour3(X,Y,Z,15);
title(Curvas de nvel em 3D)
grid on

Campos escalares - funo slice() Campos escalares so gerados por fun-


es do tipo g = f (x, y, z), ou seja, para todo ponto do espao 3D existe,
teoricamente, um valor (escalar) para v. Para isso precisamos criar um grid
3D com a mesma funo meshgrid() da forma

[X,Y,Z] = meshgrid(Xi:incX:Xf,Yi:incY:Yf,Zi:incZ:Zf)

que apenas uma expanso da ideia do meshgrid() visto anteriormente e


que cria 3 matrizes tridimensionais, X, Y e Z, representado o espao 3D entre
os limites desejados. Agora basta aplicar f (x, y, z) nessa grade. Para visua-
lizar o resultado dessa aplicao usamos, normalmente, a funo slice():

slice(X,Y,Z,G,vx,vy,vz)

Pet - Eng. de Teleinformtica UFC


Captulo 4. Grficos em Matlab 59

que, dadas as grades X, Y e Z e a matriz 3D G = f (X,Y,Z), cortamos o campo


escalar resultante pelos planos estabelecidos nos elementos nos vetores vx, vy
e vz, ou seja se vx = [1 2] haver um slice (corte) pelos planos x = 1 e x = 2.
Conseguimos assim, entender o campo a partir da variao de cores presente
nesses cortes. Abaixo, um exemplo dessa aplicao.

% Cria as grades 3D.


[x,y,z] = meshgrid(-9:9,-9:9,-9:9);

% Aplica uma funo nesta grade.


v = x.^2+y.^2+z.^2;

% Cria os cortes em x = 9,
% x = 0, y = 9 e z = -9.
slice(x,y,z,v,[9 0],9,-9)

4.6
Aplicaes
Aplicao 4.1 A seguinte funo um tipo de degrau impar peridico, im-
portante em Sinais e Sistemas:
f (x)
1
(
1 se 0 x < 1
f (x) = x
1 se 1 x < 2 2 1.5 1 0.5 0 0.5 1 1.5 2

A funo acima pode ser expandida em srie de Fourier da seguinte forma:

 
4 X sen (2nx) 4 sen (6x) sen (10x)
f (x) = = sen (2x) + + +
n n=1,mpar n 3 5

onde, a medida que n a srie vai tendendo funo f (x). Usando o comando
subplot() e as ferramentas grficas do Matlab, mostre essa convergncia.

Soluo Essa uma das mais interessantes utilidades do ferramental grfico


do Matlab: o teste visual da convergncia de uma srie de Fourier. Tendo em vista
a srie acima, podemos fazer o somatrio para quantos termos quisermos, e, quando
essa quantidade de termos tender ao infinito, a curva tender onda quadrada dada
por f (x). Cada somatrio pode ser formulado por meio de um lao for, percorrendo
uma sequncia de nmeros mpares, como a srie para f (x) exige. Note que faremos,

UFC Pet - Eng. de Teleinformtica


60 Apostila de Matlab

nesse caso, quatro somatrios, um para cada subplot() (que formaro um vetor-
linha de plotes 1 4 na janela Figure) e, depois, plotaremos a curva dessa soma
de senoides, observando o que ocorre com o resultado final. O cdigo apresentado a
seguir com sua respectiva figura nos mostra como isso pode ser feito em Matlab:

Cdigo 4.7 Aplicao 4.1


% Domnio de x
x = linspace(-1,1,1000);

% Valor inicial de cada somatrio


serie1 = 0; serie2 = 0; serie3 = 0; serie4 = 0;

% Curva para um termo (no precisa do somatrio/lao)


subplot(1,4,1)
n = 1
serie1 = (4/pi)*sin(2*pi*n*x)/n;
% Plot preto da curva e seu ttulo
plot(x, serie1, k); title(1 termo);

% Curva para 2 termos


subplot(1,4,2)
for n = 1:2:3 % n assume apenas valores mpares
serie2=serie2+(4/pi)*sin(2*pi*n*x)/n;
end
plot(x, serie2, k); title(2 termos);

% Curva para 5 termos


subplot(1,4,3)
for n = 1:2:9
serie3=serie3+(4/pi)*sin(2*pi*n*x)/n;
end
plot(x, serie3, k); title(5 termos);

% Curva para 50 termos


subplot(1,4,4)
for n = 1:2:99
serie4=serie4+(4/pi)*sin(2*pi*n*x)/n;
end
plot(x, serie4, k); title(50 termos);

Figura 4.4 Figura gerada pelo Cdigo 4.7


..................................................................................

Pet - Eng. de Teleinformtica UFC


Captulo 4. Grficos em Matlab 61

Aplicao 4.2 O potencial eltrico V produzido por duas cargas dado por
 
1 q1 q2
V = +
40 r1 r2
onde 0 = 8.85 1012 C/N m0 a permissividade eltrica do vcuo, q1 e q2 so
as cargas eltricas em Coulombs e r1 e r2 so as distncias radiais das partculas
(em metros) ao ponto onde se deseja conhecer o potencial. Duas partculas com
carga q1 = 2 1010 C e q2 = 3 1010 C foram posicionadas no plano xy nos
pontos (0, 25; 0; 0) e (0, 25; 0; 0), respectivamente. Plote o potencial eltrico devido
a essas duas partculas em pontos do plano xy que esto localizados no domnio
0, 2m x 0, 2m e 0, 2m x 0, 2m.
Soluo Para a criao desse plote devemos, inicialmente, criar um grid no
plano xy com o domnio 0, 2 x 0, 2 e 0, 2 x 0, 2. Depois, calculamos
as distncias de cada ponto desse grid em relao s cargas e determinaremos, a
seguir, o potencial em cada ponto. Por fim, o potencial eltrico ser plotado.
A rotina a seguir nos mostra com isso feito.

Cdigo 4.8 Aplicao 4.2


% Constantes da questo
eps0 = 8.85*10^-12; q1 = 2*10^-10; q2 = 3*10^-10;
k = 1/(4*pi*eps0);

% Criao do grid
[X,Y] = meshgrid(-0.2:0.005:0.2,-0.2:0.005:0.2);

% Clculo das distncias e do potencial


r1 = sqrt((X+0.25).^2 + Y.^2);
r2 = sqrt((X-0.25).^2 + Y.^2);
V = k*(q1./r1 + q2./r2);

% Plote da superfcie
surf (X,Y,V);
xlabel(x(m)); ylabel(y(m)); zlabel(V(m));

Figura 4.5 Figura gerada pelo Cdigo 4.8


..................................................................................

UFC Pet - Eng. de Teleinformtica


62 Apostila de Matlab

Aplicao 4.3 Usando as funes quiver() e contour(), mostre grafi-


camente que, dada a funo
f (x, y) = x3 3x y 2 ,
os vetores-gradiente do campo acima so perpendiculares s superfcies de nvel
(como era de se esperar do f (x, y)) no intervalo 2 x 2 e 1 x 1 .
Utilize a funo gradient(Z)6 para o clculo do gradiente 2D pedido.
Soluo Para esse exemplo, a funo gradient(Z), que retorna dois arran-
jos da mesma dimenso de Z com as direes em x em y de Z, nos dir a direo de
cada vetor que ser plotado em cada ponto de nosso grid. Assim, as informaes re-
cebidas pelo comando gradient(Z) iro ao argumentos de quiver(), enquanto
a funo contour() receber o campo escalar todo. O cdigo a seguir plota o
pedido alm da malha 3D correspondente f (x, y):
Cdigo 4.9 Aplicao 4.3
[X,Y] = meshgrid(-2:0.2:2,-1:0.2:1); % Cria o grid de x e y
% Cria a funo Z(x,y) e seu gradiente
Z = X.^3-3.*X-Y.^2;
[dx, dy] = gradient(Z);

% Plota 10 curvas de nvel de x, y e z


contour(X,Y,Z,10);
hold on; % Para plotar as curvas de nvel juntas aos vetores

% Plota os vetores gradiente e configura os eixos


q = quiver(X, Y, dx, dy);

% Plota a superfcie correspondente


figure;
mesh(X,Y,Z); grid off;

Figura 4.7 Malha 3D


Figura 4.6 Vetores e curvas de nvel geradas gerada pelo Cdigo 4.9
pelo Cdigo 4.9

Note que os vetores so realmente perpendiculares curvas de nvel.


6
Existem tambm das funes divergence() e curl() para clculos de divergente e de
rotacional de um campo vetorial. Mais informaes em www.mathworks.com/help/matlab.

Pet - Eng. de Teleinformtica UFC


Captulo 4. Grficos em Matlab 63

4.7
Lista de funes grficas do Matlab
Abaixo, esto listadas algumas das muitas funes referentes ao ambiente de
construo grfica do Matlab. Tais funes podem ser muito teis na criao de
tipos diversos de grfico ou manipulao de dados de um.

Tabela 4.7 Manipulao do grfico

Funo Descrio
box on/off til em grficos 3D, esse comando coloca ou retira uma
caixa ou redor do plote.
camlight Em superfcies, cria uma um objeto que move-se, com
a rotao 3D da janela Figure, de acordo com uma luz
especial nas coordenadas da cmera de viso.
colorbar Cria uma barra lateral ao grfico com a escala cores
dele relacionada intensidade da funo plotada.
colormap(arg) Seleciona o tipo de escala de cor usada em colorbara .
daspect([x y z]) Configura a razo de proporcionalidade dos eixos car-
tesianos que no se altera com rotao 3D. Forma mais
til: daspect([1 1 1]).
legend()b Cria uma legenda para certo plote.
view(n,m) Para grficos 3D, essa funo configura a o ngulo azi-
mutal (em n) e a elevao (em m) da visualizao inicial
do grfico.
a
Para uma lista com os tipos possveis consulte www.mathworks.com/help/techdoc/ref/
colormap.html.
b
Como possui variados tipos de argumento, confira a sua funcionalidade em www.mathworks.
com/help/techdoc/ref/legend.html.

Tabela 4.8 Criao de grades especiais

Funo Descrio
[X,Y,Z] = cylinder Gera trs matrizes X, Y e Z (um grid ) que juntas
formam um cilindro de raio unitrio.
[X,Y,Z] = sphere(n) Gera uma esfera unitria com matries n n.
[X,Y,Z] = ellipsoid Gera um elipsoide centrado em (xc,yc,zc) e com
(xc,yc,zc,xr,yr,zr) semieixos medindo xr, yr e zr, respectivamente.

UFC Pet - Eng. de Teleinformtica


64 Apostila de Matlab

Tabela 4.9 Curvas Bidimensionais

Funo Descrio
plotyy(x1,y1,x2,y2) Plota as curvas (linhas) dadas pelos pares (x1,y1) e
(x2,y2) em um mesmo plote com o eixo y dos dois
lados (um para cada par de vetores).
fplot(funcao, Plota a funo funcao (essa funo deve depender
[xmin xmax]) apenas de x como em x2+4*sin(2*x)) dentro
dos limites propostos.
loglog(x,y) Plota a curva com eixos em escala logartmica.
semilogx(x,y) Plota a curva com eixo x em escala logartmica.
semilogy(x,y) Plota a curva com eixo y em escala logartmica.
ezplot(funcao, Plota a funo de x da string no intervalo citado, j
[xmin xmax]) colocando ttulo e nomes dos eixos.
polar(theta,rho) Cria um grfico polar de theta (ngulo em radia-
nos do eixo x) versus rho (comprimento do raio no
angulo theta) .
ezpolar(funcao, Plota a funo no intervalo citado em um coordena-
[xmin xmax]) das polares, j colocando ttulo e nomes dos eixos.

Tabela 4.10 Outros plotes de curvas de nvel e de vetores

Funo Descrio
contourf(X,Y,Z,n) Desenha n curvas de nvel da superfcie Z (Z =
f (X, Y )), colorindo as reas entre essas curvas.
contourslice Cria cortes no campo escalar G (G = f (X, Y, Z)))
(X,Y,Z,G,vx,xy,vz) em forma de contornos de acordo com os planos de-
finidos por cada elemento de vx, vy e vz.
ezcontour(funcao, Gera as curvas de nvel de funcao (uma funo de
[xmin xmax]) um varivel) no domnio, j incluindo ttulo e nomes
dos eixos.
compass(x,y) Plota vetores 2D com componentes x e y como setas
partindo da origem.
feather(x,y) Plota vetores 2D de componentes x e y emanando
do eixo x de forma igualmente espaada.

Pet - Eng. de Teleinformtica UFC


Captulo 4. Grficos em Matlab 65

Tabela 4.11 Plotes de superfcies e malhas

Funo Descrio
ezsurf(funcao, Plota a funo de superfcie dentro da string funcao
[xi xf yi yf]) (essa funo deve depender de x e y como em
atan(x2+i*y)) dentro dos limites de x e y pro-
postos e incluindo ttulo e nomes dos eixos.
ezmesh(funcao, Plota a malha presente dentro da string funcao den-
[xi xf yi yf]) tro dos limites propostos e incluindo ttulo e nomes
dos eixos.
surfc(X,Y,Z) Plota a superfcie gerada pela funo Z (Z = f (X, Y ))
com as respectivas curvas de nvel abaixo dela.
meshc(X,Y,Z) Plota a malha gerada pela funo Z (Z = f (X, Y ))
com as respectivas curvas de nvel abaixo dela.
surfnorm(X,Y,Z) Plota os vetores normais superfcie Z = f (X, Y ).
waterfall(X,Y,Z)/ Ambas desenham a malha da funo Z = f (X, Y ) em
meshz(X,Y,Z) forma similar a uma queda dgua, sendo esta mais
elaborada em meshz().
ribbon(Y,Z) Dada a funo Z = f (X, Y ), so plotadas fitas parale-
las ao eixo descrito por Y que descrevem a superfcie.

Tabela 4.12 Outros tipos variados de grficos

Funo Descrio
barh(x,y) Plota os vetores x e y em barras horizontais.
area(X) Um grfico de rea, ou seja, exibe elementos em X
(um vetor ou uma matriz) como uma ou mais curvas
e preenche a rea sob cada curva.
hist(x) Histograma dos valores presentes no vetor y.
pie3(x) Grfico em pizza 3D, onde cada valor em x percen-
tualmente maior de acordo com sua participao na
soma total.
stem3(x,y,z) Dados os trs vetores x, y e z, so plotadas hastes
correspondentes aos pontos da combinao elemento-
a-elemento desses vetores.

UFC Pet - Eng. de Teleinformtica


Captulo 5

Introduo
Matemtica Simblica

t agora todas as operaes matemticas realizadas no Matlab


A
R

foram numricas, ou seja, elas continham variveis e constantes nu-


mricas e retornavam valores tambm numricos, seja em ponto fixo (1/5
retorna 0.2000, exatamente) ou em ponto flutuante (o resultado de 1/3
0.3333, aproximado).

Muitas aplicaes em Cincias e Engenharia, entretanto, requerem opera-


es smbolicas nas equaes. Tais operaes so processos matemticos que
contm variveis que no receberam nenhum valor numrico quando a suas
execues foram disparadas, ou seja, se comportam como simples equaes
com variveis espera de valores. Assim, uma expresso simblica poderia
ser 5t + 8t2 + 9t + 1 e, se quissemos sua derivada em relao a t, o Matlab
retornaria 5t ln(5) + 16t + 9, nessa exata forma. Utilizando variveis simb-
licas, tambm, a parte numrica delas operada exatamente, de forma que
a adio de x4 e x3 , por exemplo, retorna 7x
12
e no 0, 5833x.

Para a utilizao de operaes com objetos simblicos, a verso do seu Ma-


tlab deve conter o Symbolic Math Toolbox, o toolbox que detm a coleo de
funes utilizada para a execuo de operaes simblicas. Para varificar se
tal componente est instalado, digite ver no Command Window e procure
essa toolbox na lista que ser apresentada.

Note, por fim, como o horizonte de possibilidades de utilizao do Matlab


se expande ao utilizarmos variveis e expresses simblicas, mais um quesito
de robustez computacional que o nosso software oferece ao seu usurio.

5.1
Objetos simblicos e sua manipulao
O ponto de partida das operaes simblicas so os objetos simblicos. Estes so
constitudos de variveis e constantes que, quando utilizados em expresses matem-
68 Apostila de Matlab

ticas, ensinam o Matlab a executar a expresso simbolicamente. Assim, o usurio


declara as variveis simblicas necessrias primeiramente e, depois, as utiliza em
expresses simblicas que sero usadas em operaes simblicas e, se necessrio, em
operaes numricas.

5.1.1 Criando objetos simblicos


Para declarar (ou criar) um objeto simblico podemos por em execuo dois
comandos do Matlab, sym() e syms. O primeiro possui a seguinte sintaxe:

nome_objeto = sym(string)

Nesse caso, a utilizao de sym() gera uma atribuio varivel recm criada
nome_objeto de um objeto simblico cujo nome est presente em string.
como se estivssemos definindo um termo varivel (como x em f (x) = x2 + 2x)
que ser til em nossos clculos simblicos e o atribuindo varivel do Matlab
que guardar tal termo (a varivel nome_objeto). Em string pode-se colocar
qualquer conjunto de caracteres no-espaado e que no comessem em nmero, de
forma que essa sequncia de caracteres representar o termo variante dentro da
varivel que este est sendo atribudo. Essa string pode, inclusive, ser um nmero
qualquer (nesse caso, no precisando das aspas duplas em sua declarao). O cdigo
abaixo nos d uma ideia sobre esse procedimento.
Cdigo 5.1 Exemplo de criao de variveis simblicas com sym()
>> var = sym(x) % Atribuio do objeto x a varivel var
var =

>> z = 5 % Declarao nmerica (note a indentao comum)


z =

>> y = sym(5) % Declarao simblica (sem a indentao comum)


y =

>> resp1 = z/3 % Operao com varivel numrica


resp1 =

1.6667

>> resp2 = y/3 % Operao com varivel simblica


resp2 =

5/3

Pet - Eng. de Teleinformtica UFC


Captulo 5. Introduo Matemtica Simblica 69

>> resp3 = var^3+1 % Outra operao com varivel simblica


resp3 =

x^3+1

Note que ns no operamos numericamente com objetos simblicos (como x ou


o segundo 5), apenas deixamos a expresso da forma que est. Isso importante
quando se chega a um ponto onde, por ora, o resultado numrico (como o 1.6667
para z/3) inconveniente. Perceba tambm que resp2 e resp3 agora tambm so
variveis simblicas, com resp3 guardando uma expresso simblica. Ela poderia
ter sido criada com a funo sym() tambm:
Cdigo 5.2 Exemplo de criao de uma expresso simblica
>> resp = sym(x^3 + 1)
resp =

x^3 + 1

>> y = sym(4*x^2 - x^2 - 2*x + 3/4*x) % Atente soma feita


y =

3*x^2 - (5*x)/4

Nota-se que bem mais prtico, quando lidamos com objetos simblicos em
forma de letras, que o nome de nossa varivel seja igual ao nome do prprio objeto,
como x = sym(x), algo permitido no Matlab. Para esses casos, utilizamos o
comando syms, cuja sintaxe a seguinte:

syms objeto1 objeto2 objeto3 ...

onde so criadas as variveis objeto1, objeto2, objeto3 ... que cada


uma guarda um objeto simblico de mesmo nome. Essa a forma mais prtica
e cognitiva de se criar uma varivel simblica, mas ela impede a criao de uma
varivel com um nmero como objeto apenas, como foi feito em y = sym(5). O
Cdigo 5.3 abaixo nos ajuda a entender isso:
Cdigo 5.3 Exemplo de criao de variveis simblicas com syms
>> syms z % Criao de uma varivel/objeto simblico
>> resp = z^2 + z
resp =

z^2 + z

>> syms x a b c % Criao de vrios objetos simblicos


>> y = a*x^2 + b*x + c
y =

a*x^2 + b*x + c

UFC Pet - Eng. de Teleinformtica


70 Apostila de Matlab

5.1.2 O valor numrico de uma expresso simblica


Obviamente, a expresso simblica pura nem sempre o que ns queremos em
nossas aplicaes. s vezes, precisamos do valor daquela expresso para alguns da-
dos numricos. Assim, precisamos de uma forma de converter nossa expresso sim-
blica em numrica. Isso pode ser feito utilizando as funes subs() e double(),
por exemplo. A primeira utilizada principalmente, para expresses que contenham
objetos simblicos com valor ainda no especificado (como resp no Cdigo 5.2) e
a segunda utilizada para expresses que possuam apenas nmeros como objetos
(como y ou resp2 no Cdigo 5.1).
Primeiramente, a funo subs() possui a seguinte sintaxe geral:

variavel = subs(S,var,numero)

onde variavel recebe o valor da expressa simblica S quando o objeto (termo


varivel) var for substitudo pelo valor numrico presente em numero. necessrio
notar que, entretanto, se S for uma expresso com outros objetos simblicas alm de
var, esses objetos permanecero e variavel receber outra expresso simblica,
agora com o objeto var substitudo por numero. Saiba tambm que numero pode
ser um vetor ou uma matriz, levando subs() a retornar um vetor ou matriz de
valores numricos.
Caso se queira substituir diversos objetos por seus respectivos valores numricos,
a funo subs() toma a seguinte feio:

variavel = subs(S,{var1 var2 ...},{numero1 numero2 ...})

em que as variveis var1, var2, etc. so substitudas por numero1, numero2,


etc., respectivamente, na expresso simblica S (fique atento s chaves delimitado-
ras).
Cdigo 5.4 Valores numricos de expresses simblicas em geral
>> syms x a b c
>> S = 0.75*x^2+4*exp(0.5*x)
S =

4*exp(x/2) + (3*x^2)/4

>> eq = subs(S,x,2) % Substituio para um x


eq =

13.8731

>> eq = subs(S,x,[1 2 3 4]) % Substituio para vrios xs


eq =

7.3449 13.8731 24.6768 41.5562

Pet - Eng. de Teleinformtica UFC


Captulo 5. Introduo Matemtica Simblica 71

>> y = a*x^2 + b*x + c;


>> eq = subs(y,{a b c},{1 2 2}) % Algumas vars. substitudas
eq =

x^2 + 2*x + 2

J a funo double(), como j mencionado, retorna o valor numrico de uma


expresso simblica escrita na forma exata (com apenas nmeros como objetos).
Assim, a sua sintaxe seguinte:

variavel = double(S)

onde S a expresso em questo. O Cdigo 5.5 nos mostra sua utilizao.


Cdigo 5.5 Valores numricos de expresses simblicas exatas
>> y = sym(5);
>> resp1 = y/3
resp1 =

5/3

>> resp2 = double(resp1)


resp2 =

1.6667

>> z1 = sym(10)*cos(5*pi/6)
z1 =

-5*3^(1/2)

>> z2 = double(z1)
z2 =

-8.6603

5.1.3 Funes teis para variveis e expresses simblicas


Criadas as variveis e as expresses simblicas podemos manipul-las e extrair
informaes delas utilizando as funes do ambiente do Matlab prprias para isso.
Algumas dessas funes so:
expand() e factor() (Expandir e fatorar expresses) O Matlab pos-
sui duas funes importantes para expresses simblicas que modificam sua
forma algbrica. Elas so a expand() e factor() e possuem as seguintes
sintaxes:

variavel = expand(S) variavel = factor(S)

UFC Pet - Eng. de Teleinformtica


72 Apostila de Matlab

Como o nome j sugere, a primeira funo, expand(), expande a expresso


dada por S ou desenvolvendo um produto por meio da propriedade distributiva
ou utilizando identidades trigonomtricas, exponenciais e logartmicas para
expandir termos correspondentes ou fazendo ambos. J o comando factor()
reescreve uma expresso polinomial em sua forma fatorada evidenciando as
razes reais do polinmio quando este possuir. O cdigo a seguir nos mostra a
utilidade dessas funes.
>> syms x y
>> a = 2*(x+3)*(x^2-2)*x
a =

x*(2*x + 6)*(x^2 - 2)

>> a_ex = expand(a) % Usando a distributividade...


a_ex =

2*x^4 + 6*x^3 - 4*x^2 - 12*x

>> b = expand(tan(x+y)) % Expanso Trigonomtrica


b =

-(tan(x) + tan(y))/(tan(x)*tan(y) - 1)

>> c = factor(a_ex) % Fatorao de um polinmio


c =

2*x*(x + 3)*(x^2 - 2)

simplify() (Simplificar expresses) O comando smplify() simplifica a


expresso simblica em seu argumento utilizando operaes e propriedades ma-
temticas (soma, multiplicao, regras de fraes, potncias,...). Sua sintaxe
a seguinte:

variavel = simplify(S)

onde S a expresso que se deseja simplificar. O cdigo seguinte demonstra


sua utilidade.
>> syms x y
>> d = simplify(x*(x^2+2*x+1)^2 - (x^5+6*x^3+x))
d =

4*x^2*(x^2 + 1)

>> d = simplify((x+y)/(1/x + 1/y))


d =

x*y

Pet - Eng. de Teleinformtica UFC


Captulo 5. Introduo Matemtica Simblica 73

pretty() (Exibir expresses) O comando pretty() possui a forma:

variavel = pretty(S)

e detm a simples utilidade de apresentar uma expresso simblica de uma


forma mais parecida com a escrita normal. O cdigo seguinte
 2 2nos mostra a
q
forma exibida por pretty() para a expresso x+1y1
+ x 2x+1 :

>> syms x y
>> pretty(((x+1)/(y-1))^(1/2) + ((x^2+1)/(2*y))^2)

2 2
/ x + 1 \1/2 (x + 1)
| ----- | + ---------
\ y - 1 / 2
4 y

5.2
Resolvendo equaes algbricas - a
funo S O L V E ()
Uma das ferramentas mais interessantes e teis do ambiente do Matlab no contexto
de variveis simblicas o resolvedor de equaes algbricas, a funo solve().
Essa funo, na verdade, no necessita, normalmente, que a expresso que entra
como seu argumento seja simblica, mas seus resultados o so. Ela possui as seguin-
tes formas:

variavel = solve(eq) variavel = solve(eq,var)

onde a variavel recebe as solues da equao eq na varivel var. Quando


a equao desejada possui apenas uma varivel, a primeira forma acima mais
utilizada, mas se ela tiver duas ou mais variveis e, mesmo assim, utilizarmos a
primeira forma, o Matlab ir considerar a varivel de resoluo como a mais comum
para isso dentre as presentes (como x, y ou t).
A maior praticidade, entretanto, da funo solve() est no fato de que voc
pode digitar, sempre entre aspas, a equao sem qualquer tipo de manipulao e
com o sinal de igual (=) presente, como em solve(a*cos(x)=1/2) (nesta
equao, a varivel de resoluo, se no definida, ser x, por esta ser mais comum
que a para isso). Caso o sinal de igual no seja apresentado em eq, o Matlab
resolve, por default, a equao eq = 0.
Por fim, se a equao presente em eq apresentar mais de uma soluo, o conjunto
delas ser apresentado em forma de uma vetor-coluna de expresses simblicas. O
cdigo a seguir nos mostra as potencialidades de solve().

UFC Pet - Eng. de Teleinformtica


74 Apostila de Matlab

Cdigo 5.6 Utilizao de solve()


>> solve(cos(x) = 1/2) % Resposta em forma de vetor
ans =

pi/3
-pi/3

>> solve(a*x^2 + bx + c) % Equao-padro de segundo grau


ans =

(- bx - c)^(1/2)/a^(1/2)
-(- bx - c)^(1/2)/a^(1/2)

>> syms a b c x y % Para resolver em outra varivel


>> solve(a*x^2 + bx + c,a)
ans =

-(bx + c)/x^2

>> solve(x^y-y^x,y) % Soluo no encontrada


Warning: Explicit solution could not be found.
> In solve at 160

ans =

[ empty sym ]

>> S = x^y-5;
>> solve(S,y)
ans =

log(5)/log(x)

Note, primeiramente, a necessidade de se declarar as variveis simblicas quando


est se resolvendo uma equao de muitas variveis em uma varivel diferente de x
ou y. Perceba, tambm, que o Matlab no encontra, s vezes, soluo para certas
equaes.
A ttulo de curiosidade, ainda possvel, com o comando solve(), a resoluo
de um sistema de equaes. Para isso, basta utilizar-se da seguinte sintaxe:

resp = solve(eq1,eq2,...,eqn,var1,var2,...,varn)

onde as equaes do sistema so dadas por eq1, eq1, . . . , eqn e este resolvido
nas variveis var1, var1, . . . , varn. Nesse caso muito comum que resp seja
um vetor, pois nele, em sequncia, sero colocadas as solues de cada varivel em
ordem alfabtica. Para sistemas com mais equaes que variveis (ou com nmero
igual de equaes e variveis) no necessria a definio das variveis de resoluo
do sistema var1, var1,..., varn.

Pet - Eng. de Teleinformtica UFC


Captulo 5. Introduo Matemtica Simblica 75

5.3
Aplicaes em Clculo
Voc j deve ter percebido a potncia do ferramental simblico do Matlab nas
sees anteriores. Esse conjunto de funes , entretanto, muito vasto para se refe-
renciar em uma apostila. Assim, o ltimo aspecto matemtico que iremos conhecer
diz respeito s funes que elaboram manipulaes do Clculo Diferencial em Ma-
tlab, compondo esse quesito, as ferramentas para limites, derivadas e integrais.

5.3.1 Limites - a funo limit()


Para clculos de limites, a funo limit() assume a seguinte forma completa:

variavel = limit(S,var,lim,left/right)

em que calculado o limite da expresso simblica S quando a varivel var tende a


lim, pela esquerda (left) ou pela direita(right). Quando se deseja calcular
o limite bidirecional de S tendendo a var (aproximando-se de var pela esquerda e
pela direita), deixa-se em branco a opo left/right. possvel, tambm,
pormos limit(S), em que o Matlab ir atrs do limite de S quando sua varivel
default tende a 0.
O cdigo abaixo nos mostra a utilizao de limit():

Cdigo 5.7 Utilizao de limit()


>> syms x h
>> limit(1/x, x, 0, right)
ans =

Inf

>> limit(1/x, x, 0, left)


ans =

-Inf

>> lim1 = limit(sin(x)/x) % Limite sin(x)/x, x -> 0


lim1 =

>> lim2 = limit((sin(x + h) - sin(x))/h, h, 0)


lim2 =

cos(x)

UFC Pet - Eng. de Teleinformtica


76 Apostila de Matlab

5.3.2 Derivadas - a funo diff()


Simbolicamente, a derivada de uma expresso dada por diff(), cujas formas
so, simplesmente:

variavel = diff(S,var) variavel = diff(S,var,n)

onde a expresso S derivada, na varivel var, uma vez pela forma acima esquerda
e n vezes na forma da direita (sendo, portando, a derivada n-sima de S).
Alguns exemplo de diff():
Cdigo 5.8 Utilizao de diff()
>> syms x t
>> diff(exp(x^2)) % Derivada primeira (note a regra da cadeia)
ans =

2*x*exp(x^2)

>> diff(exp(x^2),2) % 2a derivada e regra da multiplicao


ans =

2*exp(x^2) + 4*x^2*exp(x^2)

>> S = x + cos(t^2)*x
S =

x + x*cos(t^2)

>> der1 = diff(S,t) % Derivao em t


der1 =

-2*t*x*sin(t^2)

>> der2 = diff(S,x,2) % Segunda derivao em x


der2 =

5.3.3 Integrais - a funo int()


A integrao de expresses por meio de da funo int() pode ser definida ou
indefinida. Suas formas so:

variavel = int(S,var) variavel = int(S,var,a,b)

em que a forma esquerda nos representa a integrao indefinida de S na varivel


var e a forma direita nos apresenta a integrao definida do mesmo S em var
dentro dos limites a e b. Note sua utilidade no Cdigo 5.9.

Pet - Eng. de Teleinformtica UFC


Captulo 5. Introduo Matemtica Simblica 77

Cdigo 5.9 Utilizao de inf()


>> syms x t
>> int(sin(t)) % Integrao indefinida
ans =

-cos(t)

>> int(x*log(x))
ans =

(x^2*(log(x) - 1/2))/2

>> int(cos(t)*sin(t),0,pi) % Integrao definida


ans =

>> int(exp(-x^2),-inf,inf)
ans =

pi^(1/2)

5.4
Grficos de expresses simblicas
O Matlab oferece diversas formas de se plotar um grfico partindo de uma expres-
so simblica. Uma de suas formas mais simples para isso, entretanto, se expressa
na utilizao das chamadas ez-functions (de easy, fcil), algumas delas vistas su-
perficialmente na Seo 4.7 do captulo anterior. Alm de plotarem grficos, elas
incluem, automaticamente, ttulo e nomes de eixo. Estas funes, de forma mais
completa, esto apresentadas na tabela abaixo:

Tabela 5.1 Ez-functions do Matlab

Funo Tipo Funo Tipo


ezcontour() Curvas de nvel. ezcontourf() Curvas de nvel
preenchidas.
ezmesh() Malha 3D.
ezmeshc() Malha 3D com cur-
ezsurf() Superfcie.
vas de nvel.
ezplot() Curvas 2D.
ezsurfc() Superfcie com cur-
ezplot3() Curvas 3D. vas de nvel.

A sintaxe da maioria dessas funes bastante semelhante, fazendo das funes

UFC Pet - Eng. de Teleinformtica


78 Apostila de Matlab

ezplot() e ezplot3() as nicas com especificaes diferentes. Assim, todos os


outros tipos de grficos/funes da Tabela 5.1 possuem a seguinte forma geral:

funcao(S,[xmin xmax ymin ymax],n)

onde funcao retorna o grfico de S, com variveis simblicas x e y (podendo ser


outras), no domnio dado por xmin x xmax e ymin y ymax e em uma
grade nn. O domnio e o tamanho da grade no so obrigatrios, pois, caso no
definidos, eles so configurados como 2 x 2 2 y 2 em uma grade
60 60.
As outras duas funes da Tabela 5.1, por sua vez, plotam curvas e possuem as
seguintes formas:

ezplot(Sx,Sy,[min max]) ezplot3(Sx,Sy,Sz,[min max])

em que Sx, Sy (para ezplot()) e Sz (para ezplot3()) representam as expres-


ses simblicas de uma varivel, digamos t, que parametrizam os eixos x, y e z das
curvas em 2 e 3 dimenses e que possuem domnio definido por min t max.
Esse domnio tambm no possui declarao obrigatria, sendo seu default como
[-2*pi 2*pi].
Por fim, uma curva dada por uma expresso simblica S, com apenas uma vari-
vel, pode ser plotada diretamente com a funo ezplot() no domnio entre min
e max para essa varivel da seguinte maneira:

ezplot(S,[min max])

A rotina abaixo nos apresenta alguns subplotes de exemplo dos conhecimentos


acima.
Cdigo 5.10 Grficos de expresses simblicas
% Declarao das variveis
syms x y t

subplot(3,2,1)
% Superfcie de baixa preciso
S1 = sin(x)-cos(y);
ezsurf(S1,20)

subplot(3,2,2)
% Superfcie de alta preciso
ezsurf(S1,100)

subplot(3,2,3)
% Malha 3D com curvas de nvel
S2 = atan(x*y);
ezmeshc(S2,[-1 1 -1 1])

Pet - Eng. de Teleinformtica UFC


Captulo 5. Introduo Matemtica Simblica 79

subplot(3,2,4)
% Curvas de nvel
ezcontour(sin(x) - sin(y) - cos(x*y),[0 pi 0 pi])

subplot(3,2,5)
% Curva 2D parametrizada
ezplot(t*sin(t),t*cos(t),[0 10*pi])

subplot(3,2,6)
% Curva 2D no-parametrizada
ezplot(sin(x) + sin(y) - sin(x*y),[0 3*pi 0 3*pi])

Figura 5.1 Resultado do Cdigo 5.10

5.5
Aplicaes
Aplicao 5.1 A equao de um crculo de raio R e centro no ponto (2, 4)
no plano xy dada por (x 2)2 + (y 4)2 = R2 . A equao de uma reta no plano
xy dada por y = x2 + 1. Determine as coordenadas dos pontos (em funo de R)
onde a reta intercepta o crculo.
Soluo Para a resoluo de tal problema, basta, em teoria, resolver o sistema
baixo para um R constante:
(
(x 2)2 + (y 4)2 = R2
x
y = +1
2

UFC Pet - Eng. de Teleinformtica


80 Apostila de Matlab

que, em Matlab, pode ser calculado diretamente pela funo solve() segundo,
por exemplo, o cdigo a seguir:

Cdigo 5.11 Aplicao 5.1


>> syms x y R
>> [xr yr] = solve((x-2)^2 +(y-4)^2 = R^2,y=x/2+1)

xr =

((4*R^2)/5 - 64/25)^(1/2) + 14/5


14/5 - ((4*R^2)/5 - 64/25)^(1/2)

yr =

((4*R^2)/5 - 64/25)^(1/2)/2 + 12/5


12/5 - ((4*R^2)/5 - 64/25)^(1/2)/2

Assim, so encontrados os pontos pedidos, os dois primeiros valores dos vetores


acima para o primeiro ponto e os dois segundos valores para o segundo ponto:
 q q 
14 4R2 64 12 1 4R2 64
Ponto 1 : + 25 , 5 + 2 25


5 5 5
 q q 
14 4R2 64 12 1 4R2 64
Ponto 2 : 25 , 5 2 25


5 5 5

..................................................................................
Aplicao 5.2 Um tanque com um topo he-
misfrico, como mostrado ao lado, deve ser cons-
trudo de forma que comporte 5105 L. Determine
R
o raio do tanque R e sua altura H que minimizem
o custo da construo do tanque se a parte ciln-
drica vale R$ 300,00 o metro quadrado, enquanto
isto custa R$ 400,00 na parte hemisfrica.

Dados:
Volume do cilindro: Vc = R2 H; H
R
rea sup. do cilindro: Ac = 2RH;

Volume do hemifrio: Vh = 23 R3 ;

rea sup. do hemifrio: Ah = 2R2 .

Soluo Esse um tpico problema de mximo/mnimo de uma funo, muito


comum em Clculo. Primeiramente devemos encontrar uma expresso do volume
total do tanque em metros cbicos (1 m3 = 1000 L) como uma funo de R e H:

2
Vtotal = Vc + Vh 500 = R2 H + R3
3

Pet - Eng. de Teleinformtica UFC


Captulo 5. Introduo Matemtica Simblica 81

Agora, calculamos o valor do custo total:

C = 300Ac + 400Ah = 300(2RH) + 400(2R2 )

Teramos, ento, que resolver a primeira equao, por exemplo, em H e depois


substituir esse resultado na expresso para C. Depois tiraramos a derivada de C
em relao a R e igualaramos o obtido a zero para obter o valor otimizado para
R. Tendo esse valor em mos, encontraramos o H otimizado a partir da primeira
equao.
Este processo bastante rduo para o nosso caso, por isso faremos o Matlab
resolver este problema com o cdigo a seguir, seguindo o algoritmo comentado
acima:

Cdigo 5.12 Aplicao 5.2


>> syms R H
>> V = pi*R^2*H + (2/3)*pi*R^3 - 500; % Funo para volume
>> H = solve(V,H) % Resolvendo V = 0 (nosso caso) para H
H =

-((2*pi*R^3)/3 - 500)/(pi*R^2)

>> C = 300*(2*pi*R*H) + 400*(2*pi*R^2); % Funo para o custo


>> dCdR = diff(C,R) % Derivada da funo de custo
dCdR =

400*pi*R + (600*((2*pi*R^3)/3 - 500))/R^2

>> Rmins = solve(dCdR,R) % Rs mnimos (quando dC/dR = 0)


Rmins =

(375/pi)^(1/3)
(3^(1/2)*(375/pi)^(1/3)*i)/2 - (375/pi)^(1/3)/2
- (3^(1/2)*(375/pi)^(1/3)*i)/2 - (375/pi)^(1/3)/2

>> Rmins = double(Rmins) % Valor numrico dados os Rs mnimos


Rmins =

4.9237
-2.4619 + 4.2641i
-2.4619 - 4.2641i

>> Rmin = Rmins(1) % nico R mnimo real


Rmin =

4.9237

>> Hmin = double(subs(H,R,Rmin)) % H mnimo para o R mnimo


Hmin =

UFC Pet - Eng. de Teleinformtica


82 Apostila de Matlab

3.2825
>> Cmin = double(subs(C,{R H},{Rmin Hmin})) % Custo mnimo
Cmin =

9.1394e+004

..................................................................................
Aplicao 5.3 Uma importante funo de distribuio de probabilidade (FDP)
conjunta distribuio gaussiana bivariada:
" !#
1 1 (x x )2 (y y )2
fXY (x, y) = exp +
2x y 2 x2 y2

onde X e Y so variveis aleatrias descorrelacionadas, em que x e y so as


mdias de X e Y , enquanto x e y so seus respectivos desvios-padres. Sabendo
que a distribuio de probabilidade marginal de X (fX (x)) e a funo distribuio
acumulada (FDA) de X e Y (FXY (x, y)) so dadas por

Z Zy Zx
fX (x) = fXY (x, y) dy FXY (x, y) = fXY (x, y) dx dy

utilize o Matlab para plotar todas essas funes para x = y = 0 e x = 1 e


y = 3.
Soluo Apesar de parecer complexa, a funo fXY (x, y) se torna simples no
ambiente do Matlab ao se utilizar expresses simblicas, bastando escrev-la em
linha. Para a plotagem, utiliza-se a funo ezsurf(), j que estamos tratando de
uma funo de duas variveis.
Para fX (x) e FXY (x, y), devemos, antes de plotar, efetuar as integrais necessrias
com int(), j que estamos tratando de expresses simblicas. A primeira integral
simples e basta aplic-la em int() de a . J a segunda integral, dupla,
deve ser manejada com uma integral da integral, ou seja, usaremos int() dentro
de outro int().
O Cdigo 5.13 nos mostra a execuo do processo acima descrito.

Cdigo 5.13 Aplicao 5.3


syms x y

mx = 0; my = 0; % Mdias
sx = 1; sy = 3; % Desvios-padres

% Frmula da distribuio gaussiana bivariada


fxy = 1/(2*pi*sx*sy)*exp((-1/2)*((x-mx)^2/sx^2+(y-my)^2/sy^2))

% Plote de fxy
subplot(2,2,1)
ezsurf(fxy,[-3 3 -7 7],100)
title(FDP da Gaussiana Bivariada)

Pet - Eng. de Teleinformtica UFC


Captulo 5. Introduo Matemtica Simblica 83

axis([-3 3 -7 7 0 0.05])
% Plote de fx
subplot(1,3,2)
Fx = int(fxy,y,-inf,inf) % Integral simples em y
ezplot(Fy)
title(Distribuio de probabilidade marginal de X)

% Plote de Fxy
subplot(1,3,3)
Fxy = int(int(fxy,x,-inf,x),y,-inf,y) % Integral dupla
ezsurf(Fxy,[-3 3 -7 7],100)
title(FDA da Gaussiana Bivariada)

Figura 5.2 Figura gerada pelo Cdigo 5.13

Note que fX (x) tem a forma de uma gaussiana de uma varivel aleatria apenas,
como era de se esperar, e que a FDA de fXY (x, y) apresentada tende a 1 (o canto
superior da terceira figura) quando x e y tendem ao infinito, algo tambm esperado.

5.6
Lista de funes para expresses
simblicas
Segue, abaixo, uma lista com algumas importantes funes que utilizam ou retor-
nam expresses simblicas. Essas funes, que normalmente facilitam muitos cl-
culos complexos em Engenharia e Fsica por utilizarem-se dos objetos simblicos,
esto apresentadas abaixo de forma simplificada para que o leitor apenas conhea
sua principal utilidade. H de se ressaltar, tambm, que muitas das funes que
apareceram nos captulos anteriores podem ter como argumentos expresses simb-
licas. Assim, para se ter um guia completo de funes do Matlab para expresses
e variveis simblicas, visite www.mathworks.com/help/symbolic. Por fim,
aqui as expresses simblicas so representadas por S e as variveis simblicas por
var.

UFC Pet - Eng. de Teleinformtica


84 Apostila de Matlab

Tabela 5.2 Manipulao de expresses simblicas

Funo Descrio
simple(S) Busca pela forma mais simples de S.
coeffs(S,form) Retorna um vetor de coeficientes de S com relao
forma form (que pode ser x, log(x), exp(x),
etc.).
compose(f,g) Cria a funo composta f g a partir das expresses
simblicas f e g.
horner(S) Decompe S no mximo nmero de fatores em co-
mum.
rewrite(S,f) Rescreve S em termos da funo presente em f
(como em rewrite(sin(x), exp), que res-
creve sen(x) em funo de ex ).

Tabela 5.3 Expresses simblicas especiaisa

Funo Descrio
dirac(x) Funo Delta de Dirac, (x) (impulso).
heaviside(x) Funo degrau de Heaviside, H(x) (degrau padro, u(x)).
gamma(x) Funo Gama, (x).
zeta(x) Funo Zeta de Riemann, (x).
psi(x) Funo Digama, (x).
erf(x) Funo erro, erf(x).
sinint(x) Funo seno integral, Si(x).
cosint(x) Funo cosseno integral, Ci(x).
a
Todas essas funes tambm podem recebem escalares e arranjos.

Tabela 5.4 Funes de controle de preciso

Funo Descrio
vpa(S) Computa matematicamente a expresso em S, ou seja,
vpa(pi) retorna 3.141592 simblico, por exemplo.
digits(x) Faz a funo vpa() trabalhar com respostas de x dgitos,
podendo chegar at 25000.

Pet - Eng. de Teleinformtica UFC


Captulo 5. Introduo Matemtica Simblica 85

Tabela 5.5 Aplicaes em Sries e Transformadas

Funo Descrio
symprod(S, Retorna o produto dos termos da srie com termo-geral
var,a,b) dado por S na varivel var, que varia entre a e b.
symsum(S, Retorna a soma dos termos da srie com termo-geral
var,a,b) dado por S na varivel var, que varia entre a e b.
taylor(S,var) Retorna a expanso em Srie de Taylor de S na varivel
var.
fourier(S, Aplica a transformada de Fourier em S, transformando
varT,varW)/ da varivel varT para a varW. / Aplica a transformada
ifourier(S, inversa de Fourierem S, passando da varivel varW para
varW,varT) varT
laplace(S, Aplica a transformada de Laplace de S, da varivel varT
varT,varS)/ para varS. / Aplica a transformada inversa de Laplace
ilaplace(S, de S, da varivel varS para varT.
varS,varT)
ztrans(S, Aplica a transformada Z de S, da varivel varN para
varN,varZ)/ varZ. / Aplica a transformada Z inversa de S, da va-
iztrans(S, rivel varZ para varN.
varZ,varN)

Tabela 5.6 Outras funes

Funo Descrio
finverse(S,var) Retorna a funo inversa, na varivel var, da expres-
so em S.
latex(S) Retorna o cdigo em LATEX para a expresso S.
ccode(S) Retorna o cdigo em C para a expresso S.
taylortool(S) Executa uma ferramenta didtica para a manipulao
da Srie de Taylor de S.
rsums(S,a,b) Executa uma ferramenta didtica sobre as Somas de
Riemann para S.
poly2sym(v) Cria um polinmio simblico, cujos coeficientes so,
em sequncia, o elementos de v.
sym2poly(S) Cria um vetor com os coeficientes do polinmio sim-
blico S.

UFC Pet - Eng. de Teleinformtica


Referncias Bibliogrficas

[1] GILAT, Amos.: MATLAB com aplicaes em engenharia. 2a Edio. Porto


Alegre: Bookman, 2006.

[2] Grupo PET TELE: Apostila de introduo ao Octave/Matlab. Verso


A2011M11D01. Niteri: Novembro, 2011. Disponvel em http://www.
telecom.uff.br/pet/petws/downloads/apostilas/MATLAB.pdf.

[3] Help do Matlab. http://www.mathworks.com/help/matlab/.

[4] PALM, Willian J.: Introduction to MATLAB for engineers. 3a Edio. Mc-
GrawHill, 2011.

[5] HAHN, Brian D.; VALENTINE, Daniel T.: Essential MATLAB for Engineers
and Scientists. 3a Edio. Elsevier, 2007.

[6] MAGRAB, Edward B.; AZARM, Shapour; BALACHANDRAN, Balakumar;


DUNCAN, James H.; HEROLD, Keith E.; WALSH, Gregory C.: An Engineers
Guide to MATLAB with Applications from Mechanical, Aerospace, Electrical,
Civil and Biological Systems Engineering. 3a Edio. Prentice Hall, 2011.

[7] KALECHMAN, Misza: Pratical MATLAB basics for Engineers . CRC Press,
2009.

[8] KUNCICKY, David: MATLAB Programming. Prentice Hall, 2003.