CURSO de NIVELAMENTO Métodos Computacionais Rogério Pagano (MatLab) PARTE III – PROGRAMAÇÃO NO...
Transcript of CURSO de NIVELAMENTO Métodos Computacionais Rogério Pagano (MatLab) PARTE III – PROGRAMAÇÃO NO...
CURSO de CURSO de NIVELAMENTONIVELAMENTO
Métodos Métodos ComputacionaisComputacionais
Rogério Pagano (MatLab) Rogério Pagano (MatLab)
PARTE III PARTE III – PROGRAMAÇÃO NO – PROGRAMAÇÃO NO MATLABMATLAB
Função
Arquivos de texto extensão “.m” Começam com a palavra chave “function” Têm parâmetros de entrada e saída As variáveis internas são locais Permitem incorporar “help” Chamadas a funções
MATLABMATLAB
Exemplo
MATLABMATLAB
Exemplo
MATLABMATLAB
Load e SaveSave
save X
save arq1 X Y Z
save arq2.sai X Y Z -ascii
save arq3.sai X Y Z -ascii -double
MATLABMATLAB
load
load x
load arq1
load arq2.sai
load arq3.sai
Gravando dados num arquivo : FID,FPRINTF,FCLOSEfid=fopen(‘nome do arquivo.extensão’, ‘modalidade’)
fprintf(fid, formato,dados)
fclose(fid)
MATLABMATLAB
Exemplo:
Reserva de memória
Exemplo:
N= 1000;
x = rand(1,N);
% Versão sem reserva de memória
t = cputime;
y = 0;
for n = 1:N,
y = [y x(n)];
end
tsem = cputime-t
clear y
MATLABMATLAB
% Versão com reserva de memória
t = cputime;
y = zeros(1,N+1);
for n= 1:N,
y(n+1)= x(n);
end
tcom = cputime-t
% Velocidade relativa
rel= tsem/tcom
VetorizaçãoExemplo:
N= 10000; nciclos= 100;
a= rand(1,N); b= rand(1,N);
% Cálculo utilizando um ciclo for
t = cputime;
for c = 1:nciclos,
y = 0;
for n = 1:N,
y = y+a(n)*b(n);
end
end
tfor = cputime-t
MATLABMATLAB
% Cálculo de forma vectorizada
t = cputime;for c = 1:nciclos, y = a*b’;endtmat = cputime-t% Velociade de cálculo
relativa
rel = tfor/tmat
Boas práticas em programaçãoMATLABMATLAB
Comentar o códigoPreferir funções a scriptsLer preferencialmente dados de
ficheirosUtilizar preferencialmente funções de
alto-nívelVetorizar operaçõesEvitar ciclos, utilizar pré-alocação em
memória+ importante do que a velocidade:
código correto e legível
Oscilador de Van der Pol
MATLABMATLAB
t0 = 0; tf = 20; x0 = [0 0.25]; [t,x] = ode23('volpol', t0, tf, x0); plot(t,x)
function xdot=volpol(t,x) xdot=[0 0] xdot(1)=x(1).*(1- x(2).^2) - x(2); xdot(2)=x(1); xdot = xdot’
Runge-kuttaMATLABMATLAB
% metodo de Runge Kutta de 4 ordem (explicito)function [t,x] = RK(t0,tf,x0,dxdt,n)
% atribui o valor de n = 10 como padraoif nargin < 5, n = 10; end
% armazenado as condicoes iniciaist(1) = t0;xs = x0;x = x0;
% calculo do passoh = (tf-t0)/n;
% loop de integracaofor i = 1:n g1 = h*feval(dxdt,t(i),xs); g2 = h*feval(dxdt,t(i)+.5*h,xs+.5*g1); g3 = h*feval(dxdt,t(i)+.5*h,xs+.5*g2); g4 = h*feval(dxdt,t(i)+h,xs+g3); xs = xs+(g1+g4)/6+(g2+g3)/3; t(i+1) = t(i)+h; x = vertcat(x,xs);end
function y = f2(t,x)y = -x.**2./(1+3.*exp(-t).*x);end
Modelo do CSTRMATLABMATLAB
% Definição das constantes do modeloU =50; % BTU/(h.ft2.R)A = 120; % ft2DH = -30000; % BTU/lbmRo = 50; % lb/ft3Cp = 0.75; % BTU/(lbm.R)E = 30000; % BTU/lbmR = 1.99; % BTU/(lbm.R)k0 = 7.08e10; % 1/hV =48; % ft3Te = 580; %RTh = 550; %RFe = 18; % ft3/hCre = 0.48; % lbm/ft3
Modelo do CSTRMATLABMATLAB
% Tempo de simulaçãot = 0.0 : 0.01 : 10.0; %h
% Condições iniciaisCr0 = 0.16; % lbm/ft3T0 = 603; %R
% Simulação do modelo[t,y] = ode45('dcstr',t,[Cr0 T0],[],[U A DH Ro Cp E R k0 V Te Th Fe Cre]);
Modelo do CSTRMATLABMATLAB
% 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)');
Modelo do CSTRMATLABMATLAB
function dy = dcstr(t,y,flag,par);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); Fe = par(12);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));