Вы находитесь на странице: 1из 26

Contedo

Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
O que o Matlab? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Ajuda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
O comando HELP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
O comando LOOKFOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
O Help Desk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
O sistema Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Criao de matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
ndices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
O operador : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Expresses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Variveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Nmeros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Funes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Expresses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Polinmios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Manipulao de matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Criao de matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Concatenao de matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Remoo de colunas e linhas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Grcos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Criao de grcos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Grcos de variveis complexas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Visualizao de funes de duas variveis . . . . . . . . . . . . . . . . . . . . . . . . . 15
O ambiente Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Gesto de variveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
O comando format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Supresso de resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Edio de comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Directrios e cheiros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Os comandos LOAD e SAVE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Ficheiros de comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Tpicos sobre matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
lgebra linear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Operaes elemento-a-elemento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Funes estatsticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Expanso escalar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
ndices lgicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Programao em Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
A instruo IF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
A instruo FOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1
Matlab num Instante 4
Matlab num Instante
Introduo
O que o Matlab?
O Matlab um sistema para clculo cientco que proporciona um ambiente de fcil utilizao com
uma notao intuitiva mas poderosa. Permite a realizao de algoritmos numricos sobre matrizes
com o mnimo de programao. Alm disso, no ambiente Matlab possvel a criao e manipulao
de matrizes sem a necessidade de dimensionamento prvio e a manipulao das variveis pode ser
realizada de forma interactiva. O termoMatlab tem origem na conjugao dos termosMATrix
eLABoratory.
Este documento pretende ser apenas uma introduo muito breve ao Matlab e permitir a um
utilizador noiniciado comear a dominar os aspectos mais bsicos em pouco tempo. A leitura
deste documento deve ser realizada ao lado de um PC com o Matlab, para o utilizador poder testar
os exemplos e fazer os diferentes exerccios.
Ajuda
O comando HELP
Para esclarecer a maior parte das dvidas acerca da utilizao de uma dada funo do Matlab o
comando help de grande utilidade. Se se pretender, por exemplo, informao sobre a funo sin,
basta fazer
help sin
obtendo-se a seguinte descrio
SIN Sine.
SIN(X) is the sine of the elements of X.
O Matlab possui todas as funes organizadas em grupos e a prpria estrutura de directrios onde o
Matlab armazenado em disco reecte esse facto. Por exemplo, todas as funes de lgebra linear
esto armazenadas no directrio matfun. Para obter uma lista completa deste tipo de funes basta
fazer
help matfun
Como no fcil decorar os nomes de todas as categorias de funes, existe uma janela de ajuda mais
organizada, bastando para tal escrever o comando
helpwin
O comando LOOKFOR
Quando se pretende encontrar uma funo para resolver um problema, mas desconhece-se se existir
alguma adequada no Matlab, o comando lookfor permite pesquisar as primeiras linhas dohelp de
todas funes da instalao do Matlab. Esta pesquisa adequada para resolver a maior parte das
situaes uma vez que a primeira linha dohelp de uma funo contm sempre uma descrio sumria
da sua funcionalidade. O seguinte exemplo procura pela palavrainverse.
lookfor inverse
Se se pretender que a funo lookfor pesquise todas as linhas dohelp, pode-se utilizar a opo
-all, tal como o seguinte exemplo ilustra.
lookfor -all inverse
Matlab num Instante 5
O Help Desk
A partir da verso 5.0, o Matlab vem acompanhado com uma ajuda em formatohtml e todos os man-
uais em formatopdf. Essa informao pode ser encontrada no endereo http://www.mathworks.com.
Dentro do campus da Universidade de Aveiro, tambm possvel ter acesso directo a essa informao
no endereo http://acs.det.ua.pt/matlab.
O sistema Matlab
O sistema Matlab constitudo pelas seguintes partes:
A linguagem
Permite a manipulao e criao de matrizes de forma rpida e intuitiva. Diferentes solues para
um problema podem ser testadas numa fraco do tempo que levaria com outras linguagens (C ou
Fortran por ex.). Possui um conjunto muito vasto de funes que permitem resolver problemas
complexos de forma eciente.
O ambiente de trabalho
O Matlab proporciona um ambiente de trabalho que permite a gesto e visualizao das variveis,
ler e gravar variveis em disco e gerar programas em linguagem Matlab, possibilitando assim a
automatizao de clculos complexos.
Grcos
As funes de criao, visualizao e manipulao de grcos so muito fceis de usar e permitem
a criao de grcos 2D e 3D. O ajuste de escala automtico e o utilizador pode comear
a utilizar as funes de gerao de grcos pouco tempo depois do primeiro contacto com o
ambiente do Matlab.
Toolboxes
O Matlab disponibiliza um conjunto de pacotes de funes para as mais variadas reas de
clculo cientco, sendo estes denominados toolboxes. Existemtoolboxes para estatstica,
processamento de sinal, processamento de imagem, controlo, clculo simblico, etc.
Matrizes
Criao de matrizes
Uma matriz uma estrutura de dados bidimensional que permite guardar nmeros de uma forma
ordenada e indexvel. Para criar, por exemplo, a seguinte matriz com duas linhas e trs colunas
A =

1 2 3
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 so casos particulares de matrizes e so criados utilizando a mesma
notao. Para criar uma varivel com apenas um elemento basta fazer
a= 10
Este um caso particular de uma matriz de dimenso 11, e pode-se igualmente utilizar a notao
mais geral
a= [10]
Matlab num Instante 6
ndices
O elemento da linha i e da coluna j de uma matriz A designado por A(i, j). Por exemplo o elemento
da linha 1 e coluna 3 da matriz A designado por A(1, 3). Em notao Matlab, para obter o elemento
A(1, 3) denida anteriormente, pode-se escrever
A(1,3)
e obtm-se
ans= 3
Para alterar o valor do elemento A(1, 3) para 7 basta fazer
A(1,3)= 7
Os ndices das matrizes so listas de nmeros inteiros positivos que podem ser armazenadas em vectores
declarados previamente. 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 criao de vectores elemento a elemento bastante morosa e para matrizes de grandes dimenses
quase irrealizvel. O Matlab permite gerar sequncias de nmeros de forma rpida se zermos uso do
operador:. Se quisermos gerar o vector a = [1, 2, 3, . . . , 10] podemos fazer
a= 1:10
A notao geral para o operador : a seguinte
N umero_inical : incremento : N umero_final
e permite a gerao de sequncias de nmeros inteiros como no exemplo anterior ou mesmo de nmeros
reais. Eis alguns exemplos:
e= 0:pi/20:2*pi
f= 10:-1:-10
O operador: pode ser utilizado na gerao de vectores de ndices obtendo-se uma notao muito
compacta. Se quisermos obter as colunas mpares da matriz
A =
_
_
1 2 3
4 5 4
6 1 2
_
_
,
podemos fazer
B=A(1:3,1:2:3)
No caso anterior so indexadas todas as linhas da matriz. Para simplicar a notao, quando no se
conhece exactamente o nmero de linhas de uma matriz, pode-se utilizar a notao
B=A(:,1:2:3)
Se quisssemos obter a primeira linha da matriz A podamos fazer
A(1,:)
Matlab num Instante 7
Exerccio 1 Gere uma sequncia de nmeros pares com incio em 4 e a terminar no nmero 100.
Exerccio 2 Gere uma sequncia numrica decrescente com incio em 5 e a terminar em -5.
Exerccio 3 Gere uma sequncia numrica 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 constituda pelas linhas de 10 a 15 e as colunas de 9
a 12.
Exerccio 5 Gere uma sequncia de nmeros mltiplos de 3 compreendidos entre 100 e 132, dispostos
num vector por ordem decrescente.
Exerccio 6 Gere uma sequncia a comear em e a acabar em com um passo de /15.
Expresses
O Matlab permite a construo de expresses matemticas sem qualquer declarao do formato
numrico ou dimenso das matrizes. Existem quatro constituintes bsicos nas expresses do Mat-
lab:
Variveis
Nmeros
Operadores
Funes
Variveis
Todas as variveis do Matlab so do tipo matriz e a sua criao automtica. Por exemplo, o comando
Custo_total= 1000
resulta na criao em memria de uma matriz de 1 1 com o valor 1000. O Matlab distingue as
letras maisculas das minsculas nos nomes das variveis e s toma em considerao os primeiros 31
caracteres. Para visualizar o valor de uma varivel basta escrever o seu nome.
Existe uma varivel especial que utilizada pelo Matlab quando no se atribui o resultado de
uma expresso a qualquer varivel. Esta varivel designa-se porans (do termoanswer, resposta) e
pode ser utilizada numa sesso interactiva para continuao dos clculos, tal como o exemplo seguinte
demonstra
2*sin(2)
ans=
1.8186
ans/102
ans =
0.017829
Nmeros
O Matlab utiliza uma notao standard para a representao dos nmeros, admitindo notao cient-
ca e nmeros complexos. A unidade imaginria j = sqrt(1) representada no Matlab pelas letras
i ou j. Como estas letras podem ser utilizadas no nome de outras variveis convm ter o cuidado de
conrmar o seu valor antes de as usar. A seguir ilustram-se alguns exemplos:
10 -11 0.312
1+i 10j 3e2
10e6j 10e-2 -2.3e-4
Matlab num Instante 8
Operadores
As operaes nas expresses do Matlab seguem as regras habituais de precedncia e podem ser apli-
cadas quer a matrizes quer a nmeros.
+ Adio
- Subtraco
* Multiplicao
/ Diviso
^ Potenciao
Transposta
() Parntesis
Funes
O Matlab possui um conjunto muito grande de funes matemticas que permitem resolver grande
parte dos problemas de clculo encontrados, tais como: sin, cos, tan, sqrt, log, etc. Estas aceitam
nmeros complexos como argumento e podem tambm devolver resultados do tipo complexo. Se, por
exemplo, se calcular a raz quadrada de um nmero negativo no ocorre um erro mas o correspondente
nmero complexo automaticamente devolvido. Quando as funes so aplicadas sobre matrizes a
funo aplicada a cada um dos elementos. Eis uma lista de algumas das funes matemticas mais
comuns e disponis no Matlab:
cos coseno (radianos) log logaritmo nepriano (base e)
sin seno log10 logaritmo base 10
tan tangente rem resto da diviso inteira
acos arco-cosseno abs valor absoluto
asin arcoseno sign sinal
atan arco-tangente round arredonda para o mais prximo
sqrt raiz quadrada floor arredonda para baixo
exp exponencial ceil arredonda para cima
max mximo min mnimo
real parte real de um complexo abs mdulo
imag parte imaginria de um complexo angle argumento de um complexo
Para obter ajuda sobre a utilizao de qualquer funo basta fazer
help func
em que func o nome da funo.
As funes max e min permitem obter, para alm do valor mximo e mnimo de um vector, o
ndice onde ele ocorre. Vejamos um exemplo:
a= [1 4 9 2];
[m,idx]= max(a)
m = 9
idx = 3
Existem algumas funes especiais que devolvem o valor das constantes matemticas mais utilizadas:
Matlab num Instante 9
pi 3.14159265
i

1
j

1
eps Preciso relativa do formato double 2
52
realmin O menor nmero real 2
1022
realmax O maior nmero real (2 eps)2
1023
Inf Innito
NaN Not-a-Number
Expresses
Na construo de expresses podemos utilizar operadores, funes e variveis. 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
Polinmios
Existe no ambiente Matlab um conjunto de funes para manipular polinmios. A denio de
polinmios feita criando vectores cujos elementos so os coecientes do polinmio ordenados por
potncia decrescente tal como o exemplo seguinte ilustra. Para representar o polinmio p(x) = x
2

3x + 2, cria-se o vector
p=[1 -3 2];
e para calcular as suas razes existe a funo
r= roots(p)
r=
2
1
Para obter os coecientes de um polinmio a partir das razes pode-se utilizar a funo
poly(r)
ans=
1 -3 2
Tambm possvel calcular o valor de um polinmio num conjunto de pontos utilizando a funo
polyval tal como o exemplo ilustra
polyval(p,r)
ans=
0
Matlab num Instante 10
0
e que, como se pode ver, calculou o valor do polinmio nos seus zeros.
O produto entre dois polinmios obtido atravs da funo conv (convoluo). O exemplo seguinte
ilustra o produto entre os polinmios x
2
+ 1 e x
3
+ x 1 dado por x
5
+ 2x
3
x
2
+ 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 cbica de /2.
Exerccio 8 Calcule o logaritmo e a raz quadrada de -1.
Exerccio 9 Calcule o valor da funo e
x
em 100 pontos do intervalo [1 . . . 1].
Exerccio 10 Calcule o valor da funo sin(x +pi/10) cos(x) em 100 pontos do intevalo [ . . . ].
Exerccio 11 Calcule o produto dos polinmios x
6
+ 10 e x
2
2x + 3.
Exerccio 12 Obtenha o polinmio cujas razes so os nmeros inteiros 1, 2 e 3.
Exerccio 13 Calcule os zeros do seguinte polinmio p(x) = x
3
+ 4x
2
3x + 1. Calcule o valor do
polinmio em 100 pontos da forma x = e
j
com [0 . . . 2].
Exerccio 14 Calcule o valor do mdulo do quociente
1
x
3
+1
em 100 pontos da forma x = (2)
w
com
w [0 . . . 3].
Manipulao de matrizes
Esta seco introduz alguns conceitos elementares sobre a criao e manipulao de matrizes.
Criao de matrizes
As cinco funes seguintes permitem a criao de algumas matrizes elementares:
zeros Cria uma matriz preenchida com zeros
ones Cria uma matriz preenchida com uns
eye Cria a matriz identidade
rand Cria uma matriz de nmeros aleatrios com distribuio uniforme [0 . . . 1]
randn Cria uma matriz de nmeros aleatrios com distribuio normal de mdia nula e desvio padro 1.
Vejamos alguns exemplo de utilizao destas funes:
Z= zeros(2,5)
Z =
0 0 0 0 0
0 0 0 0 0
a= ones(2,3)*3
a =
3 3 3
3 3 3
n= round(3*rand(1,10))
Matlab num Instante 11
n =
3 1 2 1 3 2 1 0 2 1
A= randn(1,3)+j*randn(1,3)
A =
-0.43256 + 0.28768i -1.6656 - 1.1465i 0.12533 + 1.1909i
Concatenao de matrizes
Concatenar matrizes consiste em formar matrizes a partir de outras mais pequenas. A notao
idntica utilizada para formar matrizes com nmeros. Os seguintes exemplos ilustram a concatenao
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 2 3 4
3 3 1 2
4 4 3 4
Exerccio 15 Crie uma matriz 3 3 em que todos os elementos so iguais a 3.
Exerccio 16 Crie um vector coluna com 100 elementos aleatrios com uma distribuio uniforme.
Exerccio 17 Crie uma matriz 4 4 em que todos os elementos so iguais a 1 + j2.
Exerccio 18 Com a funo eye crie uma matriz diagonal 4 4 em que todos os elementos da
diagonal so iguais a 3.
Exerccio 19 Construa um vector com 128 elementos com a sequinte sequncia:

0 1 0 1 0 1 0 1

.
Exerccio 20 Crie uma matriz com dimenso 4 4 em que cada coluna seja o vector v = [1, 2, 3, 4].
Exerccio 21 Forme a matriz quadrada com dimenso 6 6 constituda por quatro blocos em que os
elementos de cada bloco sejam um ou zero, tal como ilustrado na seguinte matriz:
_

_
1 1 1 0 0 0
1 1 1 0 0 0
1 1 1 0 0 0
0 0 0 1 1 1
0 0 0 1 1 1
0 0 0 1 1 1
_

_
.
Matlab num Instante 12
Remoo de colunas e linhas
possvel remover de uma dada matriz qualquer conjunto de linhas e colunas. Para tal, basta atribuir
o valor de uma matriz vazia denida por[] s linhas e colunas que se pretende remover. No exemplo
que se segue, elimina-se a 2
a
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 remoo de um elemento isolado de uma matriz no 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 dimenso 88 constituda por nmeros aleatrios obtidos com a
funo randn, e obtenha uma sub-matriz constituda pelas colunas de ndice mpar utilizando a tcnica
de remoo de colunas.
Exerccio 23 Resolva o exerccio anterior utilizando uma soluo sem [].
Exerccio 24 Gere um vector com todos os nmeros inteiros de 1 a 101 e elinine os elementos pares.
Grcos
A gerao de grcos no Matlab representa um dos seus aspectos mais teis. Nesta seco sero
apresentados alguns dos comandos mais importantes para a criao de grcos a partir dos valores
armazenados em matrizes.
Criao de grcos
A funo plot a mais utilizada no Matlab para gerar grcos variando o seu comportamento con-
soante os parmetros de entrada. A sua forma mais simples consiste em passar como entrada apenas
um vector:
plot(y)
O grco gerado apresenta em abcissas os ndices i dos elementos do vector e em ordenadas o valor
de cada um dos elementos do vector. Tambm 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)
Matlab num Instante 13
0 1 2 3 4 5 6 7
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Figura 1:
0 1 2 3 4 5 6 7
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
sin
cos
sin*cos
Figura 2:
A funo plot admite a representao simultnea de vrias curvas, acrescentando mais argumentos
de entrada, devendo os vectores possuir o mesmo nmero de amostras. Vejamos um exemplo:
w=0:pi/100:2*pi;
x1= sin(w);
x2= sin(w+pi/2);
x3= x1.*x2;
plot(w,x1,w,x2,w,x3)
legend(sin,cos,asin*cos)
A funo plot permite escolher o tipo de linha, a cor, etc; e existem ainda funes para por
exemplo, acrescentar etiquetas aos eixos, criar uma grelha, etc, (ver o help da funo plot para
referncia). Destas funes destacam-se as seguintes:
Matlab num Instante 14
xlabel Etiqueta do eixo das abcissas
ylabel Etiqueta do eixo das ordenadas
title Nome da gura
legend legenda com o signicado de cada linha
figure Cria uma janela nova
figure(gcf) Coloca a janela de grca corrente frente
zoom Para aumentar zonas de um grco
grid Grelha
axis Dene os limites dos eixos do grco
O Matlab disponibiliza uma pequena funo que permite gerar um certo nmero de valores num
dado intervalo. Se se pretender por exemplo, gerar 100 pontos no intervalo de a :
x= linspace(-pi,pi,100);
Para alm da funo plot, o Matlab tem ainda vrias funes de desenho de grcos, que se utilizam
de forma semelhante mas cujo resultado diferente. Na tabela em baixo podemos ver alguns exemplos:
semilogx Grco xy com a escala do eixo horizontal logartmica
semilogy Grco xy com a escala do eixo vertical logartmica
loglog Grco xy com a escala dos dois eixos logartimicas
bar Grco de barras verticais
barh Grco de barras horizontais
Para gerar os vectores para os grcos com escalas logartmicas convm gerar vectores cujo es-
paamento entre pontos seja igualmente logartmico. A funo logspace facilita esta tarefa e tem a
seguinte sintaxe: os dois primeiros argumentos so a potncia de base 10 dos pontos inicial e nal
respectivamente, o terceiro argumento o nmero de pontos. Vejamos um exemplo. Se se pretender
gerar 15 pontos entre 10 e 100 com espaamento logartmico, pode-se utilizar o comando
x= logspace(1,2,15);
Note-se que 10
1
= 10 e que 10
2
= 100.
Exerccio 25 Faa o plot da funo seno para dois perodos.
Exerccio 26 Compare o grco da funo seno com o da funo coseno para ngulos entre 0 e 2 e
um passo de pi/150. O seno deve ser representado por crculos azuis e o coseno por uma linha verde
a cheio.
Exerccio 27 Desenhe o grco da funo sin() / com a variar de 2 a 2 e passos de /10.
Exerccio 28 Visualize o grco da funo e
x
para 100 valores de x [0 . . . 5].
Exerccio 29 Visualize o grco da funo e
x
para 100 valores de x [0 . . . 5].
Exerccio 30 Visualize o grco da funo log
e
x para valores de x [1 . . . 5].
Exerccio 31 Construa uma matriz X em que a primeira coluna constituda com 100 valores da
funo e
x
e a segunda coluna por 100 valores da funo log
e
x para o intervalo x [1 . . . 2]. Execute
o comando plot(X).
Exerccio 32 Determine gracamente uma soluo aproximada da equao log
e
x = e
x
. Utilize
para a anlise o intervalo [0.5 . . . 2].
Exerccio 33 Desenhe no mesmo grco a funo e
x
em que a varivel toma os seguintes valores
[1, 1.1, 1.2, 1.3, 1.4, 1.5] e a varivel x [0.1 . . . 1].
Exerccio 34 Visualize o grco da funo log
10
x utilizando uma escala logartmica para o eixo
horizontal. Utilize 100 pontos na gama

10
5
: 10
5

.
Matlab num Instante 15
Grcos de variveis complexas
Quando o argumento ds funo plot complexo, em abcissa colocada a parte real do vector e
em ordenadas a parte imaginria. Pode-se pensar neste processo como uma forma compacta de
representao. O comando que se segue
plot(z)
equivalente a fazer
plot(real(z),imag(z))
Vejamos um exemplo em que se utiliza a funo axis square, para que a gura obtida seja uma
circunferncia.
w= 0:pi/10:2*pi;
plot(exp(i*w),-o)
axis square
-1 -0.5 0 0.5 1
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Exerccio 35 Visualize em grco a parte real e a parte imaginria da funo e
j
, para valores de
[0 . . . 2] e passo de /10.
Visualizao de funes de duas variveis
Para visualizar uma funo de duas variveis da forma z = f (x, y) o Matlab possui a funo mesh.
Para utilizar esta funo necessrio gerar duas matrizes X e Y em que a primeira possui colunas
idnticas e a segunda linhas idnticas, com os valores de x e y em que se pretende calcular a funo f.
A funo meshgrid gera as matrizes X e Y a partir dos valores iniciais, nais e respectivo incremento.
O seguinte exemplo ilustra a forma de gerar um grco 3D da funo sin(r) /r, com r =
p
x
2
+ y
2
.
[X,Y] = meshgrid(-8:.5:8);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;
mesh(X,Y,Z)
Matlab num Instante 16
O ambiente Matlab
A janela de comando do Matlab possui algumas potencialidades na apresentao dos resultados,
gesto da variveis, formatao numrica dos resultados, edio da linha de comandos, etc. Nesta
seco vamos descrever algumas das suas potencialidades.
Gesto de variveis
Todas as variveis do Matlab so guardadas na rea de trabalho (workspace). Para visualizar
as variveis que esto na rea de trabalho num dado momento podemos utilizar os comados who e
whos. O primeiro apresenta no ecran uma lista abreviada das variveis indicando apenas o seu nome,
enquanto que o segundo apresenta tambm o espao ocupado em memria, dimenso, etc.
Para apagar variveis da memria pode-se utilizar o comando clear. Para apagar por exemplo as
variveis x e b faz-se
clear x b
O comando clear sem argumentos apaga todas as variveis armazenadas em memria.
O comando format
O comando format controla a forma como os valores numricos so apresentados. Este comando
controla apenas a forma com os valores so apresentados e no a forma como estes so 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 opo til do comando format
format compact
que elimina as linhas em branco extra introduzidas entre a apresentao das variveis permitindo uma
apresentao dos resultados mais compacta.
Matlab num Instante 17
Supresso de resultados
Quando as matrizes so de grande dimenso torna-se bastante incmodo para o utilizador a apresen-
tao do resultado no ecran de todos os clculos efectuados. Para evitar a apresentao dos resultados
basta colocar no nal da linha de comando um ponto e vrgula tal como o seguinte exemplo demonstra:
a= [1/5 pi];
Edio de comandos
A janela de comando do Matlab permite a edio de comandos escritos anteriormente. Se por exemplo
se entrou o seguinte comando:
a= sqrt(1:10]
|
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
parntesis recto por um curvo, basta carregar na tecla que a linha aparecer 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 sesso. Se quiser obter um comando introduzido anteriormente, basta escrever os
primeiros caracteres desse comando e carregar em para que o comando aparea. A lista seguinte
mostra as teclas de edio disponveis
Movimenta o cursor para a esquerda
Movimenta o cursor para a direita
Salta para o comando anterior
Salta para o comando seguinte
home Salta para o incio da linha
end Salta para o m da linha
esc Apaga a linha
del Apaga o carcter da direita
backspace Apaga o carcter da esquerda
Existe ainda a possibilidade de guardar num cheiro todos os comandos introduzidos durante uma
sesso com o comando diary.
Directrios e cheiros
Quando se arranca o Matlab, o directrio corrente ser o c:\matlabR12\work. No entanto, se preten-
dermos guardar num cheiro variveis, funes e programas Matlab elaborados por ns, conveniente
mudar a directoria corrente para uma directoria pessoal. Para visualizar qual o directrio corrente
pode-se utilizar o comando
pwd
ans =
C:\matlabR12\work
Para mudar de directrio 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 pesquisado em primeiro lugar
no directrio corrente. Se no for encontrado, o Matlab pesquisa nos directrios que constarem duma
lista interna (comando path).
Matlab num Instante 18
Os comandos LOAD e SAVE
Com estes comandos possvel guardar num cheiro variveis do Matlab que estejam no workspace.
O comando save permite guardar as variveis para disco e o comando load permite carreg-las para
o workspace. O exemplo seguinte ilustra a funcionalidade destes comandos.
A= rand(2)
A =
0.61543 0.92181
0.79194 0.73821
b= rand(1,3)
b=
0.9501 0.2311 0.6068
save ficheiro A b
load ficheiro
Os comandos load e save permitem igualmente guardar cheiros em formato ASCII.
save ficheiro A b -ascii
sendo mais fcil para o utilizador vericar o contedo com um simples editor de texto.
Exerccio 36 Execute a sequncia anterior de comandos e guarde as variveis A e b em formato
ASCII para um cheiro com o nome teste.txt. Edite o contedo desse cheiro com o Notepad.
Repita a operao para o cheiro gerado com save ficheiro A b.
Exerccio 37 Aps ter criado as variveis A e b tal como indicado no texto, execute o comando
whos e compare a memria ocupada por cada uma delas. Visualize a varivel b nos seguintes formatos
numricos: long, short e e long e. Finalmente, apague as variveis e verique com o comando
whos.
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, possvel colocar num cheiro de texto com
a extenso .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
extenso. Para criar e comear a editar um cheiro basta escrever o comando edit, para que arranque
um pequeno editor de texto com debugging integrado.
Tpicos sobre matrizes
Nesta seco iremos descobrir mais algumas das possibilidades que o Matlab oferece para operar com
matrizes.
lgebra linear
possvel resolver com o Matlab diversos problemas da lgebra linear, sendo fcil realizar clculos
elaborados com matrizes, como por exemplo, o produto de duas matrizes, inverso de matrizes, clculo
dos valores prprios, etc. Dadas as matrizes A e B, por exemplo, a sua soma 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
Matlab num Instante 19
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 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 prprios da matriz A, pode-se utilizar o comando
eig(A)
e a inversa da matriz A obtm-se fazendo
inv(A)
igualmente possvel calcular a n potncia de uma matriz quadrada fazendo simplesmente
A^n
e se se pretender calcular o polinmio caracterstico de uma matriz temos
p= poly(A)
p=
1 2.1 1.1 -5 2
o que indica que o polinmio caracterstico
det (AI)

4
+ 2.1
3
+ 1.1
2
5
1
+ 2.
O Matlab permite resolver sistemas de equaes numericamente de forma muito eciente. Considere-se
o seguinte sistema de equaes:
Ax = b
em que
A =
_
_
1 2 1
4 1 2
6 3 1
_
_
b =
_
_
1
0
2
_
_
.
Para resolver o sistema de equaes podemos utilizar a equao
x = A
1
b
e o correspondente comando Matlab
x= inv(A)*b
x=
0.0588
0.7059
-0.4706
Matlab num Instante 20
Uma forma alternativa de resolver o sistema de equaes e que possui uma maior estabilidade
numrica consiste em utilizar a diviso esquerda do Matlab
x= A\b;
O Matlab utiliza o algoritmo de eliminao Gaussiana para resolver o sistema de equaes.
Exerccio 38 Construa um vector linha x constitudo pelos nmeros inteiros pares pertencentes ao
intervalo [1 . . . 8]. Calcule os valores prprios da matriz resultante do produto x
T
x.
Exerccio 39 Resolva o seguinte sistema de equaes com o Matlab
_
_
_
x + 2y z = 10
2x 7y = 1
x + 3y 4z = 0
Verique com o Matlab a soluo obtida.
Exerccio 40 Considere o seguinte sistema de equaes
_
_
_
x + 2y z = 0
2x + 4y 2z = 2
x + 2z = 1
Verique que este sistema no tem soluo.
Exerccio 41 Verique que fazendo o produto matricial entre um vector coluna v e um vector linha
preenchido com um nmero n de uns, se obtm uma matriz com n colunas iguais a v.
Exerccio 42 Calcule os valores prprios da matriz gerada com o seguinte comando Matlab A=rand(4)+1,
e verique que pelo menos um deles superior unidade. Calcule A
20
e verique que os elementos da
matriz resultante aumentaram de valor. Calcule agora

A
20

20
e verique que os elementos da matriz
resultante diminuiram de amplitude e que os valores prprios so todos inferiores unidade.
Operaes elemento-a-elemento
Em muitas situaes pretende-se efectuar operaes aritmticas com matrizes aplicando a operao
entre os elementos das matrizes. Para transformar um operador matricial na forma elemento-a-
elemento, basta acrescentar o carcter . antes do operador. Note-se que no caso da adio + e
da subtrao - no existe qualquer diferena para os operadores .+ e .- respectivamente.
O exemplo seguinte ilustra o produto elemento-a-elemento de duas matrizes com a mesma dimen-
so:
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
+ Adio
- Subtrao
.* Multiplicao elemento-a-elemento
./ Diviso elemento-a-elemento
.^ Potenciao elemento-a-elemento
. Transposta no conjugada
Matlab num Instante 21
Este tipo de operador muito til para, por exemplo, gerar matrizes com valores de funes:
n= (1:10);
M= [n n.^2 n.*log2(n)];
plot(M,-o)
1 2 3 4 5 6 7 8 9 10
0
10
20
30
40
50
60
70
80
90
100
Exerccio 43 Crie uma matriz com trs colunas e coloque em cada uma delas as seguintes funes:
sin(x), cos(x) e sin(x)*cos(x). O argumento x dever ser um vector a comear em 0 e a acabar em
2 , com um passo de /100.
Exerccio 44 Desenhe o grco da funo sin

x
2

utilizando o mesmo argumento que no exerccio


anterior.
Exerccio 45 A funo abs d como resultado o mdulo de um nmero complexo e a funo angle
o seu argumento. Construa um grco do mdulo e argumento da seguinte funo
y () = e
j
em que varia de 0 a 8 com passos de /40. Desenhe igualmente um grco da parte real versus a
parte imaginria.
Funes estatsticas
O Matlab possui uma grande variedade de funes estatsticas para analisar um sinal. Quando estas
funes recebem uma matriz como entrada, a operao aplicada sobre cada coluna da matriz. Para
calcular a mdia de cada uma das colunas de uma matriz podemos fazer:
M= randn(100,3);
mean(M)
para calcular o desvio padro 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 funo
com o nmero pretendido.
Exerccio 46 Gere um vector com um milho de amostras obtidas com a funo rand. Calcule a sua
mdia, desvio padro e visualize o seu histograma com 100 classes.
Exerccio 47 Gere agora um vector com um milho de amostras com a funo randn. Calcule a sua
mdia, desvio padro e visualize o seu histograma com 100 classes. Quais as diferenas em relao ao
exemplo anterior?
Exerccio 48 Gere uma sequncia com 100 elementos iguais unidade e calcule a sua mdia e desvio
padro.
Matlab num Instante 22
Expanso escalar
A expanso escalar consiste na repetio automtica de um escalar de modo a que seja possvel realizar
a operao pretendida com cada elemento de uma matriz. Se pretendermos somar o nmero 5 a uma
matriz A de dimenso 4 4 basta fazer
A+5
em vez de
A+5*ones(4)
Esta notao simplica as expresses tornando-as de leitura mais fcil. Tambm possvel realizar
atribuies 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
ndices lgicos
O Matlab permite a indexao de elementos de uma matriz atravs de ndices lgicos que podem ser
obtidos a partir de equaes lgicas. 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; ento, fazendo
v>0.3
ans =
0 1 0 0 0 1 0 0 0 0 0 1
obtm-se um vector de zeros e uns com o valor 1 nas amostras onde a condio era verdadeira. Para
obter os elementos do vector que satisfazem a condio 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 condio v > 0.3 pode-se
fazer
n= 1:length(v);
n(v>0.3)
ans=
2 6 12
ou, em alternativa, utilizar a funo find
find(v>0.3)
ans=
2 6 12
Na tabela seguinte so apresentados os operadores lgicos mais comuns da linguagem Matlab
== igual
~= diferente
< menor
> maior
<= menor ou igual
>= maior ou igual
& e lgico
| ou lgico
~ negao
Matlab num Instante 23
Exerccio 49 Gere a sequncia {1, 2, 3, . . . , 9, 10} e extraia os nmeros maiores que 4.
Exerccio 50 Gere uma sequncia aleatria com distribuio normal e elimine os elementos nega-
tivos.
Exerccio 51 Gere uma sequncia aleatria com distribuio normal e calcule o nmero de elementos
negativos.
Exerccio 52 Gere um sinal aleatrio com distribuio uniforme e com 1000 amostras. Obtenha o
nmero de amostras com uma amplitude superior a 0.9. Calcule em seguida o nmero de amostras
cujo mdulo possui uma amplitude entre 0.5 e 0.7.
Programao em Matlab
O Matlab possui um conjunto de instrues que permitem a construo de programas. Nesta intro-
duo apenas faremos referncia s instrues if e for.
A instruo IF
Esta instruo permite a execuo condicional de cdigo tendo em conta uma dada condio lgica.
A estrutura a seguinte
if cond,
instruo 1
instruo 2
...
else
instruo 3
instruo 4
...
end
Se a condio cond for verdadeira so executadas as instrues 1 e 2, seno sero executadas as
instrues 3 e 4. A directiva end no nal indica o m da instruo if.
Na forma mais simples a directiva else pode ser omitida.
A instruo FOR
Esta instruo permite a repetio de um conjunto de instrues. A sintaxe de utilizao a seguinte:
for varivel= incio:passo:fim,
Instruo 1
Instruo 2
...
end
A seguir podemos ver alguns exemplos de utilizao
r= 10;
for n= 1:10,
r= r+10
end
No difcil vericar que a expresso direita do sinal de igual na instruo for apenas cria um
vector e que se pode utilizar a instruo for da seguinte forma
r=10;
v= 1:10;
for n= v,
r= r+10
Matlab num Instante 24
end
A instruo for s deve ser utilizada quando no se encontra outra forma de implementar o algo-
ritmo pois como veremos na seco sobre Vectorizao de algoritmos (pag.27), torna a execuo do
programa muito lenta uma vez que o Matlab utiliza uma linguagem interpretada.
Exerccio 53 Gere um vector x com 1000 elementos utilizando a funo rand. Extraia para um outro
vector todos os elementos de x menores que 0.3. Utilize as instrues for e if.
Exerccio 54 Neste exerccio pretende-se visualizar a funo e
x
quando se varia o parmentro
segundo a expresso = 1 + 0.1 n, com n [1, 2, . . . , 10]. Armazene cada uma das variantes da
funo numa coluna de uma matriz A (100 10) considerando 100 pontos para a varivel x [0 . . . 2].
Para visulizar as curvas simultneamente faa apenas plot(A) e experimente mesh(A).
Exerccio 55 A expanso em srie de Taylor da funo seno dada pela expresso
sin(x) = x
x
3
3!
+
x
5
5!
. . . +
x
n
n!
sin

.
Calcule a aproximao para 5 termos da srie em 100 pontos do intervalo [0 . . . 2] e faa um grco
comparando a aproximao com a funo seno.
Exerccio 56 Usando a instruo for, construa uma matriz de 10 10 em que cada coluna um
vector v cujos elementos so os nmeros inteiros de 1 a 10
1
.
Som e Imagem no Matlab
O Matlab permite a manipulao directa de cheiros de som e imagem, sendo possvel experimentar
algoritmos de processamento sobre sinais reais e vericar os resultados de imediato.
Sinais de udio
O Matlab possui uma srie de funes 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 instruo
sound permite fazer esta reproduo utilizando uma dada frequncia de amostragem. A frequncia
de amostragem indica o nmero de amostras que so convertidas de digital para analgico em cada
segundo. Se quisermos reproduzir um vector preenchido com um sinal aleatrio a uma taxa de 8000Hz
e com uma durao de 2 segundos utilizamos a seguinte sequncia de comandos:
r= 2*(rand(1,16000)-0.5);
sound(r,8000);
A amplitude dos elementos do vector de entrada da funo sound deve estar compreendida entre -1
e 1, sendo as amplitudes superiores convertidas para -1 ou 1. Se quisermos reproduzir uma sinuside
de 1000Hz com a durao de 0.5 segundos, utilizando uma frequncia de amostragem de 8000Hz
procede-se da seguinte forma
fs= 8000; % Frequncia de amostragem
Ts= 1/fs; % Perodo 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 instruo for, pode ser realizado de forma mais eciente com o comando: v*ones(1,length(v)),
em que v um vector coluna.
2
No ambiente windows os cheiros de som com este formato tm a extenso wav.
Matlab num Instante 25
[y,fs]= wavread(ficheiro.wav);
e se se pretender gravar num cheiro com a extenso wav um vector pode-se utilizar o comando
wavwrite(y,fs,ficheiro.wav);
Apesar de no Matlab se poder escolher qualquer frequncia de amostragem a maior parte das placas
de som no permitem a reproduo de sinais amostrados a no ser nas seguintes frequncias em Hz:
48000 24000 12000
44100 22050 11025
32000 16000 8000
.
Exerccio 57 Gere um vector com 32000 elementos utilizando a funo randn. Oua o sinal criado
utilizando uma frequncia de amostragem de 32000Hz.
Exerccio 58 Gere a sinuside de 1000Hz do exemplo dado e oua-a com a frequncia de amostragem
de 8000Hz. Reproduza agora a sinuside com as seguintes frequncias de amostragem: 4000, 16000,
44100.
Exerccio 59 Gere um sinal constitudo por 5000 elementos 1 e -1 dispostos alternadamente. Repro-
duza esse sinal com a funo sound utilizando uma frequncia de amostragem de 8000Hz.
Imagens
O Matlab possui um conjunto de funes para manipulao e visualizao de imagens a cores. As
imagens so representadas sob a forma de matrizes. No caso de imagens s 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 sintticas com o Matlab e visualiz-las com os comandos ante-
riores. 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
imagesc(M);
Construo de cdigo eciente com o Matlab
O Matlab permite o desenvolvimento rpido de algoritmos de processamento, mas quando os dados a
tratar possuem uma dimenso elevada necessrio ter alguns cuidados para que a execuo do cdigo
no se torne demasiado lenta. Existem duas formas principais de optimizar a execuo do cdigo: a
reserva de memria para as variveis e a vectorizao de algoritmos.
Matlab num Instante 26
Reserva de espao para variveis
A reserva de espao em memria para as variveis faz-se simplesmente preeenchendo a varivel a ser
utilizada com zeros, de forma a que a sua dimenso no volte a ser alterada. No cdigo que se segue
o vector x v a sua dimenso ser alterada, o que leva a um novo pedido de reserva de memria para
armazenar o vector
x= 1:5;
x= [x x];
o que no acontece nesta verso que apesar de mais eciente menos legvel
x= zeros(1,10);
x(1:5)= 1:5;
x(6:10)= x(1:5);
Mas vejamos que diferena pode ocorrer nos tempos de processamento com um pequeno programa,
em que se testam duas verses de um algoritmo muito simples, em que na primeira no se reserva
memria para a varivel.
N= 1000;
x= rand(1,N);
% Verso sem reserva de memria
t= cputime;
y= 0;
for n= 1:N,
y= [y x(n)]; % Instruo crtica
end
tsem= cputime-t
clear y
%
% Verso com reserva de memria
t= cputime;
y= zeros(1,N+1);
for n= 1:N,
y(n+1)= x(n);
end
tcom= cputime-t
% Velocidade relativa
% Num Pentium II a 266MHz a verso com reserva de memria
% foi cerca de 8 vezes mais rpida
rel= tsem/tcom
Eis mais alguns conselhos teis sobre a gesto de memria no Matlab
Evitar criar variveis intermdias dos dados quando no so necessrias utilizando antes variveis
da mesma dimenso j existentes.
Caso tal no seja possvel utilizar a funo clear var1 var2 ...l
Deve-se ter em conta que o Matlab utiliza 8 bytes para armazenar cada elemento de uma
matriz. Como no caso das variveis complexas esse nmero duplica, deve-se evitar ter este tipo
de variveis sempre que a parte real ou a imaginria sejam nulas. Nestes casos deve utilizar-se
as funes real e imag.
No caso de ser necessrio processar dados com muitas amostras deve-se realizar o processamento
por blocos com as seguintes etapas:
1. Ler bloco do cheiro de entrada
2. Processar bloco
Matlab num Instante 27
3. Escrever o bloco com o resultado no cheiro de sada
Esta tcnica apesar de permitir um aumento da rapidez de execuo, resulta normalmente num
algoritmo mais complexo.
Vectorizao de algoritmos
Todos os operadores e funes 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 funo
sin no apenas um nmero mas um vector, aplicando a funo a cada um dos seus elementos. No
entanto, existe uma outra forma de realizar os clculos que consiste em recorrer ao ciclo for aplicando
a funo 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 cdigo lida e descodicada. Este processo repetido para cada linha e pode em certos
casos, ser da ordem de grandeza do prprio processamento ou mesmo superior. Um caso ilustrativo
o do clculo do produto interno entre dois vectores linha a e b, denido pela expresso
a b =
N
X
n=1
a (n) b (n) ,
e que em linguagem do Matlab se escreve simplesmente a*b.
O programa que se segue pretende demonstrar a diferena de velocidade de processamento entre
a verso que calcula o produto interno fazendo uso de um ciclo for, e outra que o calcula na forma
vectorizada.
% Comparao do tempo de CPU no clculo de um produto interno.
N= 10000;
a= rand(1,N);
b= rand(1,N);
nciclos= 100;
% Clculo utilizando um ciclo for
t= cputime;
for c= 1:nciclos,
y= 0;
for n= 1:N,
y= y+a(n)*b(n);
end
end
tfor= cputime-t
% Clculo de forma vectorizada
t= cputime;
for c= 1:nciclos,
y= a*b;
end
tmat= cputime-t
% Velociade de clculo relativa
% Num Pentium II a 266MHz foi cerca de 180 vezes mais rpido
Matlab num Instante 28
rel= tfor/tmat
Pelo exemplo anterior pode-se concluir que a vectorizao dos algoritmos a nica forma de
utilizar o Matlab de forma eciente.
Exerccio 60 Obtenha uma matriz com 50 colunas em que cada coluna contm um perodo da funo
seno amostrada em 50 pontos.
Exerccio 61 Gere uma sequncia com 10000 valores aleatrios com distribuio uniforme e guarde
num vector apenas os que possuem amplitude superior a 0.9. Coloque noutro vector os ndices das
amostras anteriores.
Exerccio 62 Obtenha o grco da funo sin(x)/x variando o argumento entre -100 e 100 com
passos de 0.1.

Вам также может понравиться