Você está na página 1de 25

Introduo ao Matlab

1
a
Parte









Carlos Andr Vaz Junior
cavj@bol.com.br
2003


1
a
Parte: Objetivos







1) Conhecer o ambiente de trabalho do Matlab
2) Saber onde encontrar ajuda sempre que necessrio
3) Variveis, seus tipos e seus escopos
4) Comandos Matemticos
5) O que uma funo
6) Estruturas lgicas
7) Introduo aos grficos



1) O Ambiente de Trabalho:

O ambiente de trabalho do Matlab 6 apresentado abaixo. O ambiente dividido
basicamente em 3 regies. A regio principal a Command Window onde o usurio entra
com os comandos. Nas verses anteriores s tnhamos a Command Window, ocupando a
tela toda.

Na parte superior esquerda temos a Launch Pad, onde so encontrados links para
informaes sobre os toolboxes instalados (lembre-se que o Matlab no um pacote
fechado, ele vendido com uma serie de toolboxes opcionais). Tambm na parte superior
esquerda temos a Workspace. Essa janela informa as variveis armazenadas no ambiente de
trabalho (workspace), e ser muito til quando estivermos programando.

Na parte inferior esquerda temos Command History, exibindo os ltimos comandos
usados. Pode ser til quando temos de repetir seqncia de comandos, ou localizar uma
determinada sintaxe de comando usada no dia anterior. Tambm no canto inferior esquerdo
temos o Current Directory: quando usamos arquivos de programao, necessrio informar
ao Matlab onde esses arquivos se encontram. Para isso possvel usar a janela Current
Directory ou ento a combo-box Current Directory localizada na barra de ferramentas. Um
terceiro modo de informar o diretrio de trabalho atravs do comando cd (anlogo ao
comando CD do ambiente DOS).




2) Programando em Matlab:


A forma mais intuitiva de programao Matlab usar uma seqncia de comandos
digitados na Current Window. Experimente!

Ok, funciona. Mas e se quisermos repetir as contas? Teremos de digitar toda a
seqncia novamente! Vamos supor que estejamos calculando um Flash. A seqncia de
clculos longa, seria muito desagradvel no poder salva-la. Para isso existem os m file.
So arquivos de comandos Matlab que voc mesmo programa, e so gravados com a
extenso .m (da o nome m file).

Para criar um m-file v em File / New / M-File no ambiente do Matlab.






Um formulrio semelhante a esse ser aberto. Aqui voc pode programar da mesma
maneira que fazia na Command Window, com a vantagem que poder salvar a seqncia
de calculo e repeti-la quantas vezes quiser.




3) Conceito de Current Directory:


Voc acabou de criar seu m-file, e salvou ele no diretrio C:\Aula, com o nome de
teste.m. Agora vai na Command Window e digita teste:

??? Undefined function or variable 'teste'

O Matlab no encontrou o arquivo teste. Isso ocorreu pois o Current Directory, ou
diretrio de trabalho do Matlab no o C:\Aula. Use a janela Current Directory para
corrigir isso. Lembre-se: importante informar para o Matlab onde voc salvou seu
arquivo de programa!



4) Ajuda:


Antes de prosseguir vale lembrar que o Matlab uma ferramenta extremamente
complexa, de modo que apenas o uso nos leva a conhecer suas potencialidades. normal
que durante o uso surjam dvidas, para isso existem varias opes de ajuda.

- arquivo .hlp chamado pelo Help/Full Product Help Family no ambiente Matlab
- comando help
- voc j sabe o comando mas no lembra da sintaxe? help comando
- Site da Mathworks: http://www.matlab.com
- Newsgroup da Mathworks: http://newsreader.mathworks.com/



DICA: verifique se algum j no enfrentou o mesmo problema que voc antes,
consulte o newsgroup!



5) Criando Variveis:


DICA: o Matlab case-sensitive (A<>a) !!!


Quando programamos muito til armazenar valores calculados, ou parametros
recebidos do usurio. Para isso vamos usar as variveis. A principio podemos pensar as
variveis Matlab sempre como MATRIZES. Assim,

A = 1
Cria a varivel A com valor igual a 1. A uma matriz de 1 linha e 1 coluna

A=[1 2 3 4 5]
A varivel A agora uma matriz de 1 linha e 5 colunas. Ou se preferir: um vetor linha

A=[1 ;2 ;3 ;4 ;5]
Agora temos 1 linha e 5 colunas. Ou um vetor coluna

A=[1 2 3; 2 4 5; 5 3 6; 4 6 7; 5 77 8]
Por fim uma matriz de 5 linhas e 3 colunas.



O Matlab tambm lida com letras (strings):

A='aula de modelagem'



DICA: s vezes precisamos criar um vetor-linha que v de 0 a 10, com uma separao de
0.5 entre cada elemento. Digitar esse vetor daria bastante trabalho, use a funo abaixo:
A=0:0.5:10
A=incio:intervalo:fim


DICA: O Matlab usa . como separador decimal, e no ,.



6) Operaes Matemticas Simples:


i) Soma e subtrao: soma (ou subtrai) elemento por elemento da matriz.
A+B
A-B

ii) Multiplicao e Diviso de matrizes: ateno pois as dimenses tem que ser coerentes!
A * B
A / B

iii) Multiplicao e diviso elemento por elemento:
A .* B
A ./ B

iv) Matriz Transposta:
A

v) Cria Matriz Identidade:
eye(nmero de linhas, nmero de colunas)

vi) Cria Matriz Zeros:
zeros(nmero de linhas, nmero de colunas)

vii) Cria Matriz Uns:
ones(nmero de linhas, nmero de colunas)

viii) Cria Matriz Randmica (composta de nmeros aleatrios):
rand(nmero de linhas, nmero de colunas)

ix) Determinante:
det(matriz)

x) Inversa:
inv(matriz)

xi) Dimenses da matriz:
size(matriz)
lenght(matriz)
numel(matriz)


As demais funes Matlab sero apresentadas a medida que forem sendo
usadas nos exemplos. Consulte o Help sempre que necessrio!



7) Referenciar elementos de uma matriz:


Existem alguns mtodos para referenciar um determinado elemento de uma matriz.
A forma mais usual :

A(1,1)
A(linha, coluna)

Caso queira toda a primeira linha use:
A(1,:)

Caso queira toda a primeira coluna use:
A(:,1)



Outro mtodo chamar por uma espcie de indice nico, numerado coluna a
coluna como ilustra o exemplo abaixo:

(1)(5)(9)
(2)(6)(10)
(3)(7)(11)
(4)(8)(12)

Exemplo:
A=[1 2 3; 2 4 5; 5 3 6; 4 6 7;5 77 8];
A(3)
retorna 5





8) Functions:


At agora usamos os m-file apenas para guardar uma seqncia de comandos, na
ordem idntica ao que faramos usando o command window. Outra funcionalidade dos
m-files a criao de functions. Uma function um procedimento que recebe alguns
dados (entradas) e retorna resultados (sada). A funo sin (seno) um exemplo disso.
Quando digitamos A=sin(2) estamos atribuindo o valor de seno de 2 para a varivel A. Ou
seja: 2 o parmetro de entrada, A o parmetro de sada.

Para exemplificar a criao de funes vamos ver um exemplo simples:


a)crie o m-file abaixo:

function resultado = soma(entra),
%
%Isso eh uma linha de comentrio
%
%----------------------------------

A=entra(1);
B=entra(2);
C=entra(3);

D=A+B+C;

resultado=D;


Salve esse arquivo com o nome: soma.m


b) Coloque o current directory do Matlab apontando para o diretrio onde voc salvou o
arquivo soma.

c) Digite na Command Window:

somatorio=soma([1 2 3])

O Matlab vai retornar: somatrio = 6.



Explicao: observando o arquivo soma.m vemos:

function resultado = soma(entra),
onde:
resultado: parmetro de sada da function
soma: nome da funo (deve ter o mesmo nome do m-file)
entra: parmetro de entrada da function

%
%Isso eh uma linha de comentrio
%
%----------------------------------
onde:
toda linha iniciada por % no traduzida
pelo Matlab (ou seja: so comentrios que o programador escreve apenas para
documentar o programa)


A=entra(1);
B=entra(2);
C=entra(3);
onde:
lendo o parmetro de entrada. Dentro do parmetro de entrada entra existem 3
valores distintos. O primeiro deles a varivel A. O segundo a B e o terceiro a C.


D=A+B+C;
onde:
executa a tarefa para a qual a function foi criada. Esse o trecho central e
importante do arquivo.


resultado=D;
onde:
na primeira linha havamos informado que a varivel de sada seria resultado,
assim temos de atribuir a essa varivel o valor de interesse.



Agora observe a linha de comando usada para chamar a funo:

Teste=soma([1 2 3])
onde:
Teste varivel do Workspace do Matlab que vai receber o parmetro de sada da
function
soma o nome da funo a ser chamada
[1 2 3] so os parmetros que esto sendo enviados para a function. Preste ateno
nesse ponto: a funo espera receber 3 parmetros, por tanto temos de passar 3 parmetros.
Outro ponto importante: a ordem de passagem dos dados deve ser a mesma ordem com que
os dados esto sendo recebidos. Nesse exemplo o primeiro valor ser o A, o segundo B
e o terceiro C.



A forma apresentada acima maneira correta de passar e receber dados de uma
function. Porm, existe uma outra forma que em determinadas situaes mais intuitiva e
fcil de usar: Variveis Globais. O exemplo abaixo ilustra essa tcnica:

Crie o arquivo soma2.m:

%Funcao Soma2
global A B C D

D=A+B+C



No command window crie as variaveis A,B,C:
>> A=1
>> B=2
>> C=3

Declare como variveis globais:
>> global A B C D

Chame a funo:
>> soma2


Explicando:
Observando o arquivo Soma2.m temos:

global A B C D
onde: declara as variveis A,B,C,D como globais. Ou seja: so acessveis de dentro
desse arquivo function e de dentro da current window.
D=A+B+C
Executa a rotina de calculo da funo




Na current window primeiro criamos as variveis A,B,C, atribuindo valores a cada uma
delas. Essas variveis esto no workspace do Matlab (consulte a janela Workspace e
verifique!). A seguir usamos o comando global para disponibilizar essas variveis
tambm dentro da function.


Quando passamos variveis por global a funo passa a ter autonomia para ler e
modificar essas variveis.


9) Estruturas Lgicas:


a) If:

if I == J
A(I,J) = 2;
elseif abs(I-J) == 1
A(I,J) = -1;
else
A(I,J) = 0;
end


b) Case:

SWITCH switch_expr
CASE case_expr,
statement, ..., statement
CASE {case_expr1, case_expr2, case_expr3,...}
statement, ..., statement
...
OTHERWISE,
statement, ..., statement
END


c) While:

while norm(E+F-E,1) > 0,
E = E + F;
F = A*F/N;
N = N + 1;
end


d) For:

for J = 1:N,
A(I,J) = 1/(I+J-1);
end



10) Grficos:



Alguns comandos bsicos para graficar resultados:


a) Criando uma nova figura:

figure(1)


b) Graficando:

plot (x,y, r+)

esse comando vai plotar a varivel x (eixo horizontal) contra a variavel y (eixo vertical). As
variveis so vetores, ambos de mesma dimenso. Cada ponto ser representado por uma
marca + na cor vermelha (red). Para saber mais sobre o comando Plot consulte o help
plot).


c) Definindo a escala dos eixos:

Axis([0 1 0 10])

Usando a linha de comando acima definimos a escala do eixo horizontal entre 0 e 1. E a
escala do eixo vertical entre 0 e 10.


d) Ttulo do grfico:

title(entre com o Ttulo);


e) Nome dos eixos:

xlabel(nome do eixo horizontal)
ylabel(nome do eixo vertical)


f) Vrias curvas em um mesmo grfico:

As vezes temos de plotar mais de uma curva em um nico grfico. Nesse caso podemos
escrever:

plot(X1,Y1,'y-',X2,Y2,'go' ...

Porm nesse caso seria til adicionar uma legenda, para que o grfico torne-se mais
intuitivo:

legend(serie 1, serie 2, ...



DICA: consulte o help e verifique a utilidade do comando hold!







Exemplo 1: Modelagem simples de um tanque de nvel


O modelo usado nesse exemplo possui soluo analtica, de modo que a sua
implementao no Matlab fica bastante facilitada. A seguir vamos analisar os comandos
Matlab usados nessa soluo.

A equao usada (soluo analtica):





A rotina Matlab ser:

% Definio das constantes do modelo
R = 1; % h/m2
A = 2; % m2
Fe = 10; % m3/h
% Tempo de simulao
t = 0.0 : 0.01 : 10.0; % h
% Simulao da altura de lquido
h = R*Fe*(1 - exp(-t/(R*A))); % m
% Visualizao da simulao
plot(t,h);
title('Simulao do tanque de nvel');
xlabel('Tempo (h)');
ylabel('Altura (m)');

( )

,
_

RA
t
E
e RF t h 1
Estudando cada comando usado:


Inicialmente damos valores as variveis:
R = 1; % h/m2
A = 2; % m2
Fe = 10; % m3/h


Gostaramos de observar o comportamento da altura de lquido (h) ao longo de vrios
instantes de tempo. Assim o tempo (t) ser um vetor linha variando de 0 at 10 (intervalo de
0.01):
t = 0.0 : 0.01 : 10.0; % h

Verifique na janela Workspace do Matlab as dimenses da varivel t:
1 linha, 1000 colunas.


Usando a soluo analtica calculamos a altura em cada tempo:
h = R*Fe*(1 - exp(-t/(R*A))); % m


DICA: Verifique a consistncia do calculo: a matriz h gerada tambm deve ser
1x1000, j que cada instante t gerou um valor h. sempre til conferir a dimenso das
variveis, principalmente a medida que as rotinas forem tornando-se complexas.


Os comandos posteriores so apenas para a composio do resultado na forma de grfico:
plot(t,h);
title('Simulao do tanque de nvel');
xlabel('Tempo (h)');
ylabel('Altura (m)');










Exemplo 2: Modelagem simples de um tanque de nvel



Muitas vezes muito trabalhoso, ou menos impossvel, encontrar a soluo analtica
para o conjunto de equaes diferenciais. Nesse caso temos que simular usando soluo
numrica das equaes diferenciais. Vamos assumir que o modelo do exemplo 1 no
tivesse soluo analtica, e ento usar o Matlab para estudar o comportamento da altura do
nvel com o tempo.

O cdigo do programa principal ser:

% Definio das constantes do modelo
R = 1; % h/m2
A = 2; % m2
Fe = 10; % m3/h
% Tempo de simulao
t = 0.0 : 0.01 : 10.0; % h
% Simulao da altura de lquido
[t,h] = ode45('dhdt',t, 0,[],[R A Fe]);
% Visualizao da simulao
plot(t,h);
title('Simulao do tanque de nvel');
xlabel('Tempo (h)');
ylabel('Altura (m)');



E a funo dhdt:

function dh = dhdt(t,h,flag,par)
R = par(1);
A = par(2);
Fe = par(3);
dh = (Fe-(h/R))/A;





Passaremos agora a analisar cada comando usado:


A mesma declarao de variveis necessria.
% Definio das constantes do modelo
R = 1; % h/m2
A = 2; % m2
Fe = 10; % m3/h
% Tempo de simulao
t = 0.0 : 0.01 : 10.0; % h


Nesse caso temos uma equao diferencial, ento deveremos usar uma funo
Matlab especfica para a resoluo de eq. diferenciais. No caso temos a ODE45.. A funo
ODE45 implementa um esquema de soluo de sistemas de EDOs por mtodo de Runge-
Kutta de ordem mdia (consulte o help sobre ODE45 para maiores detalhes).
[t,h] = ode45('dhdt',t, 0,[],[R A Fe]);

Os parmetros enviados entre parnteses so aqueles que devemos passar para a
ODE45:

1 argumento de ode45 uma string contendo o nome do arquivo .m com as
equaes diferenciais. Neste caso, o arquivo chama-se dhdt.m.
2 argumento um vetor que pode conter (i) dois elementos: os tempos inicial e
final da integrao, ou (ii) todos os valores de tempo para os quais deseja-se
conhecer o valor da varivel integrada.
3 argumento o vetor contendo as condies iniciais das variveis dependentes
das EDOs. Os valores dos elementos do vetor de condies iniciais precisam estar
na mesma ordem em que as variveis correspondentes so calculadas na funo
passada como 1 argumento para ode45 (neste caso, dhdt.m). Nesse caso em
particular s temos uma varivel dependente, assim temos uma nica condio
inicial.
4 argumento o vetor de opes de ode45. H vrias opes do mtodo que
podem ser ajustadas. Entretanto, no deseja-se alterar os valores-padro. Neste
caso, passado um vetor vazio, apenas para marcar o lugar das opes.
5 argumento um vetor contendo parmetros de entrada para a funo dsdt.m.
Observe que a funo .m deve ler esses parmetros na ordem correta (recebe como
varivel local par).

Os resultados da simulao so obtidos nos dois parmetros entre colchetes (t , h).




Os comandos seguintes apenas exibem os resultados na forma grfica:

plot(t,h);
title('Simulao do tanque de nvel');
xlabel('Tempo (h)');
ylabel('Altura (m)');


A codificao do arquivo .m segue o mesmo formato j explicado para funes
porm com algumas particularidades explicadas a seguir. No caso especfico de um arquivo
.m que deve ser chamado por uma funo de soluo EDOs (todas as ODExx), a
declarao deste arquivo deve seguir a sintaxe:
function dy =nomefun(t, y, flag, arg1, ..., argN)
onde
dy o valor da(s) derivada(s) retornadas
t e y so as variveis independente e dependente, respectivamente.
Opcional: caso deseje-se receber outros parmetros, a funo deve receber um
argumento marcador de lugar chamado flag. Aps este, ela recebe quaisquer outros
parmetros.

Assim fica fcil entender o cdigo usado:

function dh = dhdt(t,h,flag,par)
R = par(1);
A = par(2);
Fe = par(3);
dh = (Fe-(h/R))/A; %equao diferencial



Compare agora o grfico gerado pelos dois exemplos!




Exemplo 3: Modelagem simples de um tanque de aquecimento



A modelagem do tanque de aquecimento desse exemplo apresenta duas variveis
dependentes do tempo: altura de liquido (h) e temperatura (T). Assim temos duas equaes
diferenciais apresentadas abaixo:







Quando temos mais de uma equao diferencial, torna-se obrigatrio usar um vetor
para chamar as variveis dependentes. Assim, no podemos chamar uma varivel
dependente de h e a outra de T, temos que usar y(1) e y(2). Preste ateno na
nomenclatura usada e seja coerente:


Matlab Real
dy(1) dh/dt
y(1) h
dy(2) dT/dt
y(2) T


DICA: desenvolva o habito de montar a tabela acima sempre que estiver usando nomes
de variveis Matlab diferentes dos nomes reais.


( )

,
_


R
h
F
A dt
t dh
E
1
1
1
]
1

,
_

,
_

+
p
E
p
h E E
C
U
A
F
T
C
UT
A
T F
h dt
dT

1


O cdigo do programa principal apresentado abaixo:

% Definio das constantes do modelo
R = 1; % h/m2
A = 2; % m2
Fe = 10; % m3/h
Cp = 0.75; % kJ/(kg . K)
Ro = 1000; % kg/m3
U = 150; % kJ/(m2 . s . K)
Te = 530; % K
Th = 540; % K

% Tempo de simulao
t = 0.0 : 0.01 : 10.0; % h

% Simulao do modelo
[t,y]=ode45('dydt',t,[(5/A) Th],[],[U A Ro Cp Fe R Te Th]);

% Visualizao da simulao
figure(1);
plot(t,y(:,1)); title('Tanque de aquecimento');
xlabel('Tempo (h)'); ylabel('Altura (m)');
figure(2);
plot(t,y(:,2)); title('Tanque de aquecimento');
xlabel('Tempo (h)'); ylabel('Temperatura (K)');


A nica modificao em relao ao exemplo anterior que estamos passando duas
condies iniciais (pois existem duas variveis dependentes):
[t,y]=ode45('dydt',t,[(5/A) Th],[],[U A Ro Cp Fe R Te Th]);




A funo .m tem o cdigo apresentado a seguir:

function dy = dydt(t,y,flag,par);
U = par(1);
A = par(2);
Ro = par(3);
Cp = par(4);
Fe = par(5);
R = par(6);
Te = par(7);
Th = par(8);
dy(1) = (Fe-(y(1)/R))/A;dy(2) = (1/y(1))*((Fe*Te/A)+(U*Th/(Ro*Cp)) -
((Fe/A)+(U/(Ro*Cp)))*y(2));
dy = dy(:);


DICA: o vetor dy criado como vetor linha (dy(1)) e (dy(2)). Porm temos que retornar
como vetor coluna. Use o comando:
matriz coluna = matriz linha (:)



DICA: quando for fazer os grficos no programa principal lembre-se que a primeira
coluna de dy refere-se a h e a segunda a T. Ento para graficar h vs. tempo faa:
figure(1);
plot(t,y(:,1)); title('Tanque de aquecimento');
xlabel('Tempo (h)'); ylabel('Altura (m)');


Exerccio sugerido:


O modelo do tanque de aquecimento foi deduzido para uma expresso de vazo de
sada: F = h . R -1 .

Deduza novamente o modelo, utilizando agora: F = k(h - h*)

onde h* uma altura de referncia a escolher,
k uma constante positiva qualquer

Escreva um arquivo .m e simule o novo modelo!

Você também pode gostar