Matlab

295 visualizações

Publicada em

Matrizes no matlab e outras equações

Publicada em: Engenharia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
295
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
5
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Matlab

  1. 1. MATLABBásico Carlos André Vaz Junior cavazjunior@gmail.com http://www.eq.ufrj.br/links/h2cin/carlosandre
  2. 2. MATLABBásico Mais de 1 milhão de resultados
  3. 3. MATLABBásico ? http://newsreader.mathworks.com
  4. 4. MATLABBásico
  5. 5. MATLABBásico
  6. 6. MATLABBásico
  7. 7. MATLABBásico
  8. 8. MATLABBásico Agora a = 2, faço tudo de novo?!
  9. 9. MATLABBásico
  10. 10. MATLABBásico
  11. 11. MATLABBásico
  12. 12. MATLABBásico Char ArrayMatriz Tipos Básicos Case Sensitive! Estrutura CaSe SeNsItIvE!
  13. 13. MATLABBásico Criando uma matriz:
  14. 14. MATLABBásico Criando um “char array”:
  15. 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
  16. 16. MATLABBásico Comando “who” e “whos”
  17. 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. 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. 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. 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. 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)
  22. 22. MATLABBásico
  23. 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. 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. 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
  26. 26. MATLABBásico if:
  27. 27. MATLABBásico AND OR
  28. 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. 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. 30. MATLABBásico   While:   while I < 10, disp(‘oi’); I=I+1; end Manipule o ponteiro I na rotina executada pelo “while”
  31. 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. 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. 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. 34. MATLABBásico >> figure(3) >> subplot(1,2,1) >> plot(t,y) >> subplot(1,2,2) >> plot(t,z)
  35. 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. 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')
  37. 37. MATLABBásico
  38. 38. 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;
  39. 39. MATLABBásico
  40. 40. MATLABBásico
  41. 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. 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. 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. 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');
  45. 45. MATLABBásico
  46. 46. MATLABBásico Exemplos
  47. 47. MATLABBásico Exemplo 1
  48. 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. 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. 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. 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. 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. 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!
  54. 54. MATLABBásico Exemplo 2
  55. 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. 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. 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. 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. 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. 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.
  61. 61. MATLABBásico Exemplo 3
  62. 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. 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. 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. 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. 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. 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. 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. 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. 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!
  71. 71. MATLABBásico Exemplo 4
  72. 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.
  73. 73. MATLABBásico
  74. 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. 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. 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)),' %'] )
  77. 77. MATLABBásico Exemplo 5
  78. 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. 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')
  80. 80. MATLABBásico Ou...
  81. 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)
  82. 82. MATLABBásico Exemplo 6
  83. 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. 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)
  85. 85. MATLABBásico Exemplo 7
  86. 86. MATLABBásico
  87. 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. 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. 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. 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. 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. 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):
  93. 93. MATLABBásico Exemplo 8
  94. 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. 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. 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. 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. 98. MATLABBásico Carlos André Vaz Junior cavazjunior@gmail.com http://www.eq.ufrj.br/links/h2cin/carlosandre

×