CURSO de NIVELAMENTO Métodos Computacionais Rogério Pagano (MatLab) PARTE III – PROGRAMAÇÃO NO...

15
CURSO de NIVELAMENTO CURSO de NIVELAMENTO Métodos Métodos Computacionais Computacionais Rogério Pagano (MatLab) Rogério Pagano (MatLab) PARTE III PARTE III – PROGRAMAÇÃO NO – PROGRAMAÇÃO NO MATLAB MATLAB

Transcript of CURSO de NIVELAMENTO Métodos Computacionais Rogério Pagano (MatLab) PARTE III – PROGRAMAÇÃO NO...

Page 1: CURSO de NIVELAMENTO Métodos Computacionais Rogério Pagano (MatLab) PARTE III – PROGRAMAÇÃO NO MATLAB.

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

Page 2: CURSO de NIVELAMENTO Métodos Computacionais Rogério Pagano (MatLab) PARTE III – PROGRAMAÇÃO NO MATLAB.

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

Page 3: CURSO de NIVELAMENTO Métodos Computacionais Rogério Pagano (MatLab) PARTE III – PROGRAMAÇÃO NO MATLAB.

Exemplo

MATLABMATLAB

Page 4: CURSO de NIVELAMENTO Métodos Computacionais Rogério Pagano (MatLab) PARTE III – PROGRAMAÇÃO NO MATLAB.

Exemplo

MATLABMATLAB

Page 5: CURSO de NIVELAMENTO Métodos Computacionais Rogério Pagano (MatLab) PARTE III – PROGRAMAÇÃO NO MATLAB.

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)

Page 6: CURSO de NIVELAMENTO Métodos Computacionais Rogério Pagano (MatLab) PARTE III – PROGRAMAÇÃO NO MATLAB.

MATLABMATLAB

Exemplo:

Page 7: CURSO de NIVELAMENTO Métodos Computacionais Rogério Pagano (MatLab) PARTE III – PROGRAMAÇÃO NO MATLAB.

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

Page 8: CURSO de NIVELAMENTO Métodos Computacionais Rogério Pagano (MatLab) PARTE III – PROGRAMAÇÃO NO MATLAB.

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

Page 9: CURSO de NIVELAMENTO Métodos Computacionais Rogério Pagano (MatLab) PARTE III – PROGRAMAÇÃO NO MATLAB.

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

Page 10: CURSO de NIVELAMENTO Métodos Computacionais Rogério Pagano (MatLab) PARTE III – PROGRAMAÇÃO NO MATLAB.

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’

Page 11: CURSO de NIVELAMENTO Métodos Computacionais Rogério Pagano (MatLab) PARTE III – PROGRAMAÇÃO NO MATLAB.

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

Page 12: CURSO de NIVELAMENTO Métodos Computacionais Rogério Pagano (MatLab) PARTE III – PROGRAMAÇÃO NO MATLAB.

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

Page 13: CURSO de NIVELAMENTO Métodos Computacionais Rogério Pagano (MatLab) PARTE III – PROGRAMAÇÃO NO MATLAB.

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]);

Page 14: CURSO de NIVELAMENTO Métodos Computacionais Rogério Pagano (MatLab) PARTE III – PROGRAMAÇÃO NO MATLAB.

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)');

Page 15: CURSO de NIVELAMENTO Métodos Computacionais Rogério Pagano (MatLab) PARTE III – PROGRAMAÇÃO NO MATLAB.

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));