Escolar Documentos
Profissional Documentos
Cultura Documentos
1a Parte
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.
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”:
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:
- 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:
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.
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
ii) Multiplicação e Divisão de matrizes: atenção pois as dimensões tem que ser coerentes!
A *B
A/B
ix) Determinante:
det(matriz)
x) Inversa:
inv(matriz)
A(1,1)
A(linha, coluna)
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.
A=entra(1);
B=entra(2);
C=entra(3);
D=A+B+C;
resultado=D;
b) Coloque o “current directory” do Matlab apontando para o diretório onde você salvou o
arquivo “soma”.
somatorio=soma([1 2 3])
%
%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”.
%Funcao Soma2
global A B C D
D=A+B+C
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:
d) For:
for J = 1:N,
A(I,J) = 1/(I+J-1);
end
10) Gráficos:
figure(1)
b) Graficando:
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”).
Axis([0 1 0 10])
d) Título do 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:
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.
t
h(t ) = RFE 1 − e RA
−
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.
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:
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:
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)');
function dh = dhdt(t,h,flag,par)
R = par(1);
A = par(2);
Fe = par(3);
dh = (Fe-(h/R))/A; %equação diferencial
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:
% 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)');
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: