Vers~
ao 1.1
Conte
udo
Introduc~
ao . . . . . . . . . . . . . .
O que e o Matlab? . . . . . . .
Ajuda . . . . . . . . . . . . . . . . .
O comando HELP . . . . . . .
O comando LOOKFOR . . . .
O \Help Desk" . . . . . . . . .
O sistema Matlab . . . . . . . .
Matrizes . . . . . . . . . . . . . . . .
Criac~ao de matrizes . . . . . .
Indices . . . . . . . . . . . . . .
O operador \:" . . . . . . . . .
Express~
oes . . . . . . . . . . . . . .
Variaveis . . . . . . . . . . . . .
N
umeros . . . . . . . . . . . . .
Operadores . . . . . . . . . . .
Func~oes . . . . . . . . . . . . .
Express~oes . . . . . . . . . . . .
Polinomios . . . . . . . . . . .
Manipulac~ao de matrizes . . . . . . .
Criac~ao de matrizes . . . . . .
Concatenac~ao de matrizes . . .
Remoc~ao de colunas e linhas . .
Gr
acos . . . . . . . . . . . . . . . .
Criac~ao de gracos . . . . . . .
Gr
acos de variaveis complexas
Visualizac~ao de func~oes de duas
O ambiente Matlab . . . . . . . . . .
Gest~ao de variaveis . . . . . . .
O comando format . . . . . . .
Supress~ao de resultados . . . .
Edic~ao de comandos . . . . . .
Directorios e cheiros . . . . .
Os comandos LOAD e SAVE .
Ficheiros de comandos . . . . .
T
opicos sobre matrizes . . . . . . . .
Algebra
linear . . . . . . . . . .
Operac~oes elemento-a-elemento
Func~oes estatsticas . . . . . . .
Expans~ao escalar . . . . . . . .
Indices logicos . . . . . . . . . .
Programac~ao em Matlab . . . . . . .
A instruc~ao IF . . . . . . . . .
A instruc~ao FOR . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
vari
aveis
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4
4
4
4
4
5
5
5
5
6
6
7
7
7
8
8
8
9
10
10
10
11
12
12
13
14
14
14
15
15
15
16
16
17
17
17
18
19
20
20
21
21
21
Sinais de Audio
. . . . . . . . . . . . . .
Imagens . . . . . . . . . . . . . . . . . .
Construc~ao de codigo eciente com o Matlab
Reserva de espaco para variaveis . . . .
Vectorizac~ao de algoritmos . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
22
22
23
23
24
25
Agradecimentos
O autor agradece aos seus colegas Prof. Ana Maria Tome, Prof. Ant
onio Joaquim Teixeira,
Prof. Paulo Jorge Ferreira e Prof. Jose Lus Azevedo, pelas sugest~
oes e correcc~
oes realizadas neste
documento
http://www.ieeta.pt/~vieira/MatlabNumInstante.pdf
O \Matlab num Instante" pode ser distribudo sujeito
as seguintes restric~
oes:
O seu conte
udo n~ao pode ser alterado.
N~
ao pode ser utilizado (no todo ou em parte) na venda ou promoc~
ao de qualquer produto ou
documento.
Ajuda
O comando HELP
Para esclarecer a maior parte das d
uvidas acerca da utilizac~
ao de uma dada func~
ao do Matlab o
comando help e de grande utilidade. Se se pretender, por exemplo, informac~
ao sobre a func~
ao sin,
basta fazer
help sin
obtendo-se a seguinte descric~ao
SIN Sine.
SIN(X) is the sine of the elements of X.
O Matlab possui todas as func~oes organizadas em grupos e a pr
opria estrutura de direct
orios onde o
Matlab e armazenado em disco reecte esse facto. Por exemplo, todas as func~
oes de
algebra linear
est~
ao armazenadas no directorio matfun. Para obter uma lista completa deste tipo de func~
oes basta
fazer
help matfun
Como n~
ao e facil decorar os nomes de todas as categorias de func~
oes, existe uma janela de ajuda mais
organizada, bastando para tal escrever o comando
helpwin
O comando LOOKFOR
Quando se pretende encontrar uma func~ao para resolver um problema, mas desconhece-se se existir
a
alguma adequada no Matlab, o comando lookfor permite pesquisar as primeiras linhas do\help" de
todas func~
oes da instalac~ao do Matlab. Esta pesquisa e adequada para resolver a maior parte das
situac~
oes uma vez que a primeira linha do\help" de uma func~
ao contem sempre uma descric~
ao sum
aria
da sua funcionalidade. O seguinte exemplo procura pela palavra\inverse".
lookfor inverse
Se se pretender que a func~ao lookfor pesquise todas as linhas do\help", pode-se utilizar a opc~
ao
-all, tal como o seguinte exemplo ilustra.
lookfor -all inverse
O \Help Desk"
A partir da vers~ao 5.0, o Matlab vem acompanhado com uma ajuda em formato\html" e todos os manuais em formato\pdf". Essa informac~ao pode ser encontrada no endereco http://www.mathworks.com.
Dentro do campus da Universidade de Aveiro, tambem e possvel ter acesso directo a essa informac~
ao
no endereco http://acs.det.ua.pt/matlab.
O sistema Matlab
O sistema Matlab e constitudo pelas seguintes partes:
A linguagem
O ambiente de trabalho
Gr
acos
"Toolboxes"
Matrizes
Criac~
ao de matrizes
Uma matriz e uma estrutura de dados bidimensional que permite guardar n
umeros de uma forma
ordenada e indexavel. Para criar, por exemplo, a seguinte matriz com duas linhas e tr^es colunas
1 2 3
A=
;
4 5 6
basta introduzir o comando:
A= [1 2 3;4 5 6]
ou em alternativa
A= [1,2,3;4,5,6]
Os vectores coluna e linha s~ao casos particulares de matrizes e s~
ao criados utilizando a mesma
notac~
ao. Para criar uma variavel com apenas um elemento basta fazer
a= 10
Este e um caso particular de uma matriz de dimens~
ao 11, e pode-se igualmente utilizar a notac~
ao
mais geral
a= [10]
Indices
O elemento da linha i e da coluna j de uma matriz A e designado por A (i; j). Por exemplo o elemento
da linha 1 e coluna 3 da matriz A e designado por A (1; 3). Em notac~
ao Matlab, para obter o elemento
A (1; 3) denida anteriormente, pode-se escrever
A(1,3)
e obtem-se
ans= 3
Para alterar o valor do elemento A (1; 3) para 7 basta fazer
A(1,3)= 7
Os ndices das matrizes s~ao n
umeros inteiros positivos pertencentes ao intervalo [1 : : : N ] em que N
depende da memoria disponvel, e podem ser vectores declarados anteriormente. Se pretendermos por
exemplo, extrair a segunda linha da matriz A podemos fazer
v= A(2,[1 2 3])
v=
4
5
6
ou declarando primeiro um vector para os ndices das colunas
k= [1 2 3]
v= A(2,k)
v=
4
5
6
O operador \:"
A criac~
ao de vectores elemento a elemento e bastante morosa e para matrizes de grandes dimens~
oes
quase irrealizavel. O Matlab permite gerar sequ^encias de n
umeros de forma r
apida se zermos uso do
operador\:". Se quisermos gerar o vector a = [1; 2; 3; : : : ; 10] podemos fazer
a= 1:10
A notac~
ao geral para o operador \:" e a seguinte
N
umero inical : incremento : N
umero final
e permite a gerac~ao de sequ^encias de n
umeros inteiros como no exemplo anterior ou mesmo de n
umeros
reais. Eis alguns exemplos:
e= 0:pi/20:2*pi
f= 10:-1:-10
O operador\:" pode ser utilizado na gerac~
ao de vectores de ndices obtendo-se uma notac~
ao muito
compacta. Se quisermos obter as colunas mpares da matriz A podemos fazer
B=A(1:2,1:2:3)
No caso anterior s~ao indexadas todas as linhas da matriz. Para simplicar a notac~
ao, quando n~
ao se
conhece exactamente o n
umero de linhas de uma matriz, pode-se utilizar a notac~
ao
B=A(:,1:2:3)
Exerccio 1 Gere uma sequ^encia de n
umeros pares com incio em 4 e a terminar no n
umero 100.
Exerccio 2 Gere uma sequ^encia numerica decrescente com incio em 5 e a terminar em -5.
Exerccio 3 Gere uma sequ^encia numerica com 100 elementos pertencentes ao intervalo [0 : : : 1].
Exerccio 4 Considere uma matriz A com 20 linhas e 30 colunas. Construa um comando que permita
extrair para uma matriz B uma sub-matriz de A constituida pelas linhas de 10 a 15 e as colunas de 9
a 12.
Express~
oes
O Matlab permite a construc~ao de express~
oes matem
aticas sem qualquer declarac~
ao do formato
numerico ou dimens~ao das matrizes. Existem quatro constituintes b
asicos nas express~
oes do Matlab:
Vari
aveis
N
umeros
Operadores
Func~
oes
Vari
aveis
Todas as variaveis do Matlab s~ao do tipo matriz e a sua criac~
ao e autom
atica. Por exemplo, o comando
Custo total= 1000
resulta na criac~ao em memoria de uma matriz de 1 1 com o valor 1000. O Matlab distingue as
letras mai
usculas das min
usculas nos nomes das vari
aveis e s
o toma em considerac~
ao os primeiros 31
caracteres. Para visualizar o valor de uma vari
avel basta escrever o seu nome.
Existe uma variavel especial que e utilizada pelo Matlab quando n~
ao se atribui o resultado de
uma express~ao a qualquer variavel. Esta vari
avel designa-se por\ans" (do termo\answer", resposta) e
pode ser utilizada numa sess~ao interactiva para continuac~
ao dos c
alculos, tal como o exemplo seguinte
demonstra
2*sin(2)
ans=
1.8186
ans/102
ans =
0.017829
N
umeros
O Matlab utiliza uma notac~ao standard para a representac~
ao dos n
umeros, admitindo notac~
ao cientca
e n
umeros complexos. A unidade imagin
aria j = sqrt(1) e representada no Matlab pelas letras i
ou j. Como estas letras podem ser utilizadas no nome de outras vari
aveis convem ter o cuidado de
conrmar o seu valor antes de as usar. A seguir ilustram-se alguns exemplos:
10
1+i
10e6j
-11
10j
10e-2
0.312
3e2
-2.3e-4
Operadores
As operac~
oes nas express~oes do Matlab seguem as regras habituais de preced^encia e podem ser aplicadas quer a matrizes quer a n
umeros.
+
*
/
^
'
()
Adic~
ao
Subtracc~
ao
Multiplicac~
ao
Divis~
ao
Potenciac~
ao
Transposta
Par^entesis
Func~
oes
O Matlab possui um conjunto muito grande de func~
oes matem
aticas que permitem resolver grande
parte dos problemas de calculo encontrados, tais como: sin, cos, tan, sqrt, log, etc. Estas aceitam
n
umeros complexos como argumento e podem tambem devolver resultados do tipo complexo. Se, por
exemplo, se calcular a raz quadrada de um n
umero negativo n~
ao ocorre um erro mas o correspondente
n
umero complexo e automaticamente devolvido. Quando as func~
oes s~
ao aplicadas sobre matrizes a
func~
ao e aplicada a cada um dos elementos.
Para obter ajuda sobre a utilizac~ao de qualquer func~
ao basta fazer
help func
em que func e o nome da func~ao.
Existem algumas func~oes especiais que devolvem o valor das constantes matem
aticas mais utilizadas:
pi
i
j
eps
realmin
realmax
Inf
NaN
3.14159265
p
p1
1
Precis~ao relativa do formato double 252
O menor n
umero real 21022
O maior n
umero real (2 eps)21023
Innito
\Not-a-Number"
Express~
oes
Na construc~
ao de express~oes podemos utilizar operadores, func~
oes e vari
aveis. Eis alguns exemplos:
r= (pi+1)/(pi-1)
r =
1.9339
a= abs(4+3i)
a=
5
t= angle(4+3i)
t=
0.6435
a= 0/0
Warning: Divide by zero.
a =
NaN
x= sqrt(-2)
x =
0
+
1.4142i
x= log(-1)
x=
0 +
3.1416i
Polin
omios
Existe no ambiente Matlab um conjunto de func~
oes para manipular polin
omios. A denic~
ao de
polin
omios e feita criando vectores cujos elementos s~
ao os coecientes do polin
omio ordenados por
pot^encia decrescente tal como o exemplo seguinte ilustra. Para representar o polin
omio p(x) =
x2 3x + 2, cria-se o vector
p=[1 -3 2];
e para calcular as suas razes existe a func~
ao
r= roots(p)
r=
2
1
Para obter os coecientes de um polinomio a partir das razes pode-se utilizar a func~
ao
poly(r)
ans=
1
-3
2
Tambem e possvel calcular o valor de um polin
omio num conjunto de pontos utilizando a func~
ao
polyval tal como o exemplo ilustra
polyval(p,r)
ans=
0
0
e que, como se pode ver, calculou o valor do polin
omio nos seus zeros.
O produto entre dois polinomios e obtido atraves da func~
ao conv (convoluc~
ao). O exemplo seguinte
ilustra o produto entre os polinomios x2 + 1 e x3 + x 1 dado por x5 + 2x3 x2 + x 1
p1= [1 0 1]
p2= [1 0 1 -1]
conv(p1,p2)
ans=
1 0 2 -1 1 -1
Exerccio 7 Calcule o seno, o coseno, a tangente, a raz quadrada e a raz c
ubica de =2.
Exerccio 8 Calcule o logaritmo e a raz quadrada de -1.
Exerccio 9 Calcule o valor da func~
ao ex em 100 pontos do intervalo [1 : : : 1].
Exerccio 10 Calcule o valor da func~
ao sin(x + pi=10) cos(x) em 100 pontos do intevalo [ : : : ].
Exerccio 11 Calcule o produto dos polin
omios x6 + 10 e x2 2x + 3.
Exerccio 12 Obtenha o polin
omio cujas razes s~
ao os n
umeros inteiros 1, 2 e 3.
Exerccio 13 Calcule os zeros do seguinte polin
omio p(x) = x3 + 4x2 3x + 1. Calcule o valor do
j!
polin
omio em 100 pontos da forma x = e com ! 2 [0 : : : 2].
10
Manipulac~
ao de matrizes
Esta secc~
ao introduz alguns conceitos elementares sobre a criac~
ao e manipulac~
ao de matrizes.
Criac~
ao de matrizes
As quatro func~oes seguintes permitem a criac~
ao de algumas matrizes elementares:
zeros
ones
eye
rand
randn
Cria
Cria
Cria
Cria
Cria
1.1465i
0.12533
1.1909i
Concatenac~
ao de matrizes
Concatenar matrizes consiste em formar matrizes a partir de outras mais pequenas. A notac~
ao e
id^entica
a utilizada para formar matrizes com n
umeros. Os seguintes exemplos ilustram a concatenac~
ao
de matrizes.
a= [1 2; 3 4]
a =
1
2
3
4
A= [a a; a a]
A =
1
2
1
2
3
4
3
4
1
2
1
2
3
4
3
4
b= (1:4)'
b =
1
2
3
4
B= [b b [a;a]]
B =
1
1
1
2
2
3
4
2
3
4
3
1
3
11
4
2
4
0 1 0 1 0 1 0 1 :
Remoc~
ao de colunas e linhas
possvel remover de uma dada matriz qualquer conjunto de linhas e colunas. Para tal, basta atribuir
E
o valor de uma matriz vazia denida por\[]"
as linhas e colunas que se pretende remover. No exemplo
que se segue, elimina-se a 2a coluna da matriz A.
a= [1 2; 3 4];
A= [a a; a a]
A =
1
2
1
2
3
4
3
4
1
2
1
2
3
4
3
4
A(:,2)= []
A =
1
1
2
3
3
4
1
1
2
3
3
4
A remoc~
ao de um elemento isolado de uma matriz n~
ao e possvel uma vez que esta deixaria de
respeitar as propriedades de uma matriz
A(1,2)=[]
??? Indexed empty matrix assignment is not allowed.
Exerccio 22 Gere uma matriz com dimens~
ao 8 8 constituda por n
umeros aleat
orios obtidos com a
func~
ao randn, e obtenha uma sub-matriz constituda pelas colunas de ndice mpar utilizando a tecnica
de remoc~
ao de colunas.
Exerccio 23 Resolva o exerccio anterior utilizando uma soluc~
ao sem \[]".
Exerccio 24 Gere um vector com todos os n
umeros inteiros de 1 a 101 e elinine os elementos pares.
12
Gr
acos
A gerac~
ao de gracos no Matlab representa um dos seus aspectos mais u
teis. Nesta secc~
ao ser~
ao
apresentados alguns dos comandos mais importantes para a criac~
ao de gr
acos a partir dos valores
armazenados em matrizes.
Criac~
ao de gr
acos
A func~
ao plot e a mais utilizada no Matlab para gerar gr
acos variando o seu comportamento consoante os par^ametros de entrada. A sua forma mais simples consiste em passar como entrada apenas
um vector:
plot(y)
O gr
aco gerado apresenta em abcissas os ndices i dos elementos do vector e em ordenadas o valor
de cada um dos elementos do vector. Tambem e possvel utilizar um segundo vector para o eixo das
abcissas tal como no exemplo seguinte:
w=0:pi/100:2*pi;
x= sin(w);
plot(w,x)
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
rad
A func~
ao plot admite a representac~ao simult^
anea de v
arias curvas, acrescentando mais argumentos
de entrada, devendo os vectores possuir o mesmo n
umero de amostras. Vejamos um exemplo:
w=0:pi/100:2*pi;
x1= sin(w);
x2= sin(w+pi/2)
plot(w,x1,w,x2)
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
4
rad
13
A func~
ao plot permite escolher o tipo de linha, a cor, etc; e existem ainda func~
oes para por
exemplo, acrescentar etiquetas aos eixos, criar uma grelha, etc, (ver o \help" da func~
ao plot para
refer^encia). Destas func~oes destacam-se as seguintes:
xlabel
ylabel
gure
gure(gcf)
zoom
grid
axis
Gr
acos de vari
aveis complexas
Quando o argumento ds func~ao plot e complexo, em abcissa e colocada a parte real do vector e
em ordenadas a parte imaginaria. Pode-se pensar neste processo como uma forma compacta de
representac~
ao. O comando que se segue
plot(z)
e equivalente a fazer
plot(real(z),imag(z))
Vejamos um exemplo em que se utiliza a func~
ao axis square, para que a gura obtida seja uma
circunfer^encia.
w= 0:pi/10:2*pi;
plot(exp(i*w),'-o')
axis square
14
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
-1
-0.5
0.5
Exerccio 34 Visualize em gr
aco a parte real e a parte imagin
aria da func~
ao ej! , para valores de
! 2 [0 : : : 2] e passo de =10.
Visualizac~
ao de func~
oes de duas vari
aveis
Para visualizar uma func~ao de duas variaveis da forma z = f (x; y) o Matlab possui a func~
ao mesh.
Para utilizar esta func~ao e necessario gerar duas matrizes X e Y em que a primeira possui colunas
id^enticas e a segunda linhas id^enticas, com os valores de x e y em que se pretende calcular a func~
ao f.
A func~
ao meshgrid gera as matrizes X e Y a partir dos valores iniciais, nais e respectivo incremento.
p
O seguinte exemplo ilustra a forma de gerar um gr
aco 3D da func~
ao sin (r) =r, com r = x2 + y 2 .
[X,Y] = meshgrid(-8:.5:8);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;
mesh(X,Y,Z)
O ambiente Matlab
A janela de comando do Matlab possui algumas potencialidades na apresentac~
ao dos resultados,
gest~
ao da variaveis, formatac~ao numerica dos resultados, edic~
ao da linha de comandos, etc. Nesta
secc~
ao vamos descrever algumas das suas potencialidades.
Gest~
ao de vari
aveis
Todas as variaveis do Matlab s~ao guardadas na \
area de trabalho" (\workspace"). Para visualizar
as vari
aveis que est~ao na \area de trabalho" num dado momento podemos utilizar os comados who e
15
O comando format
O comando format controla a forma como os valores numericos s~
ao apresentados. Este comando
controla apenas a forma com os valores s~ao apresentados e n~
ao a forma como estes s~
ao representados
internamente. Os seguintes exemplos ilustram os formatos mais comuns.
a= [1/5 pi]
format short
0.2000
3.1416
format short e
2.0000e-001
3.1416e+000
format long
0.20000000000000
3.14159265358979
format long e
2.000000000000000e-001
3.141592653589793e+000
Uma opc~ao u
til do comando format e
format compact
que elimina as linhas em branco extra introduzidas entre a apresentac~
ao das vari
aveis permitindo uma
apresentac~
ao dos resultados mais compacta.
Supress~
ao de resultados
Quando as matrizes s~ao de grande dimens~ao torna-se bastante inc
omodo para o utilizador a apresentac~
ao do resultado no ecran de todos os calculos efectuados. Para evitar a apresentac~
ao dos resultados
basta colocar no nal da linha de comando um ponto e vrgula tal como o seguinte exemplo demonstra:
a= [1/5 pi];
Edic~
ao de comandos
A janela de comando do Matlab permite a edic~
ao de comandos escritos anteriormente. Se por exemplo
se entrou o seguinte comando:
a= sqrt(1:10]
j
Improper function reference. A '','' or '')'' is expected.
o Matlab devolve, como se pode constatar, um erro de sintaxe. Para alterar a linha e substituir o
par^entesis recto por um curvo, basta carregar na tecla " que a linha aparecer
a de novo. Com as teclas
e ! desloca-se o cursor ao longo da linha. O Matlab guarda uma lista de todos os comandos
introduzidos numa sess~ao. Se quiser obter um comando introduzido anteriormente, basta escrever os
primeiros caracteres desse comando e carregar em " para que o comando apareca. A lista seguinte
mostra as teclas de edic~ao disponveis
!
"
#
home
end
esc
del
backspace
16
Existe ainda a possibilidade de guardar num cheiro todos os comandos introduzidos durante uma
sess~
ao com o comando diary.
Direct
orios e cheiros
Quando se arranca o Matlab, o directorio corrente ser
a o c:nmatlabR12nwork. No entanto, se pretendermos guardar num cheiro variaveis, func~
oes e programas Matlab elaborados por n
os, e conveniente
mudar a directoria corrente para uma directoria pessoal. Para visualizar qual o direct
orio corrente
pode-se utilizar o comando
pwd
ans =
C:nmatlabR12nwork
Para mudar de directorio pode-se utilizar o comando cd. Para mudar para a \drive" H: por exemplo,
o seguinte comando deve ser utilizado
cd h:
Quando se escreve um comando na janela do Matlab esse nome ser
a pesquisado em primeiro lugar
no direct
orio corrente. Se n~ao for encontrado, o Matlab pesquisa nos direct
orios que constarem duma
lista interna (comando path).
17
Ficheiros de comandos
Quando se pretende executar repetidamente um conjunto de comandos muito longo, ter de os escrever
torna-se muito moroso. Para resolver este problema, e possvel colocar num cheiro de texto com
a extens~
ao \.m" o conjunto de comandos que se pretende executar. Para executar os comandos
guardados no cheiro, basta escrever na janela de comando do Matlab o nome do cheiro sem a
extens~
ao. Para criar e comecar a editar um cheiro basta escrever o comando edit, para que arranque
um pequeno editor de texto com \debugging" integrado.
T
opicos sobre matrizes
Nesta secc~
ao iremos descobrir mais algumas das possibilidades que o Matlab oferece para operar com
matrizes.
Algebra
linear
possvel resolver com o Matlab diversos problemas da
E
algebra linear, sendo f
acil realizar c
alculos
elaborados com matrizes, como por exemplo, o produto de duas matrizes, invers~
ao de matrizes, c
alculo
dos valores proprios, etc. Dadas as matrizes A e B, por exemplo, a sua soma e calculada da seguinte
forma:
A= rand(4);
B= rand(4);
C= A+B;
Para calcular o produto entre as duas matrizes anteriores basta fazer
C= A*B
que efectua produtos internos entre as linhas de A e as colunas de B. Se quisermos calcular o produto
interno entre dois vectores linha x e y
x= 1:4
y= 3:6
x*y'
ans=
50
enquanto que o produto externo entre estes vectores e dado por
A = x'*y
A =
3
4
5
6
6
8 10 12
9 12 15 18
12 16 20 24
O determinante da matriz A pode ser calculado fazendo apenas
d= det(A)
e se quisermos calcular os valores proprios da matriz simetrica A AT pode-se utilizar o comando
eig(A*A')
e a inversa da matriz A obtem-se fazendo
inv(A)
18
1
2.1
1.1
-5
2
o que indica que o polinomio caracterstico
det (A I)
e
4 + 2:13 + 1:12 51 + 2
Exerccio 37 Construa um vector linha x constitudo pelos n
umeros inteiros pares pertencentes ao
intervalo [1 : : : 8]. Calcule os valores pr
oprios do produto externo de x com x.
Exerccio 38 Resolva o seguinte sistema de equac~
oes com o Matlab
8
< x + 2y z = 10
2x 7y = 1
:
x + 3y 4z = 0
Verique com o Matlab a soluc~
ao obtida.
Operac~
oes elemento-a-elemento
Em muitas situac~oes pretende-se efectuar operac~
oes aritmeticas com matrizes aplicando a operac~
ao
entre os elementos das matrizes. Para transformar um operador matricial na forma elemento-aelemento, basta acrescentar o caracter \." antes do operador. Note-se que no caso da adic~
ao \+" e
da subtrac~
ao \-" n~ao existe qualquer diferenca para os operadores \.+" e \.-" respectivamente.
O exemplo seguinte ilustra o produto elemento-a-elemento de duas matrizes com a mesma dimens~
ao:
A= [1 2 3; 4 5 6]
B= [2 3 4; 9 8 7]
A.*B
ans=
2
6 12
36 40 42
Vejamos agora uma lista de operadores elemento-a-elemento
+
Adi
c~
ao
Subtra
c~
ao
.* Multiplica
c~
ao elemento-a-elemento
./ Divis~
ao elemento-a-elemento
.^ Potencia
c~
ao elemento-a-elemento
.' Transposta n~
ao conjugada
Este tipo de operador e muito u
til para, por exemplo, gerar matrizes com valores de func~
oes:
n= (1:10)';
M= [n n.^2 n.*log2(n)];
plot(M,'-o')
19
100
90
80
70
60
50
40
30
20
10
0
10
Exerccio 42 Crie uma matriz com tr^es colunas e coloque em cada uma delas as seguintes func~
oes:
sin(x), cos(x) e sin(x)*cos(x). O argumento x dever
a ser um vector a comecar em 0 e a acabar em
2 , com um passo de =100.
Exerccio 43 Desenhe o gr
aco da func~
ao sin x2 utilizando o mesmo argumento que no exerccio
anterior.
Exerccio 44 A func~
ao abs d
a como resultado o m
odulo de um n
umero complexo e a func~
ao angle
o seu argumento. Construa um gr
aco do m
odulo e argumento da seguinte func~
ao
y (!) = ! ej!
em que ! varia de 0 a 8 com passos de =40. Desenhe igualmente um gr
aco da parte real versus a
parte imagin
aria.
Func~
oes estatsticas
O Matlab possui uma grande variedade de func~
oes estatsticas para analisar um sinal. Quando estas
func~
oes recebem uma matriz como entrada, a operac~
ao e aplicada sobre cada coluna da matriz. Para
calcular a media de cada uma das colunas de uma matriz podemos fazer:
M= randn(100,3);
mean(M)
para calcular o desvio padr~ao pode-se fazer
std(M)
e para obter um histograma de cada coluna de M
hist(M)
Se se pretender um histograma com mais classes basta acrescentar um segundo argumento
a func~
ao
com o n
umero pretendido.
Exerccio 45 Gere um vector com um milh~
ao de amostras obtidas com a func~
ao rand. Calcule a sua
media, desvio padr~
ao e visualize o seu histograma com 100 classes.
Exerccio 46 Gere agora um vector com um milh~
ao de amostras com a func~
ao randn. Calcule a sua
media, desvio padr~
ao e visualize o seu histograma com 100 classes. Quais as diferencas em relac~
ao
ao exemplo anterior?
Exerccio 47 Gere uma sequ^encia com 100 elementos iguais
a unidade e calcule a sua media e desvio
padr~
ao.
20
Expans~
ao escalar
A expans~
ao escalar consiste na repetic~ao autom
atica de um escalar de modo a que seja possvel realizar
a operac~
ao pretendida com cada elemento de uma matriz. Se pretendermos somar o n
umero 5 a uma
matriz A de dimens~ao 4 4 basta fazer
A+5
em vez de
A+5*ones(4)
Esta notac~
ao simplica as express~oes tornando-as de leitura mais f
acil. Tambem e possvel realizar
atribuic~
oes fazendo por exemplo:
A= magic(4);
A(1:3,1:3)= 1
1
1
1 13
1
1
1
8
1
1
1 12
4 14 15
1
Indices l
ogicos
O Matlab permite a indexac~ao de elementos de uma matriz atraves de ndices l
ogicos que podem ser
obtidos a partir de equac~oes logicas. Considere-se o seguinte vector v
v= [0.1 0.4 0.3 -0.3 -0.9 0.4 0.1 -0.5 -0.1 -0.3 0.1 0.5]
e vamos supor que se pretendia obter um vector apenas com as amostras com amplitude superior a
0.3; ent~
ao, fazendo
v>0.3
ans =
0
1
0
0
0
1
0
0
0
0
0
1
obtem-se um vector de zeros e uns com o valor 1 nas amostras onde a condic~
ao era verdadeira. Para
obter os elementos do vector que satisfazem a condic~
ao basta fazer
v(v>0.3)
0.4
0.4
0.5
Se se pretender um vector com os ndices das amostras que satisfazem a condic~
ao v > 0:3 pode-se
fazer
n= 1:length(v);
n(v>0.3)
ans=
2
6
12
ou, em alternativa, utilizar a func~ao find
find(v>0.3)
ans=
2
6
12
Na tabela seguinte s~ao apresentados os operadores l
ogicos mais comuns da linguagem Matlab
==
~=
<
>
<=
>=
&
j
~
igual
diferente
menor
maior
menor ou igual
maior ou igual
"e" l
ogico
"ou" l
ogico
negac~
ao
21
Programac~
ao em Matlab
O Matlab possui um conjunto de instruc~oes que permitem a construc~
ao de programas. Nesta introduc~
ao apenas faremos refer^encia as instruc~
oes if e for.
A instruc~
ao IF
Esta instruc~ao permite a execuc~ao condicional de c
odigo tendo em conta uma dada condic~
ao l
ogica.
A estrutura e a seguinte
if cond then,
instru
c~
ao 1
instru
c~
ao 2
:::
else
instru
c~
ao 3
instru
c~
ao 4
:::
end
Se a condic~ao cond for verdadeira s~ao executadas as instruc~
oes 1 e 2, sen~
ao ser~
ao executadas as
instruc~
oes 3 e 4. A directiva end no nal indica o m da instruc~
ao if.
Na forma mais simples a directiva else pode ser omitida.
A instruc~
ao FOR
Esta instruc~ao permite a repetic~ao de um conjunto de instruc~
oes. A sintaxe de utilizac~
ao e a seguinte:
for vari
avel= in
cio:passo:fim,
Instru
c~
ao 1
Instru
c~
ao 2
:::
end
A seguir podemos ver alguns exemplos de utilizac~
ao
r= 10;
for n= 1:10,
r= r+10
end
N~
ao e difcil vericar que a express~ao a direita do sinal de igual na instruc~
ao for apenas cria um
vector e que se pode utilizar a instruc~ao for da seguinte forma
r=10;
v= 1:10;
for n= v,
r= r+10
22
end
A instruc~
ao for so deve ser utilizada quando n~
ao se encontra outra forma de implementar o algoritmo pois como veremos na secc~ao sobre "Vectorizac~
ao de algoritmos" (pag.25), torna a execuc~
ao do
programa muito lenta uma vez que o Matlab utiliza uma linguagem interpretada.
Exerccio 52 Gere um vector x com 1000 elementos utilizando a func~
ao rand. Extraia para um outro
vector todos os elementos de x menores que 0.3. Utilize as instruc~
oes for e if.
Exerccio 53 Neste exerccio pretende-se visualizar a func~
ao ex quando se varia o par^
amentro
segundo a express~
ao = 1 + 0:1 n, com n 2 [1; 2; : : : ; 10]. Armazene cada uma das variantes da
func~
ao numa coluna de uma matriz A (100 10) considerando 100 pontos para a vari
avel x 2 [0 : : : 2].
Para visulizar as curvas simult^
aneamente faca apenas plot(A) e experimente mesh(A).
Exerccio 54 A expans~
ao em serie de Taylor da func~
ao seno e dada pela express~
ao
sin(x) = x
xn
x3 x5
+
::: +
sin n
:
3!
5!
n!
2
Calcule a aproximac~
ao para 5 termos da serie em 100 pontos do intervalo [0 : : : 2] e faca um gr
aco
comparando a aproximac~
ao com a func~
ao seno.
Exerccio 55 Usando a instruc~
ao for, construa uma matriz de 10 10 em que cada coluna e um
vector v cujos elementos s~
ao os n
umeros inteiros de 1 a 101 .
Sinais de Audio
O Matlab possui uma serie de func~oes que permitem manipular cheiros de som em formato \ri"2
e, se o computador tiver uma placa de som, reproduzir o sinal armazenado num vector. A instruc~
ao
sound permite fazer esta reproduc~ao utilizando uma dada frequ^encia de amostragem. A frequ^encia
de amostragem indica o n
umero de amostras que s~
ao convertidas de digital para anal
ogico em cada
segundo. Se quisermos reproduzir um vector preenchido com um sinal aleat
orio a uma taxa de 8000Hz
e com uma durac~ao de 2 segundos utilizamos a seguinte sequ^encia de comandos:
r= 2*(rand(1,16000)-0.5);
sound(r,8000);
A amplitude dos elementos do vector de entrada da func~
ao sound deve estar compreendida entre -1
e 1, sendo as amplitudes superiores convertidas para -1 ou 1. Se quisermos reproduzir uma sinus
oide
de 1000Hz com a durac~ao de 0.5 segundos, utilizando uma frequ^encia de amostragem de 8000Hz
procede-se da seguinte forma
fs= 8000;
% Frequ^
encia de amostragem
Ts= 1/fs;
% Per
odo de amostragem
t= 0:Ts:0.5;
% Instantes de amostragem
x= sin(2*pi*1000*t);
sound(x,fs);
Para carregar para um vector um sinal armazenado num cheiro de som com o formato \ri",
pode-se utilizar o comando
1 Este exemplo da instru
c~
ao for, pode ser realizado de forma mais eciente com o comando: v*ones(1,length(v)),
em que v
e um vector coluna.
2 No ambiente windows os cheiros de som com este formato t^
em a extens~
ao "wav".
23
[y,fs]= wavread('ficheiro.wav');
e se se pretender gravar num cheiro com a extens~
ao \wav" um vector pode-se utilizar o comando
wavwrite(y,fs,'ficheiro.wav');
Apesar de no Matlab se poder escolher qualquer frequ^encia de amostragem a maior parte das placas
de som n~
ao permitem a reproduc~ao de sinais amostrados a n~
ao ser nas seguintes frequ^encias
48000
44100
32000
24000
22050
16000
12000
11025
8000
Imagens
O Matlab possui um conjunto de func~oes para manipulac~
ao e visualizac~
ao de imagens a cores. As
imagens s~
ao representadas sob a forma de matrizes. No caso de imagens s
o com nveis de cinzento,
estas podem ser armazenadas numa matriz bidimensional em que cada elemento representa o nvel de
cinzento. Os seguintes comandos mostram como visualizar uma imagem armazenada num cheiro em
disco
I=imread('banner.jpg');
image(I)
axis image
O comando imread carrega a imagem banner.jpg para a matriz I, e o comando image mostra a
gura no ecran.
Podemos facilmente criar imagens sinteticas com o Matlab e visualiz
a-las com os comandos anteriores. Vejamos um exemplo de uma imagem com a metade inferior a branco e a superior a preto:
M= zeros(100);
M(1:50,:)= 1;
colormap gray
image(M);
Construc~
ao de c
odigo eciente com o Matlab
O Matlab permite o desenvolvimento rapido de algoritmos de processamento, mas quando os dados a
tratar possuem uma dimens~ao elevada e necess
ario ter alguns cuidados para que a execuc~
ao do c
odigo
n~
ao se torne demasiado lenta. Existem duas formas principais de optimizar a execuc~
ao do c
odigo: a
reserva de memoria para as variaveis e a vectorizac~
ao de algoritmos.
24
25
Vectorizac~
ao de algoritmos
Todos os operadores e func~oes do Matlab podem ser aplicados sobre vectores e matrizes. Se, por
exemplo, quisermos calcular o seno de cada um dos elementos do vector x com 100 elementos basta
fazer
v= sin(x)
para se obter o resultado pretendido. O Matlab permite assim utilizar como argumento da func~
ao
sin n~
ao apenas um n
umero mas um vector, aplicando a func~
ao a cada um dos seus elementos. No
entanto, existe uma outra forma de realizar os c
alculos que consiste em recorrer ao ciclo for aplicando
a func~
ao sin a um elemento de x de cada vez
for n= 1:100
v(n)= sin(x(n));
end
Contudo, o Matlab utiliza uma linguagem interpretada, o que signica que antes de ser executada
cada linha de codigo e lida e descodicada. Este processo e repetido para cada linha e pode em certos
casos, ser da ordem de grandeza do proprio processamento ou mesmo superior. Um caso ilustrativo e
o do c
alculo do produto interno entre dois vectores linha a e b, denido pela express~
ao
ab=
N
X
a (n) b (n) ;
n=1
26
rel= tfor/tmat
Pelo exemplo anterior pode-se concluir que a \vectorizac~
ao" dos algoritmos e a u
nica forma de
utilizar o Matlab de forma eciente.
Exerccio 59 Obtenha uma matriz com 50 colunas em que cada coluna contem um perodo da func~
ao
seno amostrada em 50 pontos.
Exerccio 60 Gere uma sequ^encia com 10000 valores aleat
orios com distribuic~
ao uniforme e guarde
num vector apenas os que possuem amplitude superior a 0.9. Coloque noutro vector os ndices das
amostras anteriores.
Exerccio 61 Obtenha o gr
aco da func~
ao sin(x)=x variando o argumento entre -100 e 100 com
passos de 0.1.