Você está na página 1de 25

Introdução ao Matlab

1a Parte

Carlos André Vaz Junior


cavj@bol.com.br
2003
1a Parte: Objetivos

1) Conhecer o ambiente de trabalho do Matlab


2) Saber onde encontrar ajuda sempre que necessário
3) Variáveis, seus tipos e seus escopos
4) Comandos Matemáticos
5) O que é uma função
6) Estruturas lógicas
7) Introdução aos gráficos
1) O Ambiente de Trabalho:

O ambiente de trabalho do Matlab 6 é apresentado abaixo. O ambiente é dividido


basicamente em 3 regiões. A região principal é a Command Window onde o usuário entra
com os comandos. Nas versões anteriores só tínhamos a Command Window, ocupando a
tela toda.

Na parte superior esquerda temos a Launch Pad, onde são encontrados links para
informações sobre os toolboxes instalados (lembre-se que o Matlab não é um pacote
fechado, ele é vendido com uma serie de toolboxes opcionais). Também na parte superior
esquerda temos a Workspace. Essa janela informa as variáveis 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 seqüência de comandos, ou localizar uma
determinada sintaxe de comando usada no dia anterior. Também no canto inferior esquerdo
temos o Current Directory: quando usamos arquivos de programação, é necessário informar
ao Matlab onde esses arquivos se encontram. Para isso é possível usar a janela Current
Directory ou então a combo-box Current Directory localizada na barra de ferramentas. Um
terceiro modo de informar o diretório de trabalho é através do comando “cd” (análogo ao
comando CD do ambiente DOS).
2) Programando em Matlab:

A forma mais intuitiva de programação Matlab é usar uma seqüência de comandos


digitados na Current Window. Experimente!

Ok, funciona. Mas e se quisermos repetir as contas? Teremos de digitar toda a


seqüência novamente! Vamos supor que estejamos calculando um Flash. A seqüência de
cálculos é longa, seria muito desagradável não poder salva-la. Para isso existem os “m file”.
São arquivos de comandos Matlab que você mesmo programa, e são gravados com a
extensão .m (daí o nome “m file”).

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

Um formulário semelhante a esse será aberto. Aqui você pode programar da mesma
maneira que fazia na Command Window, com a vantagem que poderá salvar a seqüência
de calculo e repeti-la quantas vezes quiser.
3) Conceito de Current Directory:

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

??? Undefined function or variable 'teste'

O Matlab não encontrou o arquivo “teste”. Isso ocorreu pois o Current Directory, ou
diretório de trabalho do Matlab não é 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 dúvidas, para isso existem varias opções de ajuda.

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

DICA: verifique se alguém já não enfrentou o mesmo problema que você antes,
consulte o newsgroup!
5) Criando Variáveis:

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

Quando programamos é muito útil armazenar valores calculados, ou parametros


recebidos do usuário. Para isso vamos usar as “variáveis”. A principio podemos pensar as
variáveis Matlab sempre como MATRIZES. Assim,

A=1
Cria a variável “A” com valor igual a 1. “A” é uma matriz de 1 linha e 1 coluna

A=[1 2 3 4 5]
A variável “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 também lida com letras (strings):

A='aula de modelagem'

DICA: às vezes precisamos criar um vetor-linha que vá de 0 a 10, com uma separação de
0.5 entre cada elemento. Digitar esse vetor daria bastante trabalho, use a função abaixo:
A=0:0.5:10
A=início:intervalo:fim

DICA: O Matlab usa “.” como separador decimal, e não “,”.


6) Operações Matemáticas Simples:

i) Soma e subtração: soma (ou subtrai) elemento por elemento da matriz.


A+B
A-B

ii) Multiplicação e Divisão de matrizes: atenção pois as dimensões tem que ser coerentes!
A *B
A/B

iii) Multiplicação e divisão elemento por elemento:


A .* B
A ./ B

iv) Matriz Transposta:


A’

v) Cria Matriz Identidade:


eye(número de linhas, número de colunas)

vi) Cria Matriz Zeros:


zeros(número de linhas, número de colunas)

vii) Cria Matriz Uns:


ones(número de linhas, número de colunas)

viii) Cria Matriz Randômica (composta de números aleatórios):


rand(número de linhas, número de colunas)

ix) Determinante:
det(matriz)

x) Inversa:
inv(matriz)

xi) Dimensões da matriz:


size(matriz)
lenght(matriz)
numel(matriz)

As demais funções Matlab serão apresentadas a medida que forem sendo


usadas nos exemplos. Consulte o Help sempre que necessário!
7) Referenciar elementos de uma matriz:

Existem alguns métodos 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 método é chamar por uma espécie 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 seqüência de comandos, na
ordem idêntica ao que faríamos usando o “command window”. Outra funcionalidade dos
“m-files” é a criação de “functions”. Uma “function” é um procedimento que recebe alguns
dados (entradas) e retorna resultados (saída). A função “sin” (seno) é um exemplo disso.
Quando digitamos A=sin(2) estamos atribuindo o valor de seno de 2 para a variável A. Ou
seja: “2” é o parâmetro de entrada, “A” é o parâmetro de saída.

Para exemplificar a criação de funções vamos ver um exemplo simples:

a)crie o “m-file” abaixo:

function resultado = soma(entra),


%
%Isso eh uma linha de comentário
%
%----------------------------------

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 diretório onde você salvou o
arquivo “soma”.

c) Digite na Command Window:

somatorio=soma([1 2 3])

O Matlab vai retornar: somatório = 6.


Explicação: observando o arquivo “soma.m” vemos:

function resultado = soma(entra),


onde:
resultado: parâmetro de saída da function
soma: nome da função (deve ter o mesmo nome do m-file)
entra: parâmetro de entrada da function

%
%Isso eh uma linha de comentário
%
%----------------------------------
onde:
toda linha iniciada por “%” não é traduzida
pelo Matlab (ou seja: são comentários que o programador escreve apenas para
documentar o programa)

A=entra(1);
B=entra(2);
C=entra(3);
onde:
lendo o parâmetro de entrada. Dentro do parâmetro de entrada “entra” existem 3
valores distintos. O primeiro deles é a variável “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 havíamos informado que a variável de saída seria “resultado”,
assim temos de atribuir a essa variável o valor de interesse.
Agora observe a linha de comando usada para chamar a função:

Teste=soma([1 2 3])
onde:
“Teste” é variável do Workspace do Matlab que vai receber o parâmetro de saída da
function
“soma” é o nome da função a ser chamada
“[1 2 3] são os parâmetros que estão sendo enviados para a function. Preste atenção
nesse ponto: a função espera receber 3 parâmetros, por tanto temos de passar 3 parâmetros.
Outro ponto importante: a ordem de passagem dos dados deve ser a mesma ordem com que
os dados estão 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. Porém, existe uma outra forma que em determinadas situações é mais intuitiva e
fácil de usar: Variáveis Globais. O exemplo abaixo ilustra essa técnica:

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 “variáveis globais”:


>> global A B C D

Chame a função:
>> soma2

Explicando:
Observando o arquivo Soma2.m temos:

global A B C D
onde: declara as variáveis A,B,C,D como globais. Ou seja: são acessíveis de dentro
desse arquivo function e de dentro da “current window”.
D=A+B+C
Executa a rotina de calculo da função

Na “current window” primeiro criamos as variáveis A,B,C, atribuindo valores a cada uma
delas. Essas variáveis estão no workspace do Matlab (consulte a janela “Workspace” e
verifique!). A seguir usamos o comando “global” para disponibilizar essas variáveis
também dentro da function.

Quando passamos variáveis por “global” a função passa a ter autonomia para ler e
modificar essas variáveis.
9) Estruturas Lógicas:

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) Gráficos:

Alguns comandos básicos para graficar resultados:

a) Criando uma nova figura:

figure(1)

b) Graficando:

plot (x,y, ‘r+’)

esse comando vai plotar a variável x (eixo horizontal) contra a variavel y (eixo vertical). As
variáveis são vetores, ambos de mesma dimensão. 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) Título do gráfico:

title(‘entre com o Título’);

e) Nome dos eixos:

xlabel(‘nome do eixo horizontal’)


ylabel(‘nome do eixo vertical’)
f) Várias curvas em um mesmo gráfico:

As vezes temos de plotar mais de uma curva em um único gráfico. Nesse caso podemos
escrever:

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

Porém nesse caso seria útil adicionar uma legenda, para que o gráfico 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 nível

O modelo usado nesse exemplo possui solução analítica, de modo que a sua
implementação no Matlab fica bastante facilitada. A seguir vamos analisar os comandos
Matlab usados nessa solução.

A equação usada é (solução analítica):

 t

h(t ) = RFE 1 − e RA 

 
 

A rotina Matlab será:

% Definição das constantes do modelo


R = 1; % h/m2
A = 2; % m2
Fe = 10; % m3/h
% Tempo de simulação
t = 0.0 : 0.01 : 10.0; %h
% Simulação da altura de líquido
h = R*Fe*(1 - exp(-t/(R*A))); %m
% Visualização da simulação
plot(t,h);
title('Simulação do tanque de nível');
xlabel('Tempo (h)');
ylabel('Altura (m)');
Estudando cada comando usado:

Inicialmente damos valores as variáveis:


R = 1; % h/m2
A = 2; % m2
Fe = 10; % m3/h

Gostaríamos de observar o comportamento da altura de líquido (h) ao longo de vários


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 dimensões da variável “t”:


1 linha, 1000 colunas.

Usando a solução analítica calculamos a altura em cada tempo:


h = R*Fe*(1 - exp(-t/(R*A))); %m

DICA: Verifique a consistência do calculo: a matriz “h” gerada também deve ser
1x1000, já que cada instante “t” gerou um valor “h”. É sempre útil conferir a dimensão das
variáveis, principalmente a medida que as rotinas forem tornando-se complexas.

Os comandos posteriores são apenas para a composição do resultado na forma de gráfico:


plot(t,h);
title('Simulação do tanque de nível');
xlabel('Tempo (h)');
ylabel('Altura (m)');
Exemplo 2: Modelagem simples de um tanque de nível

Muitas vezes é muito trabalhoso, ou menos impossível, encontrar a solução analítica


para o conjunto de equações diferenciais. Nesse caso temos que simular usando solução
numérica das equações diferenciais. Vamos assumir que o modelo do exemplo 1 não
tivesse solução analítica, e então usar o Matlab para estudar o comportamento da altura do
nível com o tempo.

O código do programa principal será:

% Definição das constantes do modelo


R = 1; % h/m2
A = 2; % m2
Fe = 10; % m3/h
% Tempo de simulação
t = 0.0 : 0.01 : 10.0; % h
% Simulação da altura de líquido
[t,h] = ode45('dhdt',t, 0,[],[R A Fe]);
% Visualização da simulação
plot(t,h);
title('Simulação do tanque de nível');
xlabel('Tempo (h)');
ylabel('Altura (m)');

E a função “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 declaração de variáveis é necessária.


% Definição das constantes do modelo
R = 1; % h/m2
A = 2; % m2
Fe = 10; % m3/h
% Tempo de simulação
t = 0.0 : 0.01 : 10.0; % h

Nesse caso temos uma equação diferencial, então deveremos usar uma função
Matlab específica para a resolução de eq. diferenciais. No caso temos a ODE45.. A função
ODE45 implementa um esquema de solução de sistemas de EDO’s por método de Runge-
Kutta de ordem média (consulte o help sobre ODE45 para maiores detalhes).
[t,h] = ode45('dhdt',t, 0,[],[R A Fe]);

Os parâmetros enviados entre parênteses são aqueles que devemos passar para a
ODE45:

• 1º argumento de ode45 é uma string contendo o nome do arquivo .m com as


equações 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 integração, ou (ii) todos os valores de tempo para os quais deseja-se
conhecer o valor da variável integrada.
• 3º argumento é o vetor contendo as condições iniciais das variáveis dependentes
das EDO’s. Os valores dos elementos do vetor de condições iniciais precisam estar
na mesma ordem em que as variáveis correspondentes são calculadas na função
passada como 1º argumento para ode45 (neste caso, dhdt.m). Nesse caso em
particular só temos uma variável dependente, assim temos uma única condição
inicial.
• 4º argumento é o vetor de opções de ode45. Há várias opções do método que
podem ser ajustadas. Entretanto, não deseja-se alterar os valores-padrão. Neste
caso, é passado um vetor vazio, apenas para marcar o lugar das opções.
• 5º argumento é um vetor contendo parâmetros de entrada para a função dsdt.m.
Observe que a função .m deve ler esses parâmetros na ordem correta (recebe como
variável local “par”).

Os resultados da simulação são obtidos nos dois parâmetros entre colchetes (t , h).
Os comandos seguintes apenas exibem os resultados na forma gráfica:

plot(t,h);
title('Simulação do tanque de nível');
xlabel('Tempo (h)');
ylabel('Altura (m)');

A codificação do arquivo .m segue o mesmo formato já explicado para funções


porém com algumas particularidades explicadas a seguir. No caso específico de um arquivo
.m que deve ser chamado por uma função de solução EDO’s (todas as ODExx), a
declaração 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 são as variáveis independente e dependente, respectivamente.
• Opcional: caso deseje-se receber outros parâmetros, a função deve receber um
argumento marcador de lugar chamado flag. Após este, ela recebe quaisquer outros
parâmetros.

Assim fica fácil entender o código usado:

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

Compare agora o gráfico gerado pelos dois exemplos!


Exemplo 3: Modelagem simples de um tanque de aquecimento

A modelagem do tanque de aquecimento desse exemplo apresenta duas variáveis


dependentes do tempo: altura de liquido (h) e temperatura (T). Assim temos duas equações
diferenciais apresentadas abaixo:

dh(t ) 1  h
=  FE − 
dt A R

dT 1  F T UTh  F U 
=  E E + − T E +
dt h  A ρC p  A ρ C 
 p 

Quando temos mais de uma equação diferencial, torna-se obrigatório usar um vetor
para chamar as variáveis dependentes. Assim, não podemos chamar uma variável
dependente de “h” e a outra de “T”, temos que usar “y(1)” e “y(2)”. Preste atenção 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 variáveis Matlab diferentes dos nomes reais.
O código do programa principal é apresentado abaixo:

% Definição 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 simulação
t = 0.0 : 0.01 : 10.0; % h

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

% Visualização da simulação
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 modificação em relação ao exemplo anterior é que estamos passando duas


condições iniciais (pois existem duas variáveis dependentes):
[t,y]=ode45('dydt',t,[(5/A) Th],[],[U A Ro Cp Fe R Te Th]);
A função .m tem o código 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)). Porém temos que retornar
como vetor coluna. Use o comando:
matriz coluna = matriz linha (:)

DICA: quando for fazer os gráficos no programa principal lembre-se que a primeira
coluna de “dy” refere-se a “h” e a segunda a “T”. Então para graficar h vs. tempo faça:
figure(1);
plot(t,y(:,1)); title('Tanque de aquecimento');
xlabel('Tempo (h)'); ylabel('Altura (m)');
Exercício sugerido:

O modelo do tanque de aquecimento foi deduzido para uma expressão de vazão de


saída: F = h . R -1 .

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

onde h* é uma altura de referência a escolher,


k é uma constante positiva qualquer

Escreva um arquivo .m e simule o novo modelo!

Você também pode gostar