160 likes | 297 Views
CURSO de NIVELAMENTO. Métodos Computacionais. PARTE III – PROGRAMAÇÃO NO MATLAB. Rogério Pagano ( MatLab ). MATLAB. Programa de Engenharia Química/COPPE/UFRJ LMSCP. Função Arquivos de texto extensão “.m” Começam com a palavra chave “function” Têm parâmetros de entrada e saída
E N D
CURSO de NIVELAMENTO Métodos Computacionais PARTE III – PROGRAMAÇÃO NO MATLAB Rogério Pagano (MatLab)
MATLAB Programa de Engenharia Química/COPPE/UFRJ LMSCP • 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
MATLAB Programa de Engenharia Química/COPPE/UFRJ LMSCP • Exemplo
MATLAB Programa de Engenharia Química/COPPE/UFRJ LMSCP • Exemplo
MATLAB Programa de Engenharia Química/COPPE/UFRJ LMSCP • Load e Save Save save X save arq1 X Y Z save arq2.sai X Y Z -ascii save arq3.sai X Y Z -ascii -double load load x load arq1 load arq2.sai load arq3.sai Gravando dados num arquivo : FID,FPRINTF,FCLOSE fid=fopen(‘nome do arquivo.extensão’, ‘modalidade’) fprintf(fid, formato,dados) fclose(fid)
MATLAB Programa de Engenharia Química/COPPE/UFRJ LMSCP Exemplo:
MATLAB Programa de Engenharia Química/COPPE/UFRJ LMSCP % 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 • 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
MATLAB Programa de Engenharia Química/COPPE/UFRJ LMSCP • % Cálculo de forma vectorizada • t = cputime; • for c = 1:nciclos, • y = a*b’; • end • tmat = cputime-t • % Velociade de cálculo relativa • rel = tfor/tmat • Vetorização Exemplo: 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
MATLAB Programa de Engenharia Química/COPPE/UFRJ LMSCP • Boas práticas em programação • Comentar o código • Preferir funções a scripts • Ler preferencialmente dados de ficheiros • Utilizar preferencialmente funções de alto-nível • Vetorizar operações • Evitar ciclos, utilizar pré-alocação em memória + importante do que a velocidade: código correto e legível
MATLAB Programa de Engenharia Química/COPPE/UFRJ LMSCP • Oscilador de Van der Pol t0 = 0; tf = 20; x0 = [0 0.25]; [t,x] = ode23('volpol', t0, tf, x0); plot(t,x) functionxdot=volpol(t,x) xdot=[0 0] xdot(1)=x(1).*(1- x(2).^2) - x(2); xdot(2)=x(1); xdot= xdot’
MATLAB Programa de Engenharia Química/COPPE/UFRJ LMSCP • Runge-kutta % metodo de RungeKutta de 4 ordem (explicito) function [t,x] = RK(t0,tf,x0,dxdt,n) % atribui o valor de n = 10 como padrao ifnargin < 5, n = 10; end % armazenado as condicoes iniciais t(1) = t0; xs = x0; x = x0; % calculo do passo h = (tf-t0)/n; function y = f2(t,x) y = -x.**2./(1+3.*exp(-t).*x); end % 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 Programa de Engenharia Química/COPPE/UFRJ LMSCP • Modelo do CSTR % 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
MATLAB Programa de Engenharia Química/COPPE/UFRJ LMSCP • Modelo do CSTR % Tempo de simulação t = 0.0 : 0.01 : 10.0; %h % Condições iniciais Cr0 = 0.16; % lbm/ft3 T0 = 603; %R % Simulação do modelo [t,y] = ode45('dcstr',t,[Cr0 T0],[],[U A DH RoCp E R k0 V Te Th Fe Cre]);
MATLAB Programa de Engenharia Química/COPPE/UFRJ LMSCP • Modelo do CSTR % 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)');
MATLAB Programa de Engenharia Química/COPPE/UFRJ LMSCP • Modelo do CSTR functiondy = 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));