SlideShare ist ein Scribd-Unternehmen logo
1 von 98
MATLABBásico
Carlos André Vaz Junior
cavazjunior@gmail.com
http://www.eq.ufrj.br/links/h2cin/carlosandre
MATLABBásico
Mais de 1 milhão de resultados
MATLABBásico
?
http://newsreader.mathworks.com
MATLABBásico
MATLABBásico
MATLABBásico
MATLABBásico
MATLABBásico
Agora a = 2, faço tudo de novo?!
MATLABBásico
MATLABBásico
MATLABBásico
MATLABBásico
Char ArrayMatriz
Tipos Básicos
Case Sensitive!
Estrutura
CaSe SeNsItIvE!
MATLABBásico
Criando uma matriz:
MATLABBásico
Criando um “char array”:
MATLABBásico
Estrutura:
turma.alunos.nomes=strvcat( 'carla',’joao','bruno', ...
'luis', 'marcela‘ );
turma.professor.nome=(‘Marcelo‘)
turma.horario=1300
turma.sala=221
Banco de Dados da “Turma”:
Alunos: Carla, João, Bruno, Luis, Marcela
Professor: Marcelo
Horário: 13h
Sala: 221
MATLABBásico
Comando “who” e “whos”
MATLABBásico
Use A=0:0.5:10 para gerar matrizes com dados em seqüência.
Use “;” para evitar que o resultado apareça na tela.
Dicas
!
Use “clear A” para apagar a variável A.
Use “size(A) ” para identificar as dimensões da matriz. A maior
dimensão é dada pelo comando “length(A) ”
Use “clear all” para apagar todas as variáveis armazenadas.
MATLABBásico
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 às regras da álgebra,
pois as dimensões das matrizes têm que ser coerentes!
A * B
A / B
 
iii) Multiplicação e divisão elemento por elemento:
A .* B
A ./ B
MATLABBásico
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)
MATLABBásico
ix) Determinante:
det(matriz)
 
x) Inversa:
inv(matriz)
 
xi) Dimensões da matriz:
size(matriz)
lenght(matriz)
numel(matriz)
Veja também: flipud e fliplr
MATLABBásico
1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16
Elemento = Matriz(2,3) ou Matriz(10)
MATLABBásico
MATLABBásico
A=1
B=2
global C
C=100
Função Alfa
E=15
F=55
C=23
Função Beta
Programa Principal / Workspace
global C
C=100
D=22
MATLABBásico
x=[1 2 3 4 5 6;
2 1 3 3 2 1];
%Forma linear:
xmin=min(x);
xmin=min(xmin);
[i,j]=find(x==xmin);
Achando a posição do menor valor de uma matriz:
%Forma condensada:
[i,j]=find(x==(min(min(x))));
MATLABBásico
X = fzero('sin',2)
Achando o menor valor de uma função:
função estimativa inicial
Veja também: fsolve e fmin
MATLABBásico
if:
MATLABBásico
AND OR
MATLABBásico
Falso Verdadeiro
AND
a b resultado
1 1 1
0 1 0
1 0 0
0 0 0
OR
a b resultado
1 1 1
0 1 1
1 0 1
0 0 0
MATLABBásico
Case:
 
switch I
case 1,
disp('I vale 1')
case 2,
disp('I vale 2')
otherwise
disp('I nao eh nem 1 nem 2')
end
MATLABBásico
  While:
 
while I < 10,
disp(‘oi’);
I=I+1;
end
Manipule o ponteiro I na rotina executada
pelo “while”
MATLABBásico
     For:
 
for J = 1:100,
A(1,J) = 1/(I+J-1);
end
Incremento automático do ponteiro J
a cada loop
MATLABBásico
>> figure(1)
>> t=0:0.01:10;
>> y=sin(t);
>> plot(t,y)
>> figure(2)
>> z=cos(t);
>> plot(t,z)
MATLABBásico
Use “close all” para fechar todas as figuras
Dica!
Use “clf” para apagar a figura atual
Use “[x,y]=ginput(2)” para capturar dois pontos no gráfico
MATLABBásico
>> figure(3)
>> subplot(1,2,1)
>> plot(t,y)
>> subplot(1,2,2)
>> plot(t,z)
MATLABBásico
>> t=0:0.25:10;
>> y=sin(t);
>> plot(t,y,'r+')
>> xlabel('tempo')
>> ylabel('seno')
>> title('Seno vs. Tempo')
>> Axis([0 10 -2 2])
MATLABBásico
>> t=0:0.01:10;
>> y=sin(t);
>> z=cos(t);
>> plot(t,y,'g-',t,z,'r-')
>> legend('seno','cosseno')
Ou...
>> t=0:0.01:10;
>> y=sin(t);
>> z=cos(t);
>> plot(t,y,'g-‘)
>> hold on
>> plot(t,z,'r-')
>> legend('seno','cosseno')
MATLABBásico
MATLABBásico
xx=0:0.01:1;
yy=0:0.01:1;
[X,Y]=meshgrid(xx,yy);
Z=exp(-0.5*(X.^2+Y.^2));
colormap jet
figure(1);surf(X,Y,Z); rotate3d on; shading interp;
MATLABBásico
MATLABBásico
MATLABBásico
%Malha triangular da base
%malha da base
xx=0:0.01:1;
yy=0:0.01:1;
[X,Y]=meshgrid(xx,yy);
Z=1-X-Y;
%aplica a restrição para usar só a base do triangulo
%onde existe consistência física (o que nao tem vira "Not a Number")
iz=find(Z<0);Z(iz)=nan;
MATLABBásico
%Malha triangular da base
%malha da base
xx=0:0.01:1;
yy=0:0.01:1;
[X,Y]=meshgrid(xx,yy);
Z=1-X-Y;
%aplica a restrição para usar só a base do triangulo
%onde existe consistência física (o que não tem vira "Not a Number")
iz=find(Z<0);Z(iz)=nan;
Composição
(3 componentes)
MATLABBásico
%Malha triangular da base
%malha da base
xx=0:0.01:1;
yy=0:0.01:1;
[X,Y]=meshgrid(xx,yy);
Z=1-X-Y;
%aplica a restrição para usar só a base do triangulo
%onde existe consistência física (o que não tem vira "Not a Number")
iz=find(Z<0);Z(iz)=nan;
Alguns Z são
negativos! Não pode!
MATLABBásico
vv1=(X.*log(X))+(Y.*log(Y))+(Z.*log(Z));
%gráfico da superfície
colormap jet
figure(1);surf(X,Y,vv1); rotate3d on; shading interp;
xlabel('X1');ylabel('X2');zlabel('DeltaGi/RT');
MATLABBásico
MATLABBásico
Exemplos
MATLABBásico
Exemplo
1
MATLABBásico
Modelagem & Dinâmica de Processos
Exemplo 1:
Modelos simples - o tanque de nível
1
h
FE
F
A
h
FE
F
A
h
FE
F
A
Considerando constantes a vazão de alimentação FE, a
densidade ρ e a temperatura T, e que o sistema está sujeito à
condição inicial:
( ) 00 hth == (1)
MATLABBásico
Modelagem & Dinâmica de Processos
Modelos simples - o tanque de nível
pode-se escrever o balanço de massa do sistema
1
( ) ( )FF
dt
tdm
E −=ρ
( ) ( )
dt
tdh
A
dt
tdm
ρ=
( ) ( )FF
Adt
tdh
E −=
1
Ainda,
e, portanto,
(2)
(3)
(4)
MATLABBásico
Modelagem & Dinâmica de Processos
Modelos simples - o tanque de nível
Freqüentemente, considera-se a vazão de saída do tanque
proporcional à altura da coluna de líquido é inversamente
proporcional a uma resistência ao escoamento (R):
1
R
h
F =
( ) 





−=
R
h
F
Adt
tdh
E
1
Logo,
(5)
(6)
MATLABBásico
Modelagem & Dinâmica de Processos
Modelos simples - o tanque de nível
Este modelo simples de um tanque de nível, sem balanço de
energia, possui uma solução analítica:
1
( ) 







−=
−
RA
t
E eRFth 1
Para simular este modelo, basta escolher os valores das
constantes R, A e FE, das condições iniciais h0 e t0.
A simulação da solução analítica do modelo do tanque de
nível é mostrada a seguir.
(7)
MATLABBásico
% 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)');
MATLABBásico
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.
Dica!
MATLABBásico
Exemplo
2
MATLABBásico
Muitas vezes é muito trabalhoso, ou mesmo 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. A
equação diferencial será:
Modelagem & Dinâmica de Processos
Modelos simples - o tanque de nível
Freqüentemente, considera-se a vazão de saída do tanque
proporcional à altura da coluna de líquido é inversamente
proporcional a uma resistência ao escoamento (R):
1
R
h
F =
( ) 





−=
R
h
F
Adt
tdh
E
1
Logo,
(5)
(6)
MATLABBásico
% 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)');
function dh = dhdt(t,h,flag,par)
R = par(1);
A = par(2);
Fe = par(3);
dh = (Fe-(h/R))/A;
MATLABBásico
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]);
MATLABBásico
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.
MATLABBásico
-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 dhdt.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).
MATLABBásico
A codificação do arquivo .m segue o mesmo formato já explicado para
funções porém com algumas particularidades.
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.
MATLABBásico
Exemplo
3
MATLABBásico
Modelagem & Dinâmica de Processos
Exemplo 3
Tanque de aquecimento
1
h
FE ,TE
F , T
A
Th
Th
h
FE ,TE
F , T
A
Th
Th
Considerando constantes a vazão de alimentação FE, a
temperatura Th, o coeficiente global de transferência de calor U e
as propriedades do fluido ρ e Cp e que o sistema está sujeito às
condições iniciais:
( ) 00 hth == ( ) 00 TtT ==
MATLABBásico
Modelagem & Dinâmica de Processos
Modelos simples - tanque de aquecimento
Como no caso anterior, o balanço de massa pode ser escrito
como :
1
( ) 





−=
R
h
F
Adt
tdh
E
1
(6)
O balanço de energia é escrito como:
( ) ( ) QFHHF
dt
VTd
C EEp +−=ρρ (8)
Modelagem & Dinâmica de Processos
Modelos simples - tanque de aquecimento
1
( ) 





+=+=
dt
dh
T
dt
dT
hA
dt
dV
T
dt
dT
V
dt
VTd
(9)
( ) QFHHF
R
h
F
A
T
dt
dT
hAC EEEp +−=











−+ ρρ (10)
















+−








+=
p
E
p
hEE
C
U
A
F
T
C
UT
A
TF
hdt
dT
ρρ
1
(11)
MATLABBásico
Matlab Real
dy(1) dh/dt
y(1) h
dy(2) dT/dt
y(2) T
Traduzindo as equações diferenciais para o Matlab:
MATLABBásico
% 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]);
 
MATLABBásico
 % 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)');
MATLABBásico
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]);
MATLABBásico
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)))...
- ( y(2)*((Fe/A)+(U/(Ro*Cp)))) );
dy = dy(:);
MATLABBásico
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!
MATLABBásico
figure(1);
plot(t,y(:,1));
title('Tanque de aquecimento');
xlabel('Tempo (h)');
ylabel('Altura (m)');
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:
Dica!
MATLABBásico
Exemplo
4
MATLABBásico
Na compra de uma calculadora gráfica, a loja ofereceu duas propostas de
financiamento – proposta A e B. A proposta A é composta por 7 parcelas mensais
iguais de 114 reais cada. Já a proposta B prevê 10 parcelas mensais iguais de 98 reais
cada. Qual é a melhor opção de compra considerando a taxa de juros oferecida em
investimentos denominados “renda fixa”?
A princípio poderia resolver o problema simplesmente multiplicado 114 x 7 e 10 x
98, achando o valor final pago. Os valores encontrados seriam 798 e 980. Logo, a
Proposta A parece mais favorável para o comprador.
É importante lembrar, porém, que essa forma de resolução não considera que o
dinheiro desvaloriza-se ao longo dos meses. Ou seja, o poder de compra de 100 reais
hoje, é superior ao poder de compra de 100 reais daqui a 10 meses. Outra forma de
pensar é considerar o “custo de oportunidade” – a taxa de retorno livre de que
conseguiria para o meu dinheiro caso, ao invés de pagar agora, investisse. De uma
forma ou de outra o que precisamos é do VALOR PRESENTE (VP) de cada série de
pagamentos, sendo os pagamentos descontados a dada taxa de juros. Para trazer
VALOR FUTURO (VF) para valor presente usa-se a fórmula:
VP = VF / ( 1 + i )n
Onde “i” é a taxa de juros mensal e “n” o número de meses entre o VF e o VP.
MATLABBásico
MATLABBásico
clc
close all
clear all
 
ivetor=0:0.01:0.50;
 
VPvetor114=[];
VPvetor98=[];
 
prompt{1}='Número de meses do pagamento da serie A:';
prompt{2}='Número de meses do pagamento da serie B:';
prompt{3}='Valor de cada parcela da serie A:';
prompt{4}='Valor de cada parcela da serie B:';
resposta=inputdlg(prompt,'Calculo da taxa de equilibrio');
nummeses114=str2num(char(resposta(1)));
nummeses98=str2num(char(resposta(2)));
v114=str2num(char(resposta(3)));
v98=str2num(char(resposta(4)));
MATLABBásico
for J = 1:length(ivetor),
i=ivetor(J);
VP=[];
for K = 1:nummeses114,
VP(K)=v114/(1+i)^K;
end
VPfinal=sum(VP);
VPvetor114=[VPvetor114, VPfinal];
VP=[];
for K = 1:nummeses98,
VP(K)=v98/(1+i)^K;
end
VPfinal=sum(VP);
VPvetor98=[VPvetor98, VPfinal];
end
MATLABBásico
plot(ivetor*100,VPvetor114,'-b')
hold on
plot(ivetor*100,VPvetor98,'-r')
title('Valor presente das parcelas a serem pagas')
legend( [ num2str(nummeses114), ' parc de ', num2str(v114) ,' reais cada'] , ...
[ num2str(nummeses98), ' parc de ', num2str(v98) ,' reais cada' ] )
xlabel('Taxa de juros mensal')
ylabel('Valor presente em Reais')
if (VPvetor114(1)<VPvetor98(1)),
posicoes=VPvetor114<VPvetor98;
achaZero=find(posicoes==0);
achaPrimeiroZero=min(achaZero);
plot(100*ivetor(achaPrimeiroZero),VPvetor114(achaPrimeiroZero),'ok')
else
posicoes=VPvetor98<VPvetor114;
achaZero=find(posicoes==0);
achaPrimeiroZero=min(achaZero);
plot(100*ivetor(achaPrimeiroZero),VPvetor114(achaPrimeiroZero),'ok')
end
text(100*ivetor(achaPrimeiroZero),50+VPvetor114(achaPrimeiroZero), ...
['Juros de equilibrio (a.m.) = ',num2str(100*ivetor(achaPrimeiroZero)),' %'] )
MATLABBásico
Exemplo
5
MATLABBásico
Determinado processo possui função custo definida pela equação:
 
Y=((x-3)2
)-6
 
 
É necessário encontrar x que minimize o valor de Y. Não é difícil de visualizar
que a solução do problema é fazer x=3, de modo a levar Y um mínimo (-6). Mesmo
sabendo previamente a solução, vamos resolver através do MATLAB. Utilizamos
então a função “fminsearch”.
MATLABBásico
%Calculo do valor de x que minimiza a funcao custo
xmin = fminsearch('((x-3).^2)-6', 4)
 
%Gráfico da funcao custo
x=0:0.01:5;
y=((x-3).^2)-6;
plot(x,y);
hold on
 
%Marca o ponto de minimo:
ymin=((xmin-3).^2)-6;
plot(xmin, ymin,'or')
MATLABBásico
Ou...
MATLABBásico
%Calculo do valor de x que minimiza a funcao custo
 
%Gráfico da funcao custo
x=0:0.01:5;
y=((x-3).^2)-6;
plot(x,y);
hold on
drawnow
 
xmin = fminsearch('custo', 4)
 
%Marca o ponto de minimo:
ymin=((xmin-3).^2)-6;
plot(xmin, ymin,'or')
function [y] = custo(x)
 
y=((x-3).^2)-6;
 
plot(x, y,'ob')
hold on
pause(0.1)
MATLABBásico
Exemplo
6
MATLABBásico
Quando ajustamos uma curva a um conjunto de pontos experimentais, estamos minimizando a
distância entre a curva e os dados. Definindo essa distância como “erro”, estamos manipulando os
parâmetros que definem a curva de modo a minimizar o erro. Nesse caso “erro” é a minha “função
objetivo” a ser minimizada. É através dessa ótica que se torna possível usar “fminsearch” para
encontrar o valor ótimo dos parâmetros de ajuste de uma curva aos dados experimentais.
global yexp xexp
 
%pontos experimentais
yexp=[1.1 2.12 2.85 4.4 5.0 6.5];
xexp=[1 2 3 4 5 6];
 
Parametros = fminsearch('custo',[1,2]);
MATLABBásico
function [saida] = custo(x)
global yexp xexp
 
a=x(1);
b=x(2);
 
yteo=a.*xexp + b; %calcula o valor teorico
%para cada pto experimental
 
yerro=abs(yexp-yteo); %calculo do erro
saida=sum(yerro);
 
plot(xexp,yexp,'r*',xexp,yteo,'b-')
drawnow
pause(0.3)
MATLABBásico
Exemplo
7
MATLABBásico
MATLABBásico
As equações diferenciais que descrevem
o processo são:
O modelo matemático do nosso reator CSTR tende ao estado
estacionário. Ou seja, seus parâmetros tendem a ficar constantes no
tempo infinito. Seria interessante introduzir perturbações em algumas
variáveis e observar como o reator se comporta.
MATLABBásico
Uma perturbação degrau em uma entrada u do sistema é
tal que:
 
u = u0 , t < tdegrau
u = u0 + du, t > tdegrau
 
Ou seja: antes do degrau a entrada u vale u0. Após o tempo
determinado para que o degrau ocorra (tdegrau) temos que u passa a
valer u0 + du.
MATLABBásico
% Definição das constantes do modelo
U =50; % BTU/(h.ft2.R)
A = 120; % ft2
DH = -30000; % BTU/lbm
Ro = 50; % lb/ft3
Cp = 0.75; % BTU/(lbm.R)
E = 30000; % BTU/lbm R = 1.99; % BTU/(lbm.R)
k0 = 7.08e10; % 1/h V =48; % ft3
Te = 580; %R Th = 550; %R
Fe = 18; % ft3/h Cre = 0.48; % lbm/ft3
 
% Tempo de simulação
t = 0.0 : 0.01 : 10.0; %h
 
% Perturbação na vazão de entrada
td = 5.0; %Tempo onde ocorre o degrau
fd = 2*Fe; %Valor assumido após o degrau
Programa principal:
continua...
MATLABBásico
% Condições iniciais
Cr0 = 0.16; % lbm/ft3
T0 = 603; %R
 % Simulação do modelo
[t,y] = ode45('dcstrdeg',t,[Cr0 T0],[],[U A DH Ro Cp E R k0 V Te Th …
Fe Cre],[td fd]);
% Visualização da simulação
figure(1);
plot(t,y(:,1)); title('CSTR com Reação Exotérmica');
xlabel('Tempo (h)'); ylabel('Concentração de Reagente (lbm/ft3)');
figure(2);
plot(t,y(:,2)); title('CSTR com Reação Exotérmica');
xlabel('Tempo (h)'); ylabel('Temperatura (R)');
Programa principal (continuação):
MATLABBásico
function dy = dcstrdeg(t,y,flag,par,deg);
 
U = par(1); A = par(2);
DH = par(3); Ro = par(4);
Cp = par(5); E = par(6);
R = par(7); k0 = par(8);
V = par(9); Te = par(10);
Th = par(11);
 
Função “dcstrdeg”:
continua...
MATLABBásico
%Verifica a ocorrência de degrau:
if t >= deg(1)
Fe = deg(2);
else
Fe = par(12);
end;
 Cre = par(13);
 dy(1) = (Fe/V)*(Cre-y(1)) - k0*exp(-E/(R*y(2)))*y(1);
dy(2) = (Fe/V)*(Te-y(2)) + ((DH*k0*exp(-E/(R*y(2)))*y(1))/(Ro*Cp)) - ...
(U*A*(y(2)-Th)/(V*Ro*Cp));
dy = dy(:);
Função “dcstrdeg” (continuação):
MATLABBásico
Exemplo
8
MATLABBásico
Uma das grandes vantagens no uso de ferramentas computacionais
é reduzir o nosso esforço repetitivo, tarefa para a qual o computador
é muito eficiente. Supomos que temos um processo no qual
gostaríamos de testar uma série de condições iniciais. Para cada
nova condição inicial teríamos de refazer todas as contas. Um
esforço enorme! As linguagens de programação, e o Matlab em
particular, resolvem esse problema facilmente usando o já
apresentado comando “for”.
Usaremos o mesmo reator CSTR do exemplo anterior.
MATLABBásico
% Definição das constantes do modelo
U =50; % BTU/(h.ft2.R)
A = 120; % ft2
DH = -30000; % BTU/lbm
Ro = 50; % lb/ft3
Cp = 0.75; % BTU/(lbm.R)
E = 30000; % BTU/lbm R = 1.99; % BTU/(lbm.R)
k0 = 7.08e10; % 1/h V =48; % ft3
Te = 580; %R Th = 550; %R
Fe = 18; % ft3/h Cre = 0.48; % lbm/ft3
 
% Tempo de simulação
t = 0.0 : 0.01 : 10.0; %h
 
% Condições iniciais
Cr0 = [0.16 0.32 0.48 0.64]; % lbm/ft3
T0 = 603; %R
Programa principal:
continua...
MATLABBásico
% Simulação e visualização do modelo em batelada
cor = 'brmk';
leg = ['Cr0=0.16'; 'Cr0=0.32'; 'Cr0=0.48'; 'Cr0=0.64'];
for aux = 1 : length(Cr0)
[t,y] = ode45('dcstr',t,[Cr0(aux) T0],[], [U A DH Ro Cp E R k0 V…
Te Th Fe Cre]);
% Visualização da simulação
figure(1); hold on;
plot(t,y(:,1),cor(aux)); title('CSTR com Reação Exotérmica');
xlabel('Tempo (h)');
ylabel('Concentração de Reagente (lbm/ft3)');
figure(2); hold on;
plot(t,y(:,2),cor(aux)); title('CSTR com Reação Exotérmica');
xlabel('Tempo (h)');
ylabel('Temperatura (R)');
end;
 
Programa principal (continuação):
continua...
MATLABBásico
figure(1); legend(leg);
figure(2); legend(leg);
hold off;
Programa principal (continuação):
A seqüência de cores usadas é dada pelo vetor
“cor”, “letra a letra” através da flag. Consulte o
comando “plot” para detalhes.
Dica!
MATLABBásico
Carlos André Vaz Junior
cavazjunior@gmail.com
http://www.eq.ufrj.br/links/h2cin/carlosandre

Weitere ähnliche Inhalte

Was ist angesagt?

Análise da complexidade de algoritmos
Análise da complexidade de algoritmosAnálise da complexidade de algoritmos
Análise da complexidade de algoritmosPablo Silva
 
Aula 01 introdução a linguagem pascal
Aula 01   introdução a linguagem pascalAula 01   introdução a linguagem pascal
Aula 01 introdução a linguagem pascalTácito Graça
 
Exemplos registros e funções
Exemplos registros e funçõesExemplos registros e funções
Exemplos registros e funçõesCarla Lee
 
Aula 03 estrutura de seleção
Aula 03   estrutura de seleçãoAula 03   estrutura de seleção
Aula 03 estrutura de seleçãoTácito Graça
 
Linguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesLinguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesElaine Cecília Gatto
 
Pseudocódigo ou Portugol (Lógica de Programação)
Pseudocódigo ou Portugol (Lógica de Programação)Pseudocódigo ou Portugol (Lógica de Programação)
Pseudocódigo ou Portugol (Lógica de Programação)Gercélia Ramos
 
Comandos de pascal e estrutura de repetição (para...fazer)
Comandos de pascal e estrutura de repetição (para...fazer)Comandos de pascal e estrutura de repetição (para...fazer)
Comandos de pascal e estrutura de repetição (para...fazer)111111119
 
Logica Algoritmo 05 Repeticao
Logica Algoritmo 05 RepeticaoLogica Algoritmo 05 Repeticao
Logica Algoritmo 05 RepeticaoRegis Magalhães
 
Tutorial aed iii 008 - algoritmo de ordenação heapsort
Tutorial aed iii   008 - algoritmo de ordenação heapsortTutorial aed iii   008 - algoritmo de ordenação heapsort
Tutorial aed iii 008 - algoritmo de ordenação heapsortFlávio Freitas
 
Tutorial aed iii 007 - algoritmo de ordenação heapsort
Tutorial aed iii   007 - algoritmo de ordenação heapsortTutorial aed iii   007 - algoritmo de ordenação heapsort
Tutorial aed iii 007 - algoritmo de ordenação heapsortFlávio Freitas
 
Tutorial aed iii 009 - algoritmo de ordenação heapsort
Tutorial aed iii   009 - algoritmo de ordenação heapsortTutorial aed iii   009 - algoritmo de ordenação heapsort
Tutorial aed iii 009 - algoritmo de ordenação heapsortFlávio Freitas
 

Was ist angesagt? (20)

Apostila derivadas
Apostila derivadasApostila derivadas
Apostila derivadas
 
Análise da complexidade de algoritmos
Análise da complexidade de algoritmosAnálise da complexidade de algoritmos
Análise da complexidade de algoritmos
 
Modulo 4
Modulo 4Modulo 4
Modulo 4
 
Aula 01 introdução a linguagem pascal
Aula 01   introdução a linguagem pascalAula 01   introdução a linguagem pascal
Aula 01 introdução a linguagem pascal
 
Exemplos registros e funções
Exemplos registros e funçõesExemplos registros e funções
Exemplos registros e funções
 
C++
C++C++
C++
 
Aula 03 estrutura de seleção
Aula 03   estrutura de seleçãoAula 03   estrutura de seleção
Aula 03 estrutura de seleção
 
Linguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesLinguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e Funções
 
Aula de C e C++
Aula de C e C++Aula de C e C++
Aula de C e C++
 
Construcao de Algoritmos - Aula 10
Construcao de Algoritmos - Aula 10Construcao de Algoritmos - Aula 10
Construcao de Algoritmos - Aula 10
 
Modulo 6
Modulo 6Modulo 6
Modulo 6
 
Pseudocódigo ou Portugol (Lógica de Programação)
Pseudocódigo ou Portugol (Lógica de Programação)Pseudocódigo ou Portugol (Lógica de Programação)
Pseudocódigo ou Portugol (Lógica de Programação)
 
Java4
Java4Java4
Java4
 
Comandos de pascal e estrutura de repetição (para...fazer)
Comandos de pascal e estrutura de repetição (para...fazer)Comandos de pascal e estrutura de repetição (para...fazer)
Comandos de pascal e estrutura de repetição (para...fazer)
 
Logica Algoritmo 05 Repeticao
Logica Algoritmo 05 RepeticaoLogica Algoritmo 05 Repeticao
Logica Algoritmo 05 Repeticao
 
Tutorial aed iii 008 - algoritmo de ordenação heapsort
Tutorial aed iii   008 - algoritmo de ordenação heapsortTutorial aed iii   008 - algoritmo de ordenação heapsort
Tutorial aed iii 008 - algoritmo de ordenação heapsort
 
Tutorial
TutorialTutorial
Tutorial
 
Visualg
VisualgVisualg
Visualg
 
Tutorial aed iii 007 - algoritmo de ordenação heapsort
Tutorial aed iii   007 - algoritmo de ordenação heapsortTutorial aed iii   007 - algoritmo de ordenação heapsort
Tutorial aed iii 007 - algoritmo de ordenação heapsort
 
Tutorial aed iii 009 - algoritmo de ordenação heapsort
Tutorial aed iii   009 - algoritmo de ordenação heapsortTutorial aed iii   009 - algoritmo de ordenação heapsort
Tutorial aed iii 009 - algoritmo de ordenação heapsort
 

Andere mochten auch

Prospect DOCTER®nightvision 1x24 | Optics Trade | 2009
Prospect DOCTER®nightvision 1x24 | Optics Trade | 2009Prospect DOCTER®nightvision 1x24 | Optics Trade | 2009
Prospect DOCTER®nightvision 1x24 | Optics Trade | 2009Optics-Trade
 
spotlight ON MARKETING: Writing Customer Stories
spotlight ON MARKETING: Writing Customer Storiesspotlight ON MARKETING: Writing Customer Stories
spotlight ON MARKETING: Writing Customer StoriesThe Dwyer Group
 
Presentacion led channel 2010
Presentacion led channel 2010Presentacion led channel 2010
Presentacion led channel 2010Rafael Bermudez
 
Tutoriais para criação e edição de gráficos no r
Tutoriais para criação e edição de gráficos no rTutoriais para criação e edição de gráficos no r
Tutoriais para criação e edição de gráficos no rAna Maria Souza
 
Portofolio Architecture
Portofolio ArchitecturePortofolio Architecture
Portofolio ArchitectureTatamatra
 
CAMPANHA PRIMAVERA VERÃO - GALERIAS ANGRA
CAMPANHA PRIMAVERA VERÃO - GALERIAS ANGRACAMPANHA PRIMAVERA VERÃO - GALERIAS ANGRA
CAMPANHA PRIMAVERA VERÃO - GALERIAS ANGRAGALERIASANGRA
 
Soccer Analytics - After 10 Games
Soccer Analytics - After 10 GamesSoccer Analytics - After 10 Games
Soccer Analytics - After 10 Gamespjaumann
 
Iluminar Teclas Edl Techo
Iluminar Teclas Edl TechoIluminar Teclas Edl Techo
Iluminar Teclas Edl Techomitxe
 
Coop Weinmesse Luzern und Stansstad - das Sortiment
Coop Weinmesse Luzern und Stansstad - das SortimentCoop Weinmesse Luzern und Stansstad - das Sortiment
Coop Weinmesse Luzern und Stansstad - das SortimentMartin Zaugg
 
Comman presentation
Comman presentationComman presentation
Comman presentationyatradham
 
Suporte para tv lcd led plasma e convencional na Cirilo Cabos
Suporte para tv lcd led plasma e convencional na Cirilo CabosSuporte para tv lcd led plasma e convencional na Cirilo Cabos
Suporte para tv lcd led plasma e convencional na Cirilo CabosCirilo Cabos
 

Andere mochten auch (19)

Prospect DOCTER®nightvision 1x24 | Optics Trade | 2009
Prospect DOCTER®nightvision 1x24 | Optics Trade | 2009Prospect DOCTER®nightvision 1x24 | Optics Trade | 2009
Prospect DOCTER®nightvision 1x24 | Optics Trade | 2009
 
spotlight ON MARKETING: Writing Customer Stories
spotlight ON MARKETING: Writing Customer Storiesspotlight ON MARKETING: Writing Customer Stories
spotlight ON MARKETING: Writing Customer Stories
 
Catálogo de Bombillas FARO 2015 - ILUMINABLE
Catálogo de Bombillas FARO 2015 - ILUMINABLECatálogo de Bombillas FARO 2015 - ILUMINABLE
Catálogo de Bombillas FARO 2015 - ILUMINABLE
 
Manual electrolux horno eob3430cox
Manual electrolux   horno eob3430coxManual electrolux   horno eob3430cox
Manual electrolux horno eob3430cox
 
Presentacion led channel 2010
Presentacion led channel 2010Presentacion led channel 2010
Presentacion led channel 2010
 
Ds gryphonigbt4100
Ds gryphonigbt4100Ds gryphonigbt4100
Ds gryphonigbt4100
 
Tutoriais para criação e edição de gráficos no r
Tutoriais para criação e edição de gráficos no rTutoriais para criação e edição de gráficos no r
Tutoriais para criação e edição de gráficos no r
 
Portofolio Architecture
Portofolio ArchitecturePortofolio Architecture
Portofolio Architecture
 
Seminario 5
Seminario 5Seminario 5
Seminario 5
 
CAMPANHA PRIMAVERA VERÃO - GALERIAS ANGRA
CAMPANHA PRIMAVERA VERÃO - GALERIAS ANGRACAMPANHA PRIMAVERA VERÃO - GALERIAS ANGRA
CAMPANHA PRIMAVERA VERÃO - GALERIAS ANGRA
 
Soccer Analytics - After 10 Games
Soccer Analytics - After 10 GamesSoccer Analytics - After 10 Games
Soccer Analytics - After 10 Games
 
Ventiladores de Techo Faro 2015 - ILUMINABLE.COM
Ventiladores de Techo Faro 2015 - ILUMINABLE.COMVentiladores de Techo Faro 2015 - ILUMINABLE.COM
Ventiladores de Techo Faro 2015 - ILUMINABLE.COM
 
(2) Curso sobre el software estadístico R: La librería googleVis
(2) Curso sobre el software estadístico R: La librería googleVis(2) Curso sobre el software estadístico R: La librería googleVis
(2) Curso sobre el software estadístico R: La librería googleVis
 
Iluminar Teclas Edl Techo
Iluminar Teclas Edl TechoIluminar Teclas Edl Techo
Iluminar Teclas Edl Techo
 
Coop Weinmesse Luzern und Stansstad - das Sortiment
Coop Weinmesse Luzern und Stansstad - das SortimentCoop Weinmesse Luzern und Stansstad - das Sortiment
Coop Weinmesse Luzern und Stansstad - das Sortiment
 
Ds GD4100
Ds GD4100Ds GD4100
Ds GD4100
 
Comman presentation
Comman presentationComman presentation
Comman presentation
 
Pres 001
Pres 001Pres 001
Pres 001
 
Suporte para tv lcd led plasma e convencional na Cirilo Cabos
Suporte para tv lcd led plasma e convencional na Cirilo CabosSuporte para tv lcd led plasma e convencional na Cirilo Cabos
Suporte para tv lcd led plasma e convencional na Cirilo Cabos
 

Ähnlich wie Matlab

Curso Básico de Java - Aula 10
Curso Básico de Java - Aula 10Curso Básico de Java - Aula 10
Curso Básico de Java - Aula 10PeslPinguim
 
Controle con matlab - material adicional 1.pdf
Controle con matlab - material adicional 1.pdfControle con matlab - material adicional 1.pdf
Controle con matlab - material adicional 1.pdfCarlosAlexisAlvarado4
 
Aula6 programação
Aula6 programaçãoAula6 programação
Aula6 programaçãoIFPB
 
O que é logaritmo matematica
O que é logaritmo matematicaO que é logaritmo matematica
O que é logaritmo matematicagustavo-516
 
Regressão Múltipla
Regressão MúltiplaRegressão Múltipla
Regressão MúltiplaFelipe Pontes
 
Aula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.pptAula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.pptssuserd654cb1
 
Aula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).pptAula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).pptssuserd654cb1
 
Curso de Matlab avancado 1
Curso de Matlab avancado 1Curso de Matlab avancado 1
Curso de Matlab avancado 1Gabriel Costa
 
Aula 9 - Resultado Operandos Matemáticos, Operadores Aritmeticos, Relacionais...
Aula 9 - Resultado Operandos Matemáticos, Operadores Aritmeticos, Relacionais...Aula 9 - Resultado Operandos Matemáticos, Operadores Aritmeticos, Relacionais...
Aula 9 - Resultado Operandos Matemáticos, Operadores Aritmeticos, Relacionais...André Constantino da Silva
 
Matlab – curso básico (1)
Matlab – curso básico (1)Matlab – curso básico (1)
Matlab – curso básico (1)Felipe Meganha
 
Capítulo 06 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 06 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Capítulo 06 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 06 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Os Fantasmas !
 
5 expressoes logicas - operadores - base binaria - operadores de bits
5   expressoes logicas - operadores - base binaria - operadores de bits5   expressoes logicas - operadores - base binaria - operadores de bits
5 expressoes logicas - operadores - base binaria - operadores de bitsRicardo Bolanho
 

Ähnlich wie Matlab (20)

Curso Básico de Java - Aula 10
Curso Básico de Java - Aula 10Curso Básico de Java - Aula 10
Curso Básico de Java - Aula 10
 
10-Matlab.pdf
10-Matlab.pdf10-Matlab.pdf
10-Matlab.pdf
 
Matlab1
Matlab1Matlab1
Matlab1
 
apostila matlab
apostila matlabapostila matlab
apostila matlab
 
Controle con matlab - material adicional 1.pdf
Controle con matlab - material adicional 1.pdfControle con matlab - material adicional 1.pdf
Controle con matlab - material adicional 1.pdf
 
Aula6 programação
Aula6 programaçãoAula6 programação
Aula6 programação
 
Math
MathMath
Math
 
O que é logaritmo matematica
O que é logaritmo matematicaO que é logaritmo matematica
O que é logaritmo matematica
 
Map, filter e reduce
Map, filter e reduceMap, filter e reduce
Map, filter e reduce
 
Complexidade algoritmos
Complexidade algoritmosComplexidade algoritmos
Complexidade algoritmos
 
Regressão Múltipla
Regressão MúltiplaRegressão Múltipla
Regressão Múltipla
 
Manual lindo 6.1
Manual lindo 6.1Manual lindo 6.1
Manual lindo 6.1
 
Tutorial matlab
Tutorial matlabTutorial matlab
Tutorial matlab
 
Aula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.pptAula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.ppt
 
Aula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).pptAula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).ppt
 
Curso de Matlab avancado 1
Curso de Matlab avancado 1Curso de Matlab avancado 1
Curso de Matlab avancado 1
 
Aula 9 - Resultado Operandos Matemáticos, Operadores Aritmeticos, Relacionais...
Aula 9 - Resultado Operandos Matemáticos, Operadores Aritmeticos, Relacionais...Aula 9 - Resultado Operandos Matemáticos, Operadores Aritmeticos, Relacionais...
Aula 9 - Resultado Operandos Matemáticos, Operadores Aritmeticos, Relacionais...
 
Matlab – curso básico (1)
Matlab – curso básico (1)Matlab – curso básico (1)
Matlab – curso básico (1)
 
Capítulo 06 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 06 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Capítulo 06 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 06 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
 
5 expressoes logicas - operadores - base binaria - operadores de bits
5   expressoes logicas - operadores - base binaria - operadores de bits5   expressoes logicas - operadores - base binaria - operadores de bits
5 expressoes logicas - operadores - base binaria - operadores de bits
 

Matlab

  • 1. MATLABBásico Carlos André Vaz Junior cavazjunior@gmail.com http://www.eq.ufrj.br/links/h2cin/carlosandre
  • 2. MATLABBásico Mais de 1 milhão de resultados
  • 8. MATLABBásico Agora a = 2, faço tudo de novo?!
  • 12. MATLABBásico Char ArrayMatriz Tipos Básicos Case Sensitive! Estrutura CaSe SeNsItIvE!
  • 15. MATLABBásico Estrutura: turma.alunos.nomes=strvcat( 'carla',’joao','bruno', ... 'luis', 'marcela‘ ); turma.professor.nome=(‘Marcelo‘) turma.horario=1300 turma.sala=221 Banco de Dados da “Turma”: Alunos: Carla, João, Bruno, Luis, Marcela Professor: Marcelo Horário: 13h Sala: 221
  • 17. MATLABBásico Use A=0:0.5:10 para gerar matrizes com dados em seqüência. Use “;” para evitar que o resultado apareça na tela. Dicas ! Use “clear A” para apagar a variável A. Use “size(A) ” para identificar as dimensões da matriz. A maior dimensão é dada pelo comando “length(A) ” Use “clear all” para apagar todas as variáveis armazenadas.
  • 18. MATLABBásico 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 às regras da álgebra, pois as dimensões das matrizes têm que ser coerentes! A * B A / B   iii) Multiplicação e divisão elemento por elemento: A .* B A ./ B
  • 19. MATLABBásico 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)
  • 20. MATLABBásico ix) Determinante: det(matriz)   x) Inversa: inv(matriz)   xi) Dimensões da matriz: size(matriz) lenght(matriz) numel(matriz) Veja também: flipud e fliplr
  • 21. MATLABBásico 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16 Elemento = Matriz(2,3) ou Matriz(10)
  • 23. MATLABBásico A=1 B=2 global C C=100 Função Alfa E=15 F=55 C=23 Função Beta Programa Principal / Workspace global C C=100 D=22
  • 24. MATLABBásico x=[1 2 3 4 5 6; 2 1 3 3 2 1]; %Forma linear: xmin=min(x); xmin=min(xmin); [i,j]=find(x==xmin); Achando a posição do menor valor de uma matriz: %Forma condensada: [i,j]=find(x==(min(min(x))));
  • 25. MATLABBásico X = fzero('sin',2) Achando o menor valor de uma função: função estimativa inicial Veja também: fsolve e fmin
  • 28. MATLABBásico Falso Verdadeiro AND a b resultado 1 1 1 0 1 0 1 0 0 0 0 0 OR a b resultado 1 1 1 0 1 1 1 0 1 0 0 0
  • 29. MATLABBásico Case:   switch I case 1, disp('I vale 1') case 2, disp('I vale 2') otherwise disp('I nao eh nem 1 nem 2') end
  • 30. MATLABBásico   While:   while I < 10, disp(‘oi’); I=I+1; end Manipule o ponteiro I na rotina executada pelo “while”
  • 31. MATLABBásico      For:   for J = 1:100, A(1,J) = 1/(I+J-1); end Incremento automático do ponteiro J a cada loop
  • 32. MATLABBásico >> figure(1) >> t=0:0.01:10; >> y=sin(t); >> plot(t,y) >> figure(2) >> z=cos(t); >> plot(t,z)
  • 33. MATLABBásico Use “close all” para fechar todas as figuras Dica! Use “clf” para apagar a figura atual Use “[x,y]=ginput(2)” para capturar dois pontos no gráfico
  • 34. MATLABBásico >> figure(3) >> subplot(1,2,1) >> plot(t,y) >> subplot(1,2,2) >> plot(t,z)
  • 35. MATLABBásico >> t=0:0.25:10; >> y=sin(t); >> plot(t,y,'r+') >> xlabel('tempo') >> ylabel('seno') >> title('Seno vs. Tempo') >> Axis([0 10 -2 2])
  • 36. MATLABBásico >> t=0:0.01:10; >> y=sin(t); >> z=cos(t); >> plot(t,y,'g-',t,z,'r-') >> legend('seno','cosseno') Ou... >> t=0:0.01:10; >> y=sin(t); >> z=cos(t); >> plot(t,y,'g-‘) >> hold on >> plot(t,z,'r-') >> legend('seno','cosseno')
  • 41. MATLABBásico %Malha triangular da base %malha da base xx=0:0.01:1; yy=0:0.01:1; [X,Y]=meshgrid(xx,yy); Z=1-X-Y; %aplica a restrição para usar só a base do triangulo %onde existe consistência física (o que nao tem vira "Not a Number") iz=find(Z<0);Z(iz)=nan;
  • 42. MATLABBásico %Malha triangular da base %malha da base xx=0:0.01:1; yy=0:0.01:1; [X,Y]=meshgrid(xx,yy); Z=1-X-Y; %aplica a restrição para usar só a base do triangulo %onde existe consistência física (o que não tem vira "Not a Number") iz=find(Z<0);Z(iz)=nan; Composição (3 componentes)
  • 43. MATLABBásico %Malha triangular da base %malha da base xx=0:0.01:1; yy=0:0.01:1; [X,Y]=meshgrid(xx,yy); Z=1-X-Y; %aplica a restrição para usar só a base do triangulo %onde existe consistência física (o que não tem vira "Not a Number") iz=find(Z<0);Z(iz)=nan; Alguns Z são negativos! Não pode!
  • 44. MATLABBásico vv1=(X.*log(X))+(Y.*log(Y))+(Z.*log(Z)); %gráfico da superfície colormap jet figure(1);surf(X,Y,vv1); rotate3d on; shading interp; xlabel('X1');ylabel('X2');zlabel('DeltaGi/RT');
  • 48. MATLABBásico Modelagem & Dinâmica de Processos Exemplo 1: Modelos simples - o tanque de nível 1 h FE F A h FE F A h FE F A Considerando constantes a vazão de alimentação FE, a densidade ρ e a temperatura T, e que o sistema está sujeito à condição inicial: ( ) 00 hth == (1)
  • 49. MATLABBásico Modelagem & Dinâmica de Processos Modelos simples - o tanque de nível pode-se escrever o balanço de massa do sistema 1 ( ) ( )FF dt tdm E −=ρ ( ) ( ) dt tdh A dt tdm ρ= ( ) ( )FF Adt tdh E −= 1 Ainda, e, portanto, (2) (3) (4)
  • 50. MATLABBásico Modelagem & Dinâmica de Processos Modelos simples - o tanque de nível Freqüentemente, considera-se a vazão de saída do tanque proporcional à altura da coluna de líquido é inversamente proporcional a uma resistência ao escoamento (R): 1 R h F = ( )       −= R h F Adt tdh E 1 Logo, (5) (6)
  • 51. MATLABBásico Modelagem & Dinâmica de Processos Modelos simples - o tanque de nível Este modelo simples de um tanque de nível, sem balanço de energia, possui uma solução analítica: 1 ( )         −= − RA t E eRFth 1 Para simular este modelo, basta escolher os valores das constantes R, A e FE, das condições iniciais h0 e t0. A simulação da solução analítica do modelo do tanque de nível é mostrada a seguir. (7)
  • 52. MATLABBásico % 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)');
  • 53. MATLABBásico 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. Dica!
  • 55. MATLABBásico Muitas vezes é muito trabalhoso, ou mesmo 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. A equação diferencial será: Modelagem & Dinâmica de Processos Modelos simples - o tanque de nível Freqüentemente, considera-se a vazão de saída do tanque proporcional à altura da coluna de líquido é inversamente proporcional a uma resistência ao escoamento (R): 1 R h F = ( )       −= R h F Adt tdh E 1 Logo, (5) (6)
  • 56. MATLABBásico % 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)'); function dh = dhdt(t,h,flag,par) R = par(1); A = par(2); Fe = par(3); dh = (Fe-(h/R))/A;
  • 57. MATLABBásico 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]);
  • 58. MATLABBásico 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.
  • 59. MATLABBásico -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 dhdt.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).
  • 60. MATLABBásico A codificação do arquivo .m segue o mesmo formato já explicado para funções porém com algumas particularidades. 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.
  • 62. MATLABBásico Modelagem & Dinâmica de Processos Exemplo 3 Tanque de aquecimento 1 h FE ,TE F , T A Th Th h FE ,TE F , T A Th Th Considerando constantes a vazão de alimentação FE, a temperatura Th, o coeficiente global de transferência de calor U e as propriedades do fluido ρ e Cp e que o sistema está sujeito às condições iniciais: ( ) 00 hth == ( ) 00 TtT ==
  • 63. MATLABBásico Modelagem & Dinâmica de Processos Modelos simples - tanque de aquecimento Como no caso anterior, o balanço de massa pode ser escrito como : 1 ( )       −= R h F Adt tdh E 1 (6) O balanço de energia é escrito como: ( ) ( ) QFHHF dt VTd C EEp +−=ρρ (8) Modelagem & Dinâmica de Processos Modelos simples - tanque de aquecimento 1 ( )       +=+= dt dh T dt dT hA dt dV T dt dT V dt VTd (9) ( ) QFHHF R h F A T dt dT hAC EEEp +−=            −+ ρρ (10)                 +−         += p E p hEE C U A F T C UT A TF hdt dT ρρ 1 (11)
  • 64. MATLABBásico Matlab Real dy(1) dh/dt y(1) h dy(2) dT/dt y(2) T Traduzindo as equações diferenciais para o Matlab:
  • 65. MATLABBásico % 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]);  
  • 66. MATLABBásico  % 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)');
  • 67. MATLABBásico 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]);
  • 68. MATLABBásico 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)))... - ( y(2)*((Fe/A)+(U/(Ro*Cp)))) ); dy = dy(:);
  • 69. MATLABBásico 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!
  • 70. MATLABBásico figure(1); plot(t,y(:,1)); title('Tanque de aquecimento'); xlabel('Tempo (h)'); ylabel('Altura (m)'); 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: Dica!
  • 72. MATLABBásico Na compra de uma calculadora gráfica, a loja ofereceu duas propostas de financiamento – proposta A e B. A proposta A é composta por 7 parcelas mensais iguais de 114 reais cada. Já a proposta B prevê 10 parcelas mensais iguais de 98 reais cada. Qual é a melhor opção de compra considerando a taxa de juros oferecida em investimentos denominados “renda fixa”? A princípio poderia resolver o problema simplesmente multiplicado 114 x 7 e 10 x 98, achando o valor final pago. Os valores encontrados seriam 798 e 980. Logo, a Proposta A parece mais favorável para o comprador. É importante lembrar, porém, que essa forma de resolução não considera que o dinheiro desvaloriza-se ao longo dos meses. Ou seja, o poder de compra de 100 reais hoje, é superior ao poder de compra de 100 reais daqui a 10 meses. Outra forma de pensar é considerar o “custo de oportunidade” – a taxa de retorno livre de que conseguiria para o meu dinheiro caso, ao invés de pagar agora, investisse. De uma forma ou de outra o que precisamos é do VALOR PRESENTE (VP) de cada série de pagamentos, sendo os pagamentos descontados a dada taxa de juros. Para trazer VALOR FUTURO (VF) para valor presente usa-se a fórmula: VP = VF / ( 1 + i )n Onde “i” é a taxa de juros mensal e “n” o número de meses entre o VF e o VP.
  • 74. MATLABBásico clc close all clear all   ivetor=0:0.01:0.50;   VPvetor114=[]; VPvetor98=[];   prompt{1}='Número de meses do pagamento da serie A:'; prompt{2}='Número de meses do pagamento da serie B:'; prompt{3}='Valor de cada parcela da serie A:'; prompt{4}='Valor de cada parcela da serie B:'; resposta=inputdlg(prompt,'Calculo da taxa de equilibrio'); nummeses114=str2num(char(resposta(1))); nummeses98=str2num(char(resposta(2))); v114=str2num(char(resposta(3))); v98=str2num(char(resposta(4)));
  • 75. MATLABBásico for J = 1:length(ivetor), i=ivetor(J); VP=[]; for K = 1:nummeses114, VP(K)=v114/(1+i)^K; end VPfinal=sum(VP); VPvetor114=[VPvetor114, VPfinal]; VP=[]; for K = 1:nummeses98, VP(K)=v98/(1+i)^K; end VPfinal=sum(VP); VPvetor98=[VPvetor98, VPfinal]; end
  • 76. MATLABBásico plot(ivetor*100,VPvetor114,'-b') hold on plot(ivetor*100,VPvetor98,'-r') title('Valor presente das parcelas a serem pagas') legend( [ num2str(nummeses114), ' parc de ', num2str(v114) ,' reais cada'] , ... [ num2str(nummeses98), ' parc de ', num2str(v98) ,' reais cada' ] ) xlabel('Taxa de juros mensal') ylabel('Valor presente em Reais') if (VPvetor114(1)<VPvetor98(1)), posicoes=VPvetor114<VPvetor98; achaZero=find(posicoes==0); achaPrimeiroZero=min(achaZero); plot(100*ivetor(achaPrimeiroZero),VPvetor114(achaPrimeiroZero),'ok') else posicoes=VPvetor98<VPvetor114; achaZero=find(posicoes==0); achaPrimeiroZero=min(achaZero); plot(100*ivetor(achaPrimeiroZero),VPvetor114(achaPrimeiroZero),'ok') end text(100*ivetor(achaPrimeiroZero),50+VPvetor114(achaPrimeiroZero), ... ['Juros de equilibrio (a.m.) = ',num2str(100*ivetor(achaPrimeiroZero)),' %'] )
  • 78. MATLABBásico Determinado processo possui função custo definida pela equação:   Y=((x-3)2 )-6     É necessário encontrar x que minimize o valor de Y. Não é difícil de visualizar que a solução do problema é fazer x=3, de modo a levar Y um mínimo (-6). Mesmo sabendo previamente a solução, vamos resolver através do MATLAB. Utilizamos então a função “fminsearch”.
  • 79. MATLABBásico %Calculo do valor de x que minimiza a funcao custo xmin = fminsearch('((x-3).^2)-6', 4)   %Gráfico da funcao custo x=0:0.01:5; y=((x-3).^2)-6; plot(x,y); hold on   %Marca o ponto de minimo: ymin=((xmin-3).^2)-6; plot(xmin, ymin,'or')
  • 81. MATLABBásico %Calculo do valor de x que minimiza a funcao custo   %Gráfico da funcao custo x=0:0.01:5; y=((x-3).^2)-6; plot(x,y); hold on drawnow   xmin = fminsearch('custo', 4)   %Marca o ponto de minimo: ymin=((xmin-3).^2)-6; plot(xmin, ymin,'or') function [y] = custo(x)   y=((x-3).^2)-6;   plot(x, y,'ob') hold on pause(0.1)
  • 83. MATLABBásico Quando ajustamos uma curva a um conjunto de pontos experimentais, estamos minimizando a distância entre a curva e os dados. Definindo essa distância como “erro”, estamos manipulando os parâmetros que definem a curva de modo a minimizar o erro. Nesse caso “erro” é a minha “função objetivo” a ser minimizada. É através dessa ótica que se torna possível usar “fminsearch” para encontrar o valor ótimo dos parâmetros de ajuste de uma curva aos dados experimentais. global yexp xexp   %pontos experimentais yexp=[1.1 2.12 2.85 4.4 5.0 6.5]; xexp=[1 2 3 4 5 6];   Parametros = fminsearch('custo',[1,2]);
  • 84. MATLABBásico function [saida] = custo(x) global yexp xexp   a=x(1); b=x(2);   yteo=a.*xexp + b; %calcula o valor teorico %para cada pto experimental   yerro=abs(yexp-yteo); %calculo do erro saida=sum(yerro);   plot(xexp,yexp,'r*',xexp,yteo,'b-') drawnow pause(0.3)
  • 87. MATLABBásico As equações diferenciais que descrevem o processo são: O modelo matemático do nosso reator CSTR tende ao estado estacionário. Ou seja, seus parâmetros tendem a ficar constantes no tempo infinito. Seria interessante introduzir perturbações em algumas variáveis e observar como o reator se comporta.
  • 88. MATLABBásico Uma perturbação degrau em uma entrada u do sistema é tal que:   u = u0 , t < tdegrau u = u0 + du, t > tdegrau   Ou seja: antes do degrau a entrada u vale u0. Após o tempo determinado para que o degrau ocorra (tdegrau) temos que u passa a valer u0 + du.
  • 89. MATLABBásico % Definição das constantes do modelo U =50; % BTU/(h.ft2.R) A = 120; % ft2 DH = -30000; % BTU/lbm Ro = 50; % lb/ft3 Cp = 0.75; % BTU/(lbm.R) E = 30000; % BTU/lbm R = 1.99; % BTU/(lbm.R) k0 = 7.08e10; % 1/h V =48; % ft3 Te = 580; %R Th = 550; %R Fe = 18; % ft3/h Cre = 0.48; % lbm/ft3   % Tempo de simulação t = 0.0 : 0.01 : 10.0; %h   % Perturbação na vazão de entrada td = 5.0; %Tempo onde ocorre o degrau fd = 2*Fe; %Valor assumido após o degrau Programa principal: continua...
  • 90. MATLABBásico % Condições iniciais Cr0 = 0.16; % lbm/ft3 T0 = 603; %R  % Simulação do modelo [t,y] = ode45('dcstrdeg',t,[Cr0 T0],[],[U A DH Ro Cp E R k0 V Te Th … Fe Cre],[td fd]); % Visualização da simulação figure(1); plot(t,y(:,1)); title('CSTR com Reação Exotérmica'); xlabel('Tempo (h)'); ylabel('Concentração de Reagente (lbm/ft3)'); figure(2); plot(t,y(:,2)); title('CSTR com Reação Exotérmica'); xlabel('Tempo (h)'); ylabel('Temperatura (R)'); Programa principal (continuação):
  • 91. MATLABBásico function dy = dcstrdeg(t,y,flag,par,deg);   U = par(1); A = par(2); DH = par(3); Ro = par(4); Cp = par(5); E = par(6); R = par(7); k0 = par(8); V = par(9); Te = par(10); Th = par(11);   Função “dcstrdeg”: continua...
  • 92. MATLABBásico %Verifica a ocorrência de degrau: if t >= deg(1) Fe = deg(2); else Fe = par(12); end;  Cre = par(13);  dy(1) = (Fe/V)*(Cre-y(1)) - k0*exp(-E/(R*y(2)))*y(1); dy(2) = (Fe/V)*(Te-y(2)) + ((DH*k0*exp(-E/(R*y(2)))*y(1))/(Ro*Cp)) - ... (U*A*(y(2)-Th)/(V*Ro*Cp)); dy = dy(:); Função “dcstrdeg” (continuação):
  • 94. MATLABBásico Uma das grandes vantagens no uso de ferramentas computacionais é reduzir o nosso esforço repetitivo, tarefa para a qual o computador é muito eficiente. Supomos que temos um processo no qual gostaríamos de testar uma série de condições iniciais. Para cada nova condição inicial teríamos de refazer todas as contas. Um esforço enorme! As linguagens de programação, e o Matlab em particular, resolvem esse problema facilmente usando o já apresentado comando “for”. Usaremos o mesmo reator CSTR do exemplo anterior.
  • 95. MATLABBásico % Definição das constantes do modelo U =50; % BTU/(h.ft2.R) A = 120; % ft2 DH = -30000; % BTU/lbm Ro = 50; % lb/ft3 Cp = 0.75; % BTU/(lbm.R) E = 30000; % BTU/lbm R = 1.99; % BTU/(lbm.R) k0 = 7.08e10; % 1/h V =48; % ft3 Te = 580; %R Th = 550; %R Fe = 18; % ft3/h Cre = 0.48; % lbm/ft3   % Tempo de simulação t = 0.0 : 0.01 : 10.0; %h   % Condições iniciais Cr0 = [0.16 0.32 0.48 0.64]; % lbm/ft3 T0 = 603; %R Programa principal: continua...
  • 96. MATLABBásico % Simulação e visualização do modelo em batelada cor = 'brmk'; leg = ['Cr0=0.16'; 'Cr0=0.32'; 'Cr0=0.48'; 'Cr0=0.64']; for aux = 1 : length(Cr0) [t,y] = ode45('dcstr',t,[Cr0(aux) T0],[], [U A DH Ro Cp E R k0 V… Te Th Fe Cre]); % Visualização da simulação figure(1); hold on; plot(t,y(:,1),cor(aux)); title('CSTR com Reação Exotérmica'); xlabel('Tempo (h)'); ylabel('Concentração de Reagente (lbm/ft3)'); figure(2); hold on; plot(t,y(:,2),cor(aux)); title('CSTR com Reação Exotérmica'); xlabel('Tempo (h)'); ylabel('Temperatura (R)'); end;   Programa principal (continuação): continua...
  • 97. MATLABBásico figure(1); legend(leg); figure(2); legend(leg); hold off; Programa principal (continuação): A seqüência de cores usadas é dada pelo vetor “cor”, “letra a letra” através da flag. Consulte o comando “plot” para detalhes. Dica!
  • 98. MATLABBásico Carlos André Vaz Junior cavazjunior@gmail.com http://www.eq.ufrj.br/links/h2cin/carlosandre