Professional Documents
Culture Documents
Departamento de Engenharia de de
Teleinformtica
Curso de Graduao em Engenharia de de
Teleinformtica
Apostila de
Matlab Elaborao:
R
PET - Teleinformtica
Fortaleza
2012
Prefcio
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
Referncias Bibliogrficas 86
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-
,
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
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:
Current Folder Nos mostra a pasta atual de onde estamos utilizando nossas
rotinas e para onde iro arquivos gerados pelo Matlab.
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.
393
5
c =
393
>> f = e-ans
f =
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 .
0.3090
>> b = cos(pi/10)
b =
0.9511
1.0000
2.7183
0.5081
1.3
Aplicaes
Aplicao 1.1 Utilizando o Matlab, mostre para alguns valores de x, a va-
lidade da Relao de Euler:
>> z1 = 3 + 4i % Ou z1 = 3 + 4*i
z1 =
3.0000 + 4.0000i
>> 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
0.7317 + 0.6816i
-1.0000 + 0.0000i
-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.
2.5725
7.065193045869377e+008
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
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.
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.
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.
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).
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.
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.
Vetores e Matrizes
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.
2.1
Criando vetores e matrizes
vetor_linha = [num1,num2,num3,...,numN]
vetor_coluna = [num1;num2;num3;...;numN]
ou
nome_da_variavel2 = m:n
vetor = linspace(xi,xf,n)
Uma matriz identidade pode ser definida no Matlab pela funo eye():
matriz_ident = eye(p)
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.
4.5935
88.1981
>> m1 = m(3,:)
m1 =
>> m2 = m(:,5)
m2 =
1.0000
5.0000
4.5000
4.0000
>> m3 = m(2:4,1:3)
m3 =
VET(pi:pf) = [] , MAT(li:lf,ci:cf) = []
23 45 78 96 41 12
>> v(1:4) = []
v =
41 12
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
1 2 4 5
2 4 8 10
3 6 12 15
>> m(1,:) = []
m =
2 4 8 10
3 6 12 15
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.
2.3
Operaes com arranjos
3 5 -1 -1 -6 -9
8 11 -2 -3 -15 -21
12 17 11 16
26 37 26 38
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
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
1 0 0 0
0 0 1 1
0 0 0 0
0 0 0 0
0 0 0 1
0 1 0 0
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.
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 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.
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
=
(R3 + R4 + R6 )
R3 R4 R6 i3 V2
0 R7 R6 (R6 + R7 + R8 ) i4 V3
| {z } | {z } | {z }
A i y
-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
0.8411
0.7206
0.6127
1.5750
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:
2.718281801146385
2.731266102173890e-008
M = QQ1
1 4 9
16 25 36
49 64 81
4
Essa matriz, deve, na verdade, ser diagonalizvel antes de tudo.
Lambda =
112.9839 0 0
0 -6.2880 0
0 0 0.3040
-4.2633e-014
112.9839
-6.2880
0.3040
-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 ).
-4
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.
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.
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.
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.
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.
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.
Rotinas e Programao
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
1 2 3 4 5 6 7
mod =
11.8322
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)
11.8322
>> x = [1:8];
>> exemplo
mod =
14.2829
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.
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 :
% Recebe o vetor
x = input(- Digite um vetor: );
% Apresenta os resultados
disp( ); % Pula uma linha
disp(A mdia dos elementos desse vetor :);
disp(med)
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:
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):
TempK = TempC+273;
TempF = 1.8*TempC+32;
TempR = 1.8*TempK;
>> [x y z] = TransformaTemp(20)
x =
68
y =
293
z =
527.4000
t =
68
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.
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:
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
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
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.
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.
% 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:
>> 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.
..................................................................................
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
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).
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).
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.
Grficos em Matlab
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
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.
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
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:
2
Mais em www.mathworks.com/help/techdoc/ref/line_props.html
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.
title(ttulo do texto)
xlabel(rtulo do eixo x)
ylabel(rtulo do eixo y)
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).
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:
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
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);
title(SEN(X) e COS(X));
subplot(l,c,pos)
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));
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
Degraus/ x = [2000:2006];
stairs(x,y) y = [2 3 5 2 6 8 5];
stairs(x,y,k);
Hastes/ x = [2000:2006];
stem(x,y) y = [2 3 5 2 6 8 5];
stairs(x,y,k);
title(NOTAS
DA TURMA);
5
Voc pode conferir mais algumas funes para grficos especiais do Matlab na Seo 4.7.
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,...)
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.
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
[X,Y] = meshgrid(Xi:incX:Xf,Yi:incY:Yf)
mesh(X,Y,Z)
surf(X,Y,Z)
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());
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)
% Cria a grade-domnio
[X,Y] = meshgrid(-1:.2:1,-1:.2:1);
contour(X,Y,Z,n) contour3(X,Y,Z,n)
% Cria a grade-domnio
[X,Y] = meshgrid(-2:0.1:2,-2:0.1: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
[X,Y,Z] = meshgrid(Xi:incX:Xf,Yi:incY:Yf,Zi:incZ:Zf)
slice(X,Y,Z,G,vx,vy,vz)
% 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
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.
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:
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.
% Criao do grid
[X,Y] = meshgrid(-0.2:0.005:0.2,-0.2:0.005:0.2);
% Plote da superfcie
surf (X,Y,V);
xlabel(x(m)); ylabel(y(m)); zlabel(V(m));
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.
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.
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.
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.
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.
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.
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.
Introduo
Matemtica Simblica
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
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 =
1.6667
5/3
x^3+1
x^3 + 1
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:
z^2 + z
a*x^2 + b*x + c
variavel = subs(S,var,numero)
4*exp(x/2) + (3*x^2)/4
13.8731
x^2 + 2*x + 2
variavel = double(S)
5/3
1.6667
>> z1 = sym(10)*cos(5*pi/6)
z1 =
-5*3^(1/2)
>> z2 = double(z1)
z2 =
-8.6603
x*(2*x + 6)*(x^2 - 2)
-(tan(x) + tan(y))/(tan(x)*tan(y) - 1)
2*x*(x + 3)*(x^2 - 2)
variavel = simplify(S)
4*x^2*(x^2 + 1)
x*y
variavel = pretty(S)
>> 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:
pi/3
-pi/3
(- bx - c)^(1/2)/a^(1/2)
-(- bx - c)^(1/2)/a^(1/2)
-(bx + c)/x^2
ans =
[ empty sym ]
>> S = x^y-5;
>> solve(S,y)
ans =
log(5)/log(x)
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.
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.
variavel = limit(S,var,lim,left/right)
Inf
-Inf
cos(x)
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)
2*exp(x^2) + 4*x^2*exp(x^2)
>> S = x + cos(t^2)*x
S =
x + x*cos(t^2)
-2*t*x*sin(t^2)
-cos(t)
>> int(x*log(x))
ans =
(x^2*(log(x) - 1/2))/2
>> 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:
ezplot(S,[min max])
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])
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])
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
que, em Matlab, pode ser calculado diretamente pela funo solve() segundo,
por exemplo, o cdigo a seguir:
xr =
yr =
..................................................................................
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 ;
2
Vtotal = Vc + Vh 500 = R2 H + R3
3
-((2*pi*R^3)/3 - 500)/(pi*R^2)
(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
4.9237
-2.4619 + 4.2641i
-2.4619 - 4.2641i
4.9237
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
Z Zy Zx
fX (x) = fXY (x, y) dy FXY (x, y) = fXY (x, y) dx dy
mx = 0; my = 0; % Mdias
sx = 1; sy = 3; % Desvios-padres
% Plote de fxy
subplot(2,2,1)
ezsurf(fxy,[-3 3 -7 7],100)
title(FDP da Gaussiana Bivariada)
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)
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.
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 ).
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.
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.
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)
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.
[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.
[7] KALECHMAN, Misza: Pratical MATLAB basics for Engineers . CRC Press,
2009.