Sei sulla pagina 1di 15

CURSO de NIVELAMENTO

Mtodos Computacionais
PARTE III PROGRAMAO NO
MATLAB

Rogrio Pagano (MatLab)

MATLAB

Funo

Arquivos de texto extenso .m Comeam com a palavra chave function Tm parmetros de entrada e sada As variveis internas so locais Permitem incorporar help Chamadas a funes

MATLAB

Exemplo

MATLAB

Exemplo

MATLAB

Load e Save
load load x load arq1 load arq2.sai load arq3.sai

Save save X save arq1 X Y Z save arq2.sai X Y Z -ascii save arq3.sai X Y Z -ascii -double

Gravando dados num arquivo : FID,FPRINTF,FCLOSE fid=fopen(nome do arquivo.extenso, modalidade)


fprintf(fid, formato,dados)

fclose(fid)

MATLAB
Exemplo:

MATLAB

Reserva de memria
% Verso com reserva de memria 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

Exemplo: N= 1000; x = rand(1,N); % Verso sem reserva de memria t = cputime; y = 0; for n = 1:N, y = [y x(n)]; end tsem = cputime-t clear y

MATLAB

Vetorizao
% Clculo de forma vectorizada t = cputime; for c = 1:nciclos, y = a*b; end tmat = cputime-t % Velociade de clculo relativa rel = tfor/tmat

Exemplo: N= 10000; nciclos= 100; a= rand(1,N); b= rand(1,N); % Clculo 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

MATLAB

Boas prticas em programao

Comentar o cdigo Preferir funes a scripts Ler preferencialmente dados de ficheiros Utilizar preferencialmente funes de altonvel Vetorizar operaes Evitar ciclos, utilizar pr-alocao em + importante do que a velocidade: memria cdigo correto e legvel

MATLAB

Oscilador de Van der Pol


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

MATLAB

Runge-kutta

% metodo de Runge Kutta de 4 ordem (explicito) function [t,x] = RK(t0,tf,x0,dxdt,n) function y = f2(t,x) y = -x.**2./(1+3.*exp(-t).*x); % atribui o valor de n = 10 como padrao end if nargin < 5, n = 10; end % armazenado as condicoes iniciais t(1) = t0; xs = x0; x = x0; % calculo do passo h = (tf-t0)/n; % loop de integracao for 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

MATLAB

Modelo do CSTR

% Definio 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

MATLAB

Modelo do CSTR
%h

% Tempo de simulao t = 0.0 : 0.01 : 10.0; % Condies iniciais Cr0 = 0.16; T0 = 603;

% lbm/ft3 %R

% Simulao do modelo [t,y] = ode45('dcstr',t,[Cr0 T0],[],[U A DH Ro Cp E R k0 V Te Th Fe Cre]);

MATLAB

Modelo do CSTR

% Visualizao da simulao figure(1); plot(t,y(:,1)); title('CSTR com Reao Exotrmica'); xlabel('Tempo (h)'); ylabel('Concentrao de Reagente (lbm/ft3)'); figure(2); plot(t,y(:,2)); title('CSTR com Reao Exotrmica'); xlabel('Tempo (h)'); ylabel('Temperatura (R)');

MATLAB

Modelo do CSTR
A = par(2); Ro = par(4); E = par(6); k0 = par(8); Te = par(10); Fe = par(12);

function dy = dcstr(t,y,flag,par); U = par(1); DH = par(3); Cp = par(5); R = par(7); V = par(9); Th = par(11); 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));

Potrebbero piacerti anche