Você está na página 1de 87

genharia

s para Eng

Introduo ao Matlab
ormticas

V 1.1
aes Info
Aplica

Srgio Manuel ngelo da Cruz

2008
Introduo

genharia

Ferramentas Informticas de Apoio


s para Eng

Engenharia:
Matlab (Matrix Laboratory) e Simulink
ormticas

Labview
Mathematica e Maple
aes Info

Mathcad
Maxwell 2D / 3D, Ansys, Flux 2D
Aplica

....e muitas outras.

2
Srgio Cruz
Introduo

genharia

Porqu o estudo do Matlab/Simulink e Labview?


s para Eng

Uso intensivo destas ferramentas quer nas universidades quer na


indstria
ormticas

O Matlab, com as suas caixas de ferramentas especficas (toolboxes),


uma ferramenta usada em todas as reas da Engenharia
aes Info

Electrotcnica:
Controlo, Processamento de Sinal, Processamento de Voz e
Imagem, Energia (Linhas de Transmisso, Mquinas Elctricas,
Aplica

Electrnica de Potncia, etc.), Redes Neuronais, Optimizao de


Sistemas, etc.

3
Srgio Cruz
Matlab - Introduo

genharia

Ferramenta de clculo cientfico, vocacionada para o clculo


s para Eng

numrico
i

P
Permite
it o desenvolvimento
d l i t d
de programas ao nvel
ld da(o):
( )
ormticas

Anlise numrica
aes Info

Anlise de dados
Clculo matricial
Processamento de sinais
Aplica

Construo de grficos
etc.

4
Srgio Cruz
Matlab - Introduo

genharia

Nesta Unidade Curricular (UC) iremos apenas utilizar uma


s para Eng

pequena percentagem
t das
d funcionalidades
f i lid d ddo M
Matlab
tl b

IIremos abordar
b d os conceitos
it b
bsicos
i numa primeira
i i ffase e
ormticas

aprofundar os conhecimentos ao longo do semestre


aes Info
Aplica

5
Srgio Cruz
Matlab Ambiente de Trabalho
genharia

Quando o Matlab iniciado, so visveis trs janelas


s para Eng

distintas:
A jjanela de comando ((onde aparece
p o smbolo >>))
ormticas

Uma outra janela, com os submenus da directoria actual e do


ambiente de trabalho. Aqui exibida uma listagem dos ficheiros da
di t i corrente
directoria t b
bem como o ambiente
bi t d de ttrabalho
b lh ((workspace),
k )
aes Info

onde consta uma listagem das variveis que vo sendo


geradas/introduzidas pelo matlab/utilizador
Aplica

A janela do histrico (parte inferior do lado esquerdo do monitor, onde


aparece o histrico dos comandos introduzidos na janela de comando

6
Srgio Cruz
Matlab Operadores
p Aritmticos
genharia

Operador
p Funcionalidade
s para Eng

^ Potenciao

/ Diviso direita
ormticas

\ Diviso esquerda
aes Info

* Multiplicao

+ Adio
Aplica

- Subtraco

Nota: o Matlab respeita as prioridades habituais destes operadores.

7
Srgio Cruz
Matlab Operadores
p Relacionais
genharia
s para Eng

Operador Funcionalidade
< Menor
ormticas

<= Menor ou igual

> Maior
aes Info

>= Maior ou igual

== Igual
Aplica

~= Diferente

8
Srgio Cruz
Matlab Operadores
p Lgicos
g
genharia

Operador Funcionalidade
s para Eng

~ NOT (negao)

& AND (conjuno)


ormticas

| OR (ou inclusivo)

xor ou exclusivo
aes Info

Nota: Os operadores lgicos tm uma prioridade inferior dos operadores aritmticos


e relacionais
relacionais.
Aplica

Exemplo:
>> 1==2 & 4>=3
ans =
0

9
Srgio Cruz
Tipos
p de dados no Matlab
genharia

char (usar e no nas definies!!)


s para Eng

numeric
single (4 bytes)
d bl (8 b
double bytes,
t titipo d
de d
dado
d por d
defeito)
f it )
ormticas

uint8 (inteiro de 1 byte, sem sinal)


int64 (inteiro de 8 bytes, com sinal)
aes Info

... e muitos outros ....


struct
Aplica

cell
Informao
adicional: usar o comando help
p datatypes
yp

10
Srgio Cruz
Declaraes,
, constantes e variveis
genharia

Definio de variveis e atribuio de valores s mesmas:


a=2 define uma varivel a e atribui-lhe o valor 2
s para Eng

b=isto uma aula; define a varivel b do tipo char


c=3, d=23e-3 define e atribui valores a c e d
d=int16(23)
( ) define d como sendo do tipop int16 e inicializa-o com o valor 23
ormticas

A colocao de ; no fim da linha de comando instrui o matlab a no dar


nenhuma resposta:
aes Info

Ver a diferena entre introduzir a=2 e a=2;

A qualquer altura pode ver as variveis que j foram criadas, com os


comandos
d who h e whosh
Aplica

ATENO: o matlab faz distino entre maisculas e minsculas, por


isso y e Y so duas variveis distintas!!

11
Srgio Cruz
Vectores e Matrizes
genharia

Definio de um vector linha X:


x=[1 20 45 1e-2 sin(pi)] define um vector linha com 5 elementos
s para Eng

Em alternativa pode-se definir como x=[1,20,45,1e-2,sin(pi)]


Outras formas de definir vectores:
>>x=1:3
ormticas

x=
1 2 3
ou
aes Info

>>x=2:3:11
x=
Aplica

2 5 8 11

Vector=valor mnimo:passo:valor mximo

12
Srgio Cruz
Vectores e Matrizes
genharia

A funo linspace permite criar vectores com um dado


nmero de elementos igualmente espaados entre si:
s para Eng

Vector=linspace(valor mnimo, valor mximo, nmero de elementos)


ormticas

>>x=linspace(2,8,4)
x=
aes Info

2 4 6 8

>> x=linspace(2,7,4)
x=linspace(2 7 4)
Aplica

x=
2.0000 3.6667 5.3333 7.0000

13
Srgio Cruz
Vectores e Matrizes
genharia

Definio de uma matriz A, de dimenses 33:


>> A=[1
[ 3 6;4
; 2 6;6
; 8 9]]
s para Eng

A=
1 3 6
4 2 6
ormticas

6 8 9
Em alternativa, pode-se definir a matriz A linha a linha, premindo <enter>
aps a introduo de cada linha
aes Info

>> A=[1 3 6
426
6 8 9]
Aplica

A=
1 3 6
4 2 6
6 8 9

14
Srgio Cruz
Vectores e Matrizes
genharia

Para transpor um vector ou matriz, usa-se o operador :


>> y=[1 34 56]
56]
s para Eng

y=
1
34
ormticas

56
aes Info

Pode-se aceder aos elementos das matrizes atravs do


nmero da linha e coluna onde tais elementos esto
localizados:
Aplica

A(x,y) devolve o elemento da matriz A situado na linha x e coluna y.


Por exemplo A(1,2)=3
Pode-se tambm extrair mais do qque um elemento simultaneamente.
Por exemplo A(2,:) devolve toda a segunda linha da matriz A

15
Srgio Cruz
Vectores e Matrizes
genharia

Pode-se ainda obter submatrizes usando comandos, para alm dos


ndices. Por exemplo:
s para Eng

>> A(3,2:end)
ans =
8 9
ormticas

Neste caso, o comando end indica que se devem extrair os elementos da


matriz, desde a segunda at ltima coluna
Outros exemplos:
aes Info

>> B(7, 1:5); % L as colunas 1-5 (de 1 a 5) na linha 7


>> B(4:2:8, 1:5); % L as colunas 1-5 nas linhas 4, 6 e 8
>> B(:
B(:, 1:5); % L as colunas 1-5 em todas as linhas
Aplica

Notas importantes: o matlab armazena a ltima resposta na varivel


ans (de answer); uma sequncia de nmeros pode ser gerada usando a
sintaxe incio:passo:fim

16
Srgio Cruz
Vectores e Matrizes
genharia

Para se conhecerem as dimenses de uma matriz ou vector,


usa se o comando size:
usa-se
s para Eng

>> size(x)
ans =
ormticas

1 4
Para aceder individualmente ao nmero de linhas e colunas,
poder se escrever
poder-se-
aes Info

>> [linhas,colunas]=size(A);
Neste exemplo,
p , linhas e colunas so variveis q
que sero inicializadas
Aplica

com o nmero de linhas e colunas da matriz A

No caso de vectores
vectores, pode
pode-se
se ainda usar o comando length
para obter o comprimento dos mesmos

17
Srgio Cruz
Vectores e Matrizes
genharia

Pode-se transformar uma matriz num vector coluna usando


s para Eng

da
: d seguinte
i t fforma:

>> B=[1 34 45;4 5 6;100 200 300] >> x=B(:)


ormticas

B= x=
1
1 34 45
4
aes Info

4 5 6 100
100 200 300 34
5
Aplica

200
45
6
300

18
Srgio Cruz
Vectores e Matrizes
genharia

Nas operaes entre matrizes, utilizam-se os mesmos operadores


aritmticos q
que entre escalares
s para Eng

No entanto, pode-se preceder o operador aritmtico de um .. Esse facto


indica ao matlab que a operao deve ser efectuada elemento a
elemento. Um exemplo:
ormticas

>> A=[1 2;3 4]; B=[3 5;1 0.5];


>> C=A*B
C= %PProduto
d t hhabitual
bit l d de d
duas matrizes
ti
aes Info

5 6
13 17
>> C=A.*B
C=A *B % Neste caso C(i C(i,j)=A(i,j)*B(i,j)
j)=A(i j)*B(i j)
Aplica

C=
3 10
3 2

19
Srgio Cruz
Vectores e Matrizes
genharia

Criao de matrizes especiais:


s para Eng

Comando Funcionalidade
eye(m,n)
y ( , ) Cria uma matriz identidade de dimenses mn
ormticas

Cria uma matriz composta por elementos


ones(m,n) unitrios
Cria uma matriz composta
p p
por elementos
zeros(m n)
zeros(m,n)
aes Info

nulos
Cria uma matriz composta por elementos
rand(m,n) e randn(m,n) aleatrios (entre 0 e 1 no caso de rand)
Aplica

Cria uma matriz diagonal (se X vector) ou


diag(X) extrai elementos da diagonal (se X matriz)

No caso de ser fornecido apenas um argumento s funes


anteriores, so criadas matrizes quadradas

20
Srgio Cruz
Funes
Sobre Escalares
genharia

Funes usadas frequentemente


s para Eng

sin sqrt

asin abs
ormticas

cos ceil

acos round
aes Info

exp floor

log e log10 rem


Aplica

tan sign

atan rats

Nota: no caso de funes trigonomtricas, o argumento ter de ser fornecido em


radianos

21
Srgio Cruz
Funes
Sobre Vectores e Matrizes
genharia
s para Eng

Funes mais usuais


median sort
ormticas

max min

prod sum
aes Info

all any

mean std
Aplica

22
Srgio Cruz
Funes
Sobre Matrizes
genharia

Funes mais usuais


s para Eng

eig chol
svd inv
ormticas

lu qr
hess schur
aes Info

expm sqrtm
size norm
Aplica

cond rank
triu tril
poly det

23
Srgio Cruz
Formatao
da Sada
genharia

O comando format permite alterar a forma como o matlab


s para Eng

apresenta
t os nmeros
no monitor
it

Comando Formato da sada


ormticas

format short 0.6667


format short e 6 6667e-001
6.6667e-001
aes Info

format long 0.666666666666667


format long e 6.666666666666666e-001
6.666666666666666e 001
Aplica

format hex 3fe5555555555555


format rat 2/3
format bank 0.67

24
Srgio Cruz
Utilidades Diversas
genharia

A funo clear permite eliminar parte ou todas as variveis criadas


anteriormente:
s para Eng

>> clear x % elimina o vector x


>> clear A B % elimina as matrizes A e B
>> clear % elimina todas as variveis no permanentes
ormticas

>> clear all % idntico a clear mas elimina tambm funes, atalhos MEX, etc.,
etc.

Existem
E i t variveis
i i que o matlab
tl b j ttraz d
definidas
fi id por d
defeito
f it e que no

aes Info

podem ser apagadas (variveis permanentes):


pi % nmero pi
inf % infinito
Aplica

NaN % no numrico, por exemplo 0/0


iej % nmero complexo i=j=sqrt(-1)
realmin % menor nmero real positivo que o matlab consegue representar
realmax % maior nmero real positivo que o matlab consegue representar

25
Srgio Cruz
Utilidades Diversas
genharia

Quando se sai do matlab, perdem-se todas as variveis. O comando


save p
permite g
gravar todas as variveis no ficheiro matlab.mat ((defeito))
s para Eng

O comando load permite restaurar as variveis a partir desse ficheiro


Pode-se gravar apenas algumas variveis. Um exemplo:
>>save backup
p_aula A B x %ggrava as matrizes A,, B e o vector x
ormticas

>>clear % elimina todas as variveis


>>load backup_aula % restaura as variveis gravadas
aes Info

O matlab pode gravar todos os comandos introduzidos na janela de


comando. Para esse efeito usa-se o comando diary:
>>diary arquivo % grava todos os comandos (excepto grficos)
Aplica

Para suspender este comando faz-se diary off e para voltar a habilit-lo
faz-se diary on

O comando clc permite limpar a janela de comando

26
Srgio Cruz
Utilidades Diversas
genharia

Habitualmente os comandos que compem um dado programa


desenvolvido em matlab no so introduzidos usando a janela de
s para Eng

comando mas sim escritos e gravados num ficheiro .m


Para criar um ficheiro .m invoque o editor de texto com o comando edit
ou edit ficheiro
ficheiro. Neste ltimo caso o ficheiro imediatamente gravado
ormticas

Com o editor pode correr o ficheiro .m todo de uma vez ou colocar


breakpoints (absolutos ou condicionais), executar o ficheiro instruo a
instruo etc
instruo, etc.
aes Info

Uma vez gravado o ficheiro .m, pode execut-lo tambm a partir da


janela de comando do matlab escrevendo o respectivo nome (desde que
o caminho para o mesmo seja a directoria corrente ou esteja na lista de
Aplica

caminhos especificados no path


Pode tambm executar programas do sistema operativo ou outros
usando ! antes do nome do programa
programa. Por exemplo:
>> !Notepad % Invoca o editor de texto notepad

27
Srgio Cruz
Nmeros Complexos
p
genharia

O matlab tambm trabalha com nmeros complexos


Neste caso, 2
2+3i
3i ou 5
5-2j
2j representam exemplos de nmeros complexos
s para Eng

que o matlab interpreta


Pode-se extrair a parte real, a parte imaginria, o mdulo e o argumento
de um nmero complexo,
p bem como obter o seu conjugado,
j g com os
comandos real, imag, abs, angle e conj
ormticas

>> a=2+3i;
>> abs(a)
aes Info

ans =
3.6056
>> angle(a)
ans =
Aplica

0.9828

Pode-se
Pode se tambm definir matrizes cujos elementos so nmeros
complexos

28
Srgio Cruz
Nmeros Complexos
p
genharia

Nesse caso, h que atender que a transposta da matriz ser conseguida


custa de . e no de , q
que neste caso p
permite obter a matriz hermetiana
s para Eng

daquela dada (a matriz hermetiana consiste em transpor a matriz aps


obter o complexo conjugado dos seus elementos):

>> C = [1+i 1-i; 2-3i 4i; 3 -1+2i];


ormticas

>> C
ans =
1 0000 - 1.0000i
1.0000 1 0000i 2 2.0000
0000 + 3 3.0000i
0000i 3
3.0000
0000
aes Info

1.0000 + 1.0000i 0 - 4.0000i -1.0000 - 2.0000i

>> C.
C'
Aplica

ans =
1.0000 + 1.0000i 2.0000 - 3.0000i 3.0000
1 0000 - 1.0000i
1.0000 1 0000i 0+44.0000i
0000i -1.0000
1 0000 + 2
2.0000i
0000i

29
Srgio Cruz
Grficos 2D em Matlab
genharia

Existem diversos comandos que podem ser usados para


s para Eng

construir
t i grficos
fi (2D e 3D) no matlab
tl b

Comando Funcionalidade
ormticas

plot Cria um grfico com eixos lineares


O mesmo que plot mas com eixos em escala
loglog
g g logartmica
aes Info

semilogx Grfico com escala semi-logartmica (eixo x)

semilogy
gy Grfico com escala semi-logartmica (eixo y)
Aplica

polar Grfico em coordenadas polares


O mesmo que plot mas com a possibilidade de se
plotyy
p yy definirem dois eixos y com diferentes escalas

fplot Representa grficamente uma funo

30
Srgio Cruz
Grficos 2D em Matlab
genharia

Comando Funcionalidade
s para Eng

fill Permite desenhar polgonos 2D

bar Grfico de barras


ormticas

stem Grfico de sequncias discretas

stairs Grfico em escada


aes Info

hist Histograma

rose Histograma em ngulo


Aplica

compass Grfico em forma de bssola

feather Grfico em forma de p


pena

comet Grfico em forma de trajectria de cometa

31
Srgio Cruz
Grficos 2D em Matlab - Exemplos
p
genharia

>> t = 1:0.1:2*pi;
s para Eng

>> y = sin(t);
i (t)
>> plot(y);
ormticas

Neste formato, plot(y)


representa os valores
do vector y em funo
aes Info

do seu ndice (1, 2,


3,...)
Aplica

32
Srgio Cruz
Grficos 2D em Matlab - Exemplos
p
genharia

>> t = 1:0.1:2*pi;
s para Eng

>> y = sin(t);
i (t)
>> plot(t,y);
ormticas

Neste formato, o
comando plot permite
obter um grfico xy
aes Info
Aplica

33
Srgio Cruz
Grficos 2D em Matlab - Exemplos
p
genharia

>> t = 1:0.1:2*pi;
s para Eng

>> y1=sin(t);
1 i (t)
>> y2=sin(t-2*pi/3);
>> y3=sin(t+2*pi/3);
y3 sin(t 2 pi/3);
ormticas

>> plot(t,y1,t,y2,t,y3);
aes Info

Deste modo, o comando


plot permite representar
mais do que uma funo
Aplica

no mesmo grfico

34
Srgio Cruz
Grficos 2D em Matlab - Exemplos
p
genharia

Outra forma de obter o grfico do slide anterior seria colocar os vectores


y1, y2 e y3 numa matriz:
s para Eng

>>A=[y1;y2;y3];
>>plot(t,A);
Mais informao: help plot
ormticas

Para criar uma nova janela onde o grfico vai ser criado, usa-se o
comando figure
aes Info

O matlab oferece a possibilidade de se representar mais do que um


grfico na mesma janela (figure), criando uma grelha virtual de sistema
de eixos. Para tal, usa-se o comando subplot
subplot(m,n,p) cria uma matriz com mn sistemas de eixos, e
Aplica

selecciona o sistema de eixos nmero p para a representao do


prximo grfico. A contagem feita da esquerda para a direita, e de cima
para baixo.
b i U
Um exemplo: l

35
Srgio Cruz
Grficos 2D em Matlab - Exemplos
p
genharia

>> subplot(2,3,1)
s para Eng

>> plot(t,y1)
>> subplot(2,3,2)
>> plot(t,y2)
l t(t 2)
ormticas

>> subplot(2,3,3)
>> plot(t,y3)
plot(t y3)
aes Info

>> subplot(2,3,4)
>> plot(t,t.^2)
Aplica

>> subplot(2,3,5)
>> plot(t,t)

36
Srgio Cruz
Grficos 2D em Matlab
genharia

Ao fazer plot(x), onde x


s para Eng

representa
t um nmero

complexo, o matlab
representa a parte
ormticas

imaginria do nmero em
funo da parte real. Um
aes Info

exemplo:
>> Z=[1+2i 2+3i 10+30i];
>> plot(Z)
l t(Z)
Aplica

37
Srgio Cruz
Grficos 2D em Matlab
genharia

Para alm dos comandos destinados traagem do grfico, existem


outros destinados a embelez-lo e a complet-lo. Alguns dos mais usuais
s para Eng

so apresentados de seguida

Comando Funcionalidade
ormticas

title Coloca um ttulo no grfico

xlabel Coloca uma etiqueta no eixo x


aes Info

ylabel Coloca uma etiqueta no eixo y

grid Adiciona uma grelha ao grfico

text
Aplica

Adiciona texto na posio especificada

gtext Adiciona texto de modo interactivo (rato)

legend Adiciona uma legenda ao grfico

axis Permite ajustar os limites dos eixos

38
Srgio Cruz
Grficos 2D em Matlab - Exemplos
p
genharia

Para representar funes de


s para Eng

uma varivel,
i l pode-se
d usar a
funo fplot. Um exemplo:
ormticas

>> figure % abre uma janela de grfico


>> fplot(0.1*exp(x)+sin(x)-5-x,[0 5]);
aes Info

% grfico 2D de f(x)
>> xlabel(x); % nome do eixo do x
>> yylabel(f(x));
( ( ) ); % nome do eixo do y
Aplica

>> title(Grfico 2D); % ttulo do grfico


>> grid on; % activa grelha

39
Srgio Cruz
Grficos em Matlab
genharia

Quando se executa o comando plot, o matlab desenha o novo grfico na


janela j aberta, eliminando qualquer grfico anterior que l esteja
s para Eng

Caso pretenda adicionar o novo grfico quele j existente, pode usar o


comando hold.
hold Ao activar a funo hold (hold on) o matlab no s retm
ormticas

o grfico anterior como tambm as suas propriedades (eixos, etiquetas,


etc, excepto a funcionalidade de escala automtica)
aes Info

Para desactivar a funo hold faz-se hold off


Aplica

O comando shg coloca a janela que contm o grfico na frente do ecr

40
Srgio Cruz
Grficos 3D em Matlab
genharia

O matlab permite tambm traar grficos 3D de diferentes


tipos Alguns dos comandos para esse efeito so os
tipos.
s para Eng

seguintes:
plot3
ormticas

surf
mesh
contour3
aes Info

comet3
fill3
Aplica

A maioria dos comandos apresentados para grficos 2D


(colocao de etiquetas, ttulos, legendas, etc.) pode ser
usada igualmente com os grficos 3D

41
Srgio Cruz
Grficos 3D em Matlab - Exemplos
p
genharia

Exemplo: representar
grficamente a funo
g
s para Eng

f(x,y)=x*exp(-x^2-y^2)

>> figure % abre uma janela de grfico


>> [x,y]=meshgrid(-2:.1:2,-2:.1:2);
ormticas

>> z=x.*exp(-x.^2-y.^2);
>> plot3(x,y,z); % grfico 3D
>> figure % abre uma outra janela de grfico
aes Info

>> surf(x,y,z); % grfico 3D de superfcie


>> figure % abre uma outra janela de grfico
>> mesh(x,y,z); % grfico 3D de malha
>> figure
fi % abre
b uma outra t jjanela
l dde grfico
fi
Aplica

>> [c,h]=contour(x,y,z); % grfico de


contornos
>> clabel(c,h);
( ) % apresenta
p os valores dos
contornos

42
Srgio Cruz
Introduo
e Visualizao
de Dados
genharia

Para que o utilizador possa introduzir dados num dado programa, existe o
comando input:
p
s para Eng

>> a=input('Introduza o n de alunos: ')


O matlab responde com a seguinte mensagem, ficando a aguardar a
introduo do nmero:
ormticas

Introduza o n de alunos: 34
No final, atribui o valor introduzido pelo utilizador varivel a
Para visualizar resultados usa-se o comando disp. p Alguns
g exemplos:
p
aes Info

>> disp(a)
>> disp(A)
>> disp(Os alunos estudam muito ... pouco)
Aplica

Pode-se tambm afixar mensagens de erro com o comando error:


>> error(Houve um erro na execuo do programa)

NOTA: dentro de um ficheiro .m, esta instruo pra a execuo e sai do ficheiro
.m

43
Srgio Cruz
Introduo
e Visualizao
de Dados
genharia

Teste os seguintes exemplos para observar o uso de input e


s para Eng

disp:
di
>> clc;
>> A=rand(4);
ormticas

>> [m,n]=size(A);
p([ uma matriz num2str(m)
>> disp([A ( ) x num2str(n)])
( )])
aes Info

>> disp(A);

>> idade=input(Qual a sua idade?);


Aplica

>> nome=input(Qual o seu nome?\n, s); %neste caso note o uso de


s para indicar que se trata de uma string
s

44
Srgio Cruz
Controlo do Fluxo de Programa
g
genharia

semelhana de outras linguagens de programao, existem instrues


de controlo do fluxo de p
programa.
g No matlab so as seguintes:
g
s para Eng

Instruo if
Ciclo for
Ciclo while
ormticas

Estrutura switch

A instruo if usada da seguinte forma:


aes Info

if condio
% faz alguma coisa
else
% ffaz uma coisa
i dif
diferente
t
Aplica

end

De seguida apresentado um exemplo do uso da instruo if num ficheiro


.m

45
Srgio Cruz
Controlo do Fluxo de Programa
g
genharia

x=aula2;
y=aula1;
s para Eng

if strcmp(x,y)
disp(As aulas so iguais)
else
di (A aulas
disp(As l so dif
diferentes)
t )
ormticas

end
Nota: repare que a comparao de strings efectuada com o comando strcmp e
no com ==! Experimente fazer x==y e observe os resultados
aes Info

Tambm se pode usar o comando elseif numa estrutura if da seguinte forma:


if condio

Aplica

% faz uma coisa


elseif segundacondio
% faz outra coisa
else
% faz ainda uma coisa diferente (caso as duas condies sejam falsas)
end % (este end encerra o ciclo if j que elseif dispensa o uso de end)

46
Srgio Cruz
Controlo do Fluxo de Programa
g
genharia

Um ciclo for criado da seguinte forma:


for variavel=valorinicial:passo:valorfinal
p
s para Eng

% faz alguma coisa


end
ormticas

Um exemplo:
A=[1 23 34;3 4 5]
[m,n]=size(A);
aes Info

soma=0;
for coluna=1:n
for linha=1:m
soma=soma+A(linha,coluna);
( )
Aplica

end
end
di ([A soma d
disp([A de ttodos
d os elementos
l t : num2str(soma)])
2 t( )])

47
Srgio Cruz
Controlo do Fluxo de Programa
g
genharia

O ciclo while criado da seguinte forma:


while condicao
s para Eng

% faz alguma coisa


end
ormticas

Um exemplo:
x=1:10
aes Info

soma=0;
k=1;
while k<7
Aplica

soma=soma+x(k);
k=k+1;
end
disp([A soma dos primeiros seis elementos : num2str(soma)])

48
Srgio Cruz
Controlo do Fluxo de Programa
g
genharia

O comando for usado quando se sabe partida quantas vezes que o


ciclo dever ser executado. Caso contrrio usa-se o comando while
s para Eng

Pode-se usar o comando break para abandonar um ciclo for ou while e


continuar a execuo do programa na linha imediatamente a seguir ao
mesmo
Corra o seguinte exemplo e verifique o efeito da instruo break:
ormticas

A=[1 23 34;3 4 5]
[m,n]=size(A);
aes Info

soma=0;
for coluna=1:n
for linha=1:m
soma=soma+A(linha,coluna);
A(li h l )
Aplica

break
end
end
disp([A soma de alguns elementos : num2str(soma)])

49
Srgio Cruz
Controlo do Fluxo de Programa
g
genharia

De forma anloga, o comando continue instrui o matlab a


iniciar a iterao seguinte do ciclo for ou while onde est
s para Eng

colocado, desprezando quaisquer instrues que apaream a


seguir. No exemplo seguinte, a resposta do matlab 0:
A=[1 23 34;3 4 5]
ormticas

[m,n]=size(A);
soma=0;
f coluna=1:n
for l 1
aes Info

for linha=1:m
continue
soma=soma+A(linha,coluna);
Aplica

end
end
disp([A soma de alguns elementos : num2str(soma)])

50
Srgio Cruz
Controlo do Fluxo de Programa
g
genharia

A sintaxe da estrutura switch a seguinte


s para Eng

switch expresso % (expresso pode ser escalar ou string)


case valor1
ormticas

% executa cdigo 1
case valor2
% executa
t cdigo
di 2
aes Info

case {valor1, valor2}


% executa cdigog 3
Aplica

otherwise
% executa cdigo alternativo
end

51
Srgio Cruz
Controlo do Fluxo de Programa
g
genharia

Estrutura switch: um exemplo


s para Eng

a=input('Introduza um nmero:');
switch a
case 2
ormticas

disp('Introduziu o nmero 2');


case 3
aes Info

disp('Introduziu o nmero 3');


case {4,5}
disp('Introduziu o nmero 4 ou 5');
Aplica

otherwise
disp('Introduziu
disp( Introduziu um nmero grande demais');
demais );
end

52
Srgio Cruz
Funes
em Matlab
genharia

Para alm das funes (comandos) pr-definidas no matlab, o utilizador pode


tambm criar as suas prprias funes
s para Eng

O comando function permite cri-las. Uma funo deve ser definida da seguinte
forma:
ormticas

function y=nomefuncao(par1,par2,par3....)
% o cdigo da funo escrito aqui
y=par1+sqrt(par2)+....% o(s) valor(es) da funo deve(m) ser associado(s)
aes Info

% ao(s) parmetro(s) de sada

A funo pode ter vrios parmetros de entrada e de sada (no exemplo anterior
apenas h um parmetro de sada
sada. Caso houvesse mais do que um parmetro de
Aplica

sada, em vez de function y= seria function [y1,y2,y3, ]=)

O cdigo
g relativo funo
deve ser g
gravado num ficheiro .m e a directoria onde o
mesmo gravado deve fazer parte do path do matlab

53
Srgio Cruz
Funes
em Matlab
genharia

A funo pode depois ser chamada a partir da janela de comando do


matlab ou a partir do interior de um ficheiro .m, tal como se tratasse de
s para Eng

uma funo pr-definida do matlab


ormticas

NOTAS IMPORTANTES:
Caso o nome dado funo seja diferente do nome do ficheiro .m criado
aquando da definio da mesma, este ltimo nome que deve ser usado para
aes Info

invocar a funo!!!
As variveis definidas no interior da funo no sero acessveis a partir do
espao de trabalho do matlab (workspace)
Tenha em mente que uma funo
f no atribui nenhum valor a nenhuma
Aplica

varivel
A excepo a esta regra acontece se definir variveis globais no corpo da
funo (faa help global para mais informao)
A execuo da funo pode ser interrompida com o comando return

54
Srgio Cruz
Funes
em Matlab
genharia

Eis um exemplo de uma funo definida pelo utilizador, que recebe como
parmetro de entrada um vector e representa
p p uma espiral
p a trs
s para Eng

dimenses:
function [x,y,z] = spir3(t)
x = cos(20*t).*exp(-t.^2);
y = sin(20*t).*exp(-t.^2);
ormticas

z = exp(-t.^2);
plot3(x,y,z);
aes Info

A funo vai ser gravada no ficheiro spir3.m e invocada a partir da janela


de comando do matlab da seguinte forma
spir3(0:0 01:5);
spir3(0:0.01:5);
Aplica

Caso se pretenda reter os valores de x, y e z, deve-se invocar a funo da


seguinte forma
[x,y,z]=spir3(0:0.01:5);

55
Srgio Cruz
Polinmios em Matlab
genharia

Embora o matlab no permita trabalhar directamente com polinmios,


dispe
p de um conjunto
j de comandos destinados sua manipulao
p
s para Eng

No matlab, os polinmios so representados por vectores linha cujos


elementos so os coeficientes das sucessivas p
potncias do ppolinmio,
ordenadas por ordem decrescente. Por exemplo, o polinmio p(s)=4s^5-
ormticas

5s^3+10s^2+9s-3 representa-se por p=[4 0 -5 10 9 -3]


aes Info

Por outro lado, dada uma matriz B, quadrada, pode-se obter o polinmio
caracterstico associado a esta matriz com o comando poly. Um exemplo:
>> B=[1 3 5;2 4 6;1 2 3]
B=
Aplica

1 3 5
2 4 6
1 2 3
>> p=poly(B) % p(s)=det(sI-B)
p=
1.0000 -8.0000 -4.0000 0

56
Srgio Cruz
Polinmios em Matlab
genharia

As razes de um polinmio podem ser obtidas com o comando roots.


Considerando o polinmio anterior vir:
s para Eng

>> r=roots(p)
r=
0
ormticas

8.4721
-0.4721
As operaes
A dde soma e subtraco
bt efectuam-se
f t d fforma idntica
de id ti d
dos
aes Info

vectores mas o produto e diviso de polinmios efectuado com os


comandos conv e deconv. Por exemplo, considere dois polinmios
>> a=[2
[2 4 7]
7], b
b=[4
[4 8 11]
Aplica

a=
2 4 7 3
b=
4 8 11

57
Srgio Cruz
Polinmios em Matlab
genharia

O seu produto e diviso so iguais a


>> produto=conv(a,b)
produto=conv(a b)
s para Eng

produto =
8 32 82 112 101 33
>> [quociente,resto]=deconv(a,b)
[quociente resto]=deconv(a b)
ormticas

quociente =
0.5000 0 % q(s)=0.5s
resto
t =
aes Info

0 0 1.5000 3.0000 % r(s)=1.5s+3


Aplica

Por vezes til, dado um conjunto de pares ordenados (x,y), obter um


polinmio que permita representar de forma aproximada a funo y
(pense por exemplo a utilidade que tem obter uma expresso analtica
que permita conhecer o valor da indutncia de uma bobina em funo da
corrente que a percorre, se a mesma tiver um ncleo saturvel)

58
Srgio Cruz
Polinmios em Matlab
genharia

Nestas situaes, o matlab com o comando polyfit fornece-nos os


coeficientes do polinmio que melhor se ajusta aos dados fornecidos
s para Eng

A sintaxe a seguinte: polyfit(x,y,n) , onde x e y so vectores que


contm as coordenadas dos pontos a interpolar e que serviro para gerar
ormticas

os coeficientes do polinmio, que ter grau n


aes Info

Um exemplo: vamos admitir que queremos arranjar um polinmio de grau


5 que permita obter valores idnticos queles fornecidos pela funo raiz
quadrada. Isto pode ser conseguido da seguinte forma:
x=0:0.01:5;
Aplica

y=sqrt(x);
p=polyfit(x,y,5);
Se agora fizer plot(x,y,x,polyval(p,x)) poder observar quanto boa a
interpolao produzida

59
Srgio Cruz
Integrao
g Numrica em Matlab
genharia

Para efectuar uma integrao numrica no matlab, usam-se


habitualmente dois comandos (existem outros):
s para Eng

quad
quadl
Como exemplo,
p p pretende-se calcular o integral
g de uma dada funo.

ormticas

Comecemos por definir a funo m(x)=3x^2+5 da seguinte forma:


function y=m(x)
yy=3*x.^2+5;; % definir a funo
num ficheiro .m
aes Info

Nota importante: repare no facto da funo ter de aceitar como parmetro


de entrada um vector x e devolver tambm um vector como parmetro de
sada!! Da a razo de se usar o smbolo .. antes da potenciao
Aplica

O integral da funo anterior, no intervalo [5,10], pode ento ser calculado


atravs de:
>> quad(
quad('m'
m ,5,10)
5 10) % mtodo de clculo: regra de Simpson recursiva adaptativa
ans =
900.0000

60
Srgio Cruz
Mnimos,, Mximos e Zeros em Matlab
genharia

Por vezes, dada uma funo, necessrio achar os pontos onde ocorrem
os seus mnimos e mximos locais, bem como os zeros
s para Eng

Para calcular o valor da varivel independente onde ocorre um mnimo da


funo (de uma varivel apenas), num dado intervalo especificado, usa-se
o comando fminbnd.
fminbnd A sintaxe fminbnd(
fminbnd(fun
fun ,x1,x2)
x1 x2) onde [x1
[x1,x2]
x2] o
ormticas

intervalo onde ser procurado o mnimo local da funo fun


ter mais do que
No caso da funo q uma varivel usa-se o comando
aes Info

fminsearch. Neste caso a sintaxe fminsearch(fun,x0), onde x0 um


vector linha com uma primeira estimativa do local onde o mnimo deve ser
procurado ((a funo
p deve aceitar como p parmetro de entrada um vector))
Aplica

Tenha algum cuidado ao usar estas funes, pois a funo fun, no


intervalo especificado, pode ter mais do que um mnimo local
Para encontrar os zeros de uma funo usa-se
usa se o comando fzero.
fzero Sintaxe:
fzero(fun,x0). Para achar o mximo da funo calcule o mnimo da
funo simtrica!!!

61
Srgio Cruz
Equaes
q Diferenciais em Matlab
genharia

O matlab disponibiliza um conjunto de comandos destinados


a obter a soluo numrica de equaes diferenciais
s para Eng

Comando Preciso Descrio


ormticas

O primeiro mtodo a testar (Runge-Kutta (4, 5)).


ode45 Mdia Resolve o problema na maioria dos casos
Runge-Kutta (2, 3). Usar quando a preciso no
ode23 Pequena importante
aes Info

Pequena at Usar em problemas onde o esforo computacional


ode113 grande
elevada
Usar se ode45 for lento,, devido ao facto do problema
p
ode15s Pequena at mdia
Aplica

ser duro (stiff)


Para resolver sistemas duros, onde a preciso no
ode23s Pequena importante

ode23t Pequena
ode23tb Pequena Para resolver problemas duros

62
Srgio Cruz
Equaes
q Diferenciais em Matlab
genharia

A sintaxe mais simples para resolver uma equao diferencial (ou sistema
de equaes diferenciais) [t,y]
[t,y]=solver(funcao,intervalotempo,y0),
solver(funcao,intervalotempo,y0),
s para Eng

onde solver representa uma das funes que constam da tabela anterior,
funcao representa uma funo (gravada num ficheiro .m) que descreve
( ) equao(es)
a(s) q ( ) diferencial(is)
( ) a resolver,, intervalotempo
p representa
p o
ormticas

intervalo ao longo do qual vai ser efectuada a integrao numrica, e y0


representa o vector com as condies iniciais do problema
aes Info

Se intervalotempo contiver mais do que dois elementos, o matlab


devolve o valor de y apenas nesses pontos
Aplica

Os vectores de sada t e y contm os valores da varivel independente e


os valores assumidos pela funo y

63
Srgio Cruz
Equaes
q Diferenciais em Matlab
genharia

Como exemplo, vamos procurar uma soluo numrica para a equao


diferencial y=
y =-2ty
2ty^2
2, nos pontos t=0
t=0, 0
0.25,
25 00.5,
5 00.75,
75 11, com a condio
s para Eng

inicial y(0)=1. A soluo analtica para esta equao y(t)=1/(1+t^2) e


servir para aferir a preciso da soluo numrica dada pelo matlab
ormticas

O primeiro passo para a resoluo da equao anterior consiste na


criao de um ficheiro .m com a descrio da mesma:
aes Info

function dy = eq1(t,y)
Aplica

% Ficheiro eq1.m com a descrio da equao y' = -2ty^2


dy = -2*t*y(1)^2; % pode-se escrever y em vez de y(1)

64
Srgio Cruz
Equaes
q Diferenciais em Matlab
genharia

Agora gera-se o vector intervalotempo contendo os pontos onde a


soluo requerida bem como as condies iniciais do problema:
s para Eng

intervalotempo=[0 .25 .5 .75 1]; y0 = 1;

Finalmente pode
pode-se
se chamar a funo que ir resolver a equao
ormticas

diferencial:
[t, y]=ode45(eq1, intervalotempo,y0);
aes Info

No vector y encontra-se a soluo da equao diferencial nos instantes


de tempo determinados pelos elementos de t (neste caso
t i t
t=intervalotempo)
l t )
Aplica

Pode representar-se
p graficamente a soluo
g com o comando p plot(t,y)
( ,y) e
verificar que a soluo numrica muito prxima da soluo exacta

65
Srgio Cruz
Equaes
q Diferenciais em Matlab
genharia

Vamos agora resolver um sistema de duas equaes diferenciais


(funes f e g): f '(t)
(t) = f(t) 4g(t); g
g'(t)
(t) = -f(t)
f(t) + g(t), com as condies
s para Eng

iniciais f(0) = 1; g(0) = 0


Cria-se o ficheiro meusistema.m com o seguinte cdigo
function dydt=meusistema(t
dydt=meusistema(t,y)
y)
ormticas

f=y(1);
g=y(2);
dfdt=f-4*g;
d d g; %pprimeira
e a equao d
diferencial
e e ca
aes Info

dgdt=-f+g; % segunda equao diferencial


dydt=[dfdt; dgdt]; % foroso que dydt seja um vector coluna
Agora pode-se
pode se resolver o sistema de equaes diferenciais da seguinte
Aplica

forma:
[t,funcoes]=ode45(meusistema,[-2 0.5],[1 0]);
No vector t e nas duas colunas da matriz funcoes ficam armazenados os
instantes de tempo (no intervalo [-2,0.5]) e as solues das funes f e g,
respectivamente, que satisfazem o sistema de equaes diferenciais dado

66
Srgio Cruz
Equaes
q Diferenciais em Matlab
genharia

O matlab apenas calcula solues numricas de sistemas de


equaes diferenciais de primeira ordem
ordem. Para resolver equaes
s para Eng

diferenciais de ordem superior deve convert-las, por intermdio de uma


mudana de variveis, em equaes diferenciais de 1 ordem
ormticas

Antes de definir o sistema de equaes no matlab tem de, previamente,


manipular manualmente tal sistema de modo a que ele fique na forma
aes Info

dV/dt=f(t,V), onde V um vector com as funes do sistema. Por outras


palavras, o sistema tem de ficar num formato do tipo dy1/dt =...; dy2/dt
=
=...., etc)
Aplica

67
Srgio Cruz
Tratamento de Dados de Entrada
genharia

O comando isempty permite verificar se uma dada varivel est vazia.


Por exemplo,
p se p pedir ao utilizador um nmero e ele apenas
p p
premir a
s para Eng

tecla <Enter>, a varivel associada ficar vazia e o comando acima


referido devolve o valor lgico Verdadeiro. Um exemplo:

A=input('Introduza uma matriz:');


ormticas

if isempty(A)
disp('No introduziu qualquer matriz')
else
l
aes Info

disp('A inversa da matriz que acabou de introduzir :')


disp(inv(A))
end
Aplica

Prima F1 e faa uma busca por is. Seleccione a primeira linha dos
resultados da busca e observe o conjunto de funes que o matlab
disponibiliza para verificar o tipo de dados que o utilizador introduziu

68
Srgio Cruz
Funes
na Janela de Comando
genharia

Pode definir funes na prpria janela de comando (ou ficheiro


.m)
m) usando o comando inline.
inline Trs exemplos:
s para Eng

f=inline('0.1*exp(x)+sin(x)-5-x') % Define a funo f


ormticas

fplot(f,[0 5]); % Grfico 2D de f(x)

( y)
f=inline('x^2+3*y') % Define a funo
de duas variveis independentes
p
aes Info

z=f(3,4) % z toma o valor da funo nos pontos (3,4)

ff=inline(sin(x1)+x2,x1,x2)
inline( sin(x1) x2 , x1 , x2 ) % Define uma funo f de variveis
Aplica

% independentes x1 e x2

69
Srgio Cruz
Interpolaes
p em Matlab
genharia

O matlab possui comandos que permitem efectuar interpolaes de uma


dada funo,
sendo conhecido apenas
p um conjunto
j finito de p
pontos
s para Eng

(abcissas) e respectivas imagens (ordenadas)

Existem diferentes mtodos p para efectuar uma interpolao.


p O matlab, ppor
defeito, efectua uma interpolao linear mas o utilizador pode escolher um
ormticas

outro mtodo se assim o entender


aes Info

Os comandos interp1, interp2, interp3 e interpn permitem obter


interpolaes de uma dada funo a uma dimenso, duas dimenses, trs
dimenses e n dimenses, respectivamente
Aplica

Os elementos dos vectores que constituem os parmetros de entrada das


funes interpoladoras devem ser dispostos de forma montona (isto ,
sempre de forma crescente ou decrescente)
decrescente), excepto para interp1.
interp1 No
entanto, tais pontos podem estar espaados de forma irregular

70
Srgio Cruz
Interpolaes
p em Matlab
genharia

Um exemplo de interpolao a 1
dimenso:
s para Eng

x=0:5; y=sin(x);
ormticas

xi=linspace(0,5,60);
% interpolao com splines cbicos
yi=interp1(x y xi 'spline');
yi=interp1(x,y,xi, spline );
aes Info

% grfico para aferir a qualidade da


interpolao
plot(x,y,'*',xi,yi)
l t( '*' i i)
Aplica

71
Srgio Cruz
Interpolaes
p em Matlab
genharia

Um exemplo de interpolao linear a 2 dimenses:


s para Eng

% Desenha um grfico 3D da funo z=f(x,y)=x^2+y^2


xe = -2:0.1:2; ye = -3:0.1:3; % repare que o espaamento dos pontos de 0.1 !!
[Xe Ye]=meshgrid(xe ye);
[Xe,Ye]=meshgrid(xe,ye);
ormticas

Ze=Xe.^2+Ye.^2;
subplot(3,1,1), mesh(Xe,Ye,Ze) % representa o grfico da funo f exacta
aes Info

%====== VAMOS COMEAR A INTERPOLAO AQUI =====


x= -2:1:2; y= -3:1:3; % Admite-se que s se conhece a funo nestes pontos
[X Y]
[X,Y]=meshgrid(x,y);
h id( )
Aplica

Z=X.^2+Y.^2; % Valores da funo a usar na interpolao


subplot(3,1,2), mesh(X,Y,Z) % representa o grfico da funo f conhecida
Zi=interp2(x,y,Z,Xe,Ye); % obtm-se uma interpolao linear da funo f
subplot(3,1,3), mesh(Xe,Ye,Zi) % representa o grfico da funo f interpolada

72
Srgio Cruz
Interpolaes
p em Matlab
genharia

Uma forma ligeiramente diferente de interpolar a 2 dimenses (talvez


menos intuitiva pois x um vector linha e y um vector coluna):
s para Eng

x = -2:2;
ormticas

y = [-2:2];
z = (sin(y).*exp(-y.^2))*(sin(x).*exp(-x^2));
xi = linspace(-2
linspace(-2,2,100);
2 100);
aes Info

yi = linspace(-2,2,100);
zi = interp2(x,y,z,xi,yi);
mesh(xi,yi,zi)
Aplica

73
Srgio Cruz
Tratamento de Erros Tryy e Catch
genharia

Quando surge um erro num programa executado em matlab, ele sinaliza tal
erro e aborta a execuo do programa (ficheiro .m)
s para Eng

Se pretender apanhar o referido erro e ter uma aco correctiva do


mesmo (tratamento adequado dos dados)
dados), sem abortar a execuo do
ormticas

ficheiro em causa, tem ao seu dispor os comandos try e catch


aes Info

A sintaxe no uso destes comandos a seguinte

tryy
Aplica

% fragmento de cdigo 1 que o matlab vai tentar executar sempre


catch
% fragmento de cdigo que o matlab vai executar se houver um erro no
fragmento de cdigo anterior (situado entre try e catch)
end % fim dos comandos try-catch

74
Srgio Cruz
Tratamento de Erros Tryy e Catch
genharia

Um exemplo muito simples no uso de try e catch:


clc
s para Eng

A=zeros(4,3)
B=eye(4,4)
ormticas

try
C=A*B;
disp('O
disp( O produto de A por B igual a:')
a: )
aes Info

disp(C)
catch
C=NaN;
Aplica

disp('As matrizes A e B no podem ser multiplicadas')


end

75
Srgio Cruz
Gravao/Leitura
de Dados
genharia

Para alm de efectuar clculos em matlab, torna-se importante armazenar os


resultados obtidos em ficheiro e l-los a partir de ficheiros previamente gravados
s para Eng

Foi visto anteriormente que o matlab dispe dos comandos save e load para
gravar/ler num/de ficheiro (por defeito grava ficheiros com extenso .mat, prprios
do matlab) as variveis do ambiente de trabalho
trabalho. Usando o parmetro -ascii a
ormticas

gravao ser efectuada num ficheiro de texto (Ex: >> save -ascii c:\teste.txt a b
%grava as variveis a e b num ficheiro de texto)
aes Info

Ao gravar as variveis em ficheiros .mat, tem a vantagem de poder ler apenas


algumas variveis do ficheiro. O mesmo exemplo anterior: >> save teste a b; clear
all; load teste a; %neste caso so gravadas as variveis a e b mas apenas a lida
do ficheiro
Aplica

Para alm dos comandos load e save, o matlab possui outros comandos por forma
a exportar
t dados
d d para serem usados
d por outras
t fferramentas
t ded anlise
li e vice-versa.
i
O matlab suporta os tipos de dados mais frequentes (ficheiros de texto, binrios,
Excel (xls), etc)

76
Srgio Cruz
Gravao/Leitura
de Dados
genharia

O comando fprintf permite formatar dados e grav-los em ficheiro (ou afix-


los no ecr)
ecr). Sintaxe: fprintf (ficheiro
(ficheiro_ID,
ID formatosaida
formatosaida, variavelsaida)
s para Eng

Este comando faz o seguinte:


ormticas

grava a(s) variavelsaida no ficheiro apontado por ficheiro_ID, de acordo com o


formatosaida especificado
o
omitindo
t do ficheiro
c e o_ID,, o co
comando
a do a
afixa
a o resultado
esu tado noo ec
ecr!!

aes Info

formatosaida uma string com informao acerca da formatao a dar (s)


varivel(is) a gravar. Envolve o uso do caracter % e permite especificar um
conjunto de aspectos que sero apresentados de seguida. permitido o uso de
Aplica

caracteres especiais (de controlo), tais como \n, \r, \t, \b, \f (nova linha, <enter>,
tab, espao para trs e nova pgina, respectivamente)

Obtenha mais informaes sobre este comando digitando help fprintf

77
Srgio Cruz
Gravao/Leitura
de Dados
genharia

Alguns exemplos no uso de fprintf:


s para Eng

>> x=3; fprintf('A raiz quadrada de %g %8.6f \n',x,sqrt(x));


A raiz quadrada de 3 1.732051
ormticas

No exemplo anterior, %g indica que a primeira varivel deve ser afixada usando
uma notao o mais compacta possvel e %8.6f indica que a segunda varivel deve
ser afixada num formato de vrgula fixa com um nmero mximo de oito caracteres
aes Info

(incluindo a vrgula!!), e 6 casas decimais

Repare que como temos de afixar dois nmeros (x e sqrt(x)) conveniente usaram-
se dois cdigos de converso na string de formatao. Experimente omitir por
Aplica

exemplo o primeiro cdigo de converso (%g) e observe os resultados obtidos

Apresenta-se de seguida uma tabela com alguns cdigos de converso vulgarmente


usados:

78
Srgio Cruz
Gravao/Leitura
de Dados
genharia
s para Eng

Cdigo Descrio da converso


%s Converte string de caracteres
ormticas

%d Nmero em notao decimal (com sinal)


aes Info

%f Nmero em notao de vrgula fixa

%e cientfica ((%E tambm admissvel))


Notao
Aplica

Notao mais compacta entre os resultados obtidos com


%g
%e e %f (omitindo zeros sem significado)

79
Srgio Cruz
Gravao/Leitura
de Dados
genharia

Para alm do tipo de converso a efectuar (%d, %f, etc), pode-se ainda especificar o
nmero mximo de caracteres das variveis ((w)) bem como o nmero de caracteres
s para Eng

direita da vrgula (p):


%w.pf
%w.pe
ormticas

Alguns exemplos de formatao de nmeros com o comando fprintf (experimente


os comandos pois por vezes so afixados espaos em branco que no so visveis
na tabela):
aes Info

Nmero %8.4f %12.3e %10g %8d


2 2.0000 2.000e+000 2 2
Aplica

sqrt(2) 1.4142 1.414e+000 1.41421 1.414214e+000


sqrt(2e-11)
sqrt(2e 11) 0.0000 4.472e-006
4.472e 006 4.47214e-006
4.47214e 006 4.472136e-006
4.472136e 006
sqrt(2e11) 447213.5955 4.472e+005 447214 4.472136e+005

80
Srgio Cruz
Gravao/Leitura
de Dados
genharia

Exemplos no uso de fprintf:


>> x=1:4; y=sqrt(x); fprintf(
fprintf('%9
%9.4f\n
4f\n',y)
y)
s para Eng

1.0000
1.4142
ormticas

1.7321
2.0000
aes Info

No exemplo anterior, %9.4f usado para formatar todos os elementos do


vector y. No entanto, por vezes esta funcionalidade pode originar resultados
um tanto ou quanto invulgares
invulgares. Um exemplo:
Aplica

>> clc; x=1:4; y=sqrt(x); fprintf('y = %9.4f\t',y)


y = 1.0000 y = 1.4142 y = 1.7321 y= 2.0000 >>

81
Srgio Cruz
Gravao/Leitura
de Dados
genharia

Um outro exemplo, agora com matrizes:


>> clc; A=[1 2 3;4 5 6;7 8 9]
9], fprintf('%8
fprintf( %8.2f
2f %8
%8.3f
3f %8
%8.4f\n
4f\n',A)
A)
s para Eng

A=
1 2 3
ormticas

4 5 6
7 8 9
aes Info

1.00 4.000 7.0000


2.00 5.000 8.0000
3 00
3.00 6
6.000
000 9
9.0000
0000
Aplica

No exemplop anterior,, repare


p q
que a instruo
vai p percorrer a matriz p
por
colunas e no por linhas, da que o resultado de fprintf seja diferente da
matriz original! Tenha cuidado ao usar fprintf e confira sempre os resultados

82
Srgio Cruz
Gravao/Leitura
de Dados
genharia

Mais um exemplo, agora para afixar uma tabela no ecr:


clc
s para Eng

etiquetas=char('pequena','mdia','grande','enorme'); % vector coluna de strings


largura=[5;5;10;15];
ormticas

altura=[5;8;15;25];
profundidade=[15;15;20;35];
volume=largura.*altura.*profundidade/10000;
volume largura. altura. profundidade/10000; % volume em metros cbicos
aes Info

fprintf('\n Tamanhos das caixas de equipamentos\n\n');


fprintf('Tamanho\t\tlargura\t altura\tprofundidade\tvolume\n');
f i tf('\t\t\t (cm)\t\t(cm)\t\t(cm)\t\t(m^3)\n');
fprintf('\t\t\t ( )\t\t( )\t\t( )\t\t( ^3)\ ')
Aplica

for i=1:length(largura)
fprintf('%-8s %8d %8d %8d %9.5f\n',...
etiquetas(i,:),largura(i),altura(i),profundidade(i),volume(i))
end

83
Srgio Cruz
Gravao/Leitura
de Dados
genharia

Vamos agora gravar num ficheiro os resultados criados pelo comando


fprintf. Para esse efeito, para alm deste comando tem tambm de usar
s para Eng

fopen e fclose para abrir/criar e fechar o ficheiro. Um exemplo:

f=input( Introduza uma temperatura em graus Fahrenheit[F]:');


f=input('Introduza Fahrenheit[F]: );
ormticas

c=5/9*(f-32);
fprintf('%5.2f graus Fahrenheit correspondem a %5.2f graus centigrados.\n',f,c)
aes Info

ficheiro_ID=fopen('c:\dados.txt', 'w'); % cria ou abre o ficheiro dados.txt


fprintf(ficheiro_ID, '%5.2f graus Fahrenheit correspondem a %5.2f graus
centigrados.\n',f,c);
g , , );
Aplica

fclose(ficheiro_ID); % fecha o ficheiro

84
Srgio Cruz
Gravao/Leitura
de Dados
genharia

O comando dlmwrite permite gravar ficheiros de texto em que os dados


numricos esto separados por um determinado delimitador (um tab por
s para Eng

exemplo). A sintaxe a seguinte: dlmwrite(ficheiro,Matriz,delimitador).


Um exemplo:
M = magic(3);
ormticas

dlmwrite(c:\meuficheiro.txt', [M*5 M/5], \t')

O comando
d dlmread
dl d id
idntico
ti mas para o processo d de lleitura.
it Si
Sintaxe:
t
aes Info

dlmread(ficheiro,delimitador). Omitindo o delimitador, a funo detecta-


o automaticamente. Consulte o help para ver as diferenas entre especificar
ou no
oddelimitador.
li it d U Um exemplo:l
Aplica

A=dlmread(c:\meuficheiro.txt,\t) % L os nmeros contidos no ficheiro,


considerando que os mesmos esto separados por tabs

dlmwrite e dlmread apenas trabalham com dados numricos

85
Srgio Cruz
Gravao/Leitura
de Dados
genharia

Os comandos xlswrite e xlsread permitem gravar e ler ficheiros no formato


usado pelo Microsoft Excel (extenso .xls). Um exemplo:
s para Eng

A=rand(4,3);
xlswrite('c:\teste.xls',A) % Grava a matriz A em ficheiro
B l
B=xlsread(c:\teste.xls);
d( \t t l ) % L o fificheiro
h i e armazena o resultado
lt d em B
ormticas

Os comandos fread e fwrite p


permitem ler e g
gravar ficheiros binrios. Dois
aes Info

exemplos:
identificador=fopen('c:\teste.bin','w');
A=rand(4
A rand(4,3);
3);
Aplica

fwrite(identificador,A,'float64'); % Grava os elementos da matriz A (percorre os


elementos da matriz por colunas)
fclose(identificador);

86
Srgio Cruz
Gravao/Leitura
de Dados
genharia

ident=fopen('c:\teste.bin','r')
B=fread(ident 'float64');
B=fread(ident, float64 ); % L os dados e armazena o resultado em B
s para Eng

fclose(ident);
B=reshape(B,4,3); % ...porque os dados esto armazenados num vector coluna
ormticas

% em alternativa poderia ter-se lido e formatado B ao mesmo tempo:


B=fread(ident,[4,3],'float64');
aes Info

O comando importdata permite ler qualquer tipo de ficheiro (incluindo som,


imagens, etc.). Faa help importdata para mais informaes
Aplica

87
Srgio Cruz

Você também pode gostar