Baixe o app para aproveitar ainda mais
Prévia do material em texto
Universidade Federal de Campina Grande Centro de Ciências e Tecnologia Unidade Acadêmica de Engenharia Química Laboratório de Referência em Controle e Automação Uso do MATLAB™ na Resolução de Problemas da Engenharia Química Romildo Brito Campina Grande, Setembro de 2011 1. Introdução Do ponto de vista da Matemática e de forma generalista, os principais problemas de engenharia podem ser agrupados da seguinte forma: Equações (ou sistemas) Algébricas o Lineares o Não lineares Equações (ou sistemas) Diferenciais o Ordinárias o Parciais Ajuste de Curvas o Lineares o Não lineares Otimizações o Unidimensionais o Multdimensionais Uma vez equacionado o problema de engenharia, e classificado dentre uma das opções citadas acima, o passo seguinte é encontrar a solução. Neste instante surge um "pequeno" problema: a solução analítica, na maioria das vezes, não pode ser obtida. Para contornar este problema, usamos técnicas numéricas. Este curso tem como objetivo auxiliar o futuro engenheiro no uso de técnicas numéricas para resolução de problemas de engenharia. Para tanto, usaremos o Matlab como ferramenta de trabalho. O Matlab é um dos softwares mais usados para resolução de problemas de engenharia, em especial a classe de problemas relacionados acima. A principal vantagem do Matlab é a sua habilidade em manusear matrizes; até por que foi desenvolvido inicialmente para este fim (Matlab – Matrix Laboratory). Os programas desenvolvids em Matlab são interpretados, ou seja, ao ser executado, cada linha do programa será interpretada, de modo que a velocidade de procesamento deixa a desejar. Normalmente, um programa desenvolvido em Matlab só "roda" onde o Matlab estiver instalado. Diferentemente do Matlab, no Fortran, um programa desenvolvido é compilado, gerando um executável, de modo que pode ser executado em qualquer máquina. É possível compilar programas desenvolvidos em Matlab, mas este não é o objetivo principal do aplicativo. As rotinas que acompanham o Matlab (básicas e toolboxes) são compiladas, o que significa que devemos usar exaustivamente estas funções, a fim de ganharmos tempo. Até por que, não dá pra concorrer com programas que foram desenvolvidos por uma equipe especialmente montada para este fim. A principal intenção do parágrafo acima é enfatizar que o engenheiro deve saber programar, entretanto, deve usar as ferramentas prontas (e otimizadas) dos softwares disponíveis. Como isto é possível? Tentaremos responder esta questão ao longo do curso. O help do Matlba é de fundamental importância. Em nenhum momento, este material deve ser considerado um substituto do help; apenas um guia para tornar menos árdua a tarefa de se familiarizar com o Matlab. É importante salientar que este material foi desenvolvido com auxílio da ferramenta Notebook do Matlab, a qual permite que o Matlab e o MS Office trabalhem em conjunto. A setença a ser executada pelo Matlab estará na cor verde. O resultado obtido pelo Matlab é apresentado na cor azul. 2. Operações e Comandos Básicos Na janela de comando e em arquivos M-file (a ser definido posteriormente) as operações elementares são realizadas da mesma forma que em uma calculadora: 2 + 36/456^2 + sqrt(23)*exp(3) A expressão sqrt significa raiz quadrada, enquanto exp significa ex. No help do Matlab é possível encontrar a definição destas e de outras funções, por exemplo, sin(x), cos(x), etc. Também é possível atribuir valores à variáveis: a = 32; b = a^2 + 36 Da forma como foi escrito, apenas o valor de b será mostrado na tela, visto que depois do número 32 foi colocado um “;”. Entretanto, o valor de a está armazenado, o que pode ser comprovado através do comando who (ou whos): c = a + b/3; who Se desejarmos saber o valor de uma variável devemos digitar esta variável sem o “;” no final. c A variável ans contém o resultado (answer) do nosso cálculo inicial: 2 + 36/456^2 + sqrt(23)*exp(3) . Caso se desejese apagar (deletar) uma variável, usamos o comando clear: clear all whos Defina um vetor x = -1:0.1:1 e então execute cada um dos seguintes comandos: sqrt(x), cos(x), x.^2. Execute os seguintes comandos e explique o que acontece: x = [2 3 4 5] y = -1:1:2 x.^y x.*y x./y 3. Operações com Matrizes Uma das grandes vantagens do Matlab, e foi pra isto que ele foi especialmente desenvolvido, é a habilidade de trabalhar com matrizes. Uma matriz é definida da seguinte maneira: A = [1 2 3; 11 12 13; 21 22 23; 41 52 65] O Matlab distingue entre letras maiúsculas e minúsculas. Ou seja, a é diferente de A; a, até este ponto, é um escalar e A uma matriz. E se desejarmos apenas os elementos de duas colunas? Usamos a seguinte sintaxe: a = A(1:2,1:2) O argumento “:” significa todas as linhas; o argumento 1:2 significa da coluna 1 até a coluna 2. Da mesma forma, b = A(3,:) Definido uma matriz B: B = [2 5 7]' Apesar de B ter sido escrito como um vetor linha (1x3) o ' após o colchete significa que haverá uma operação de transposição. Por isto B foi mostrado como sendo um vetor coluna (3x1). O objetivo foi aproveitar as duas matrizes para mostrar como o Matlab realiza a multiplicação, visto que na multiplicação de matrizes o número de colunas da 1ª matriz deve ser igual ao número de linhas da 2ª. C = A*B A multiplicação elemento por elemento é realizada usando um “.” antes do “*”. Neste caso, as matrizes devem ser iguais. O mesmo procedimento deve ser usado para divisão elemento por elemento: BB = [3; 5; 9; 10] CC = C.*BB CC1 = CC./BB Em se tratando de divisão, no caso de matrizes usamos a inversa. Para achar a matriz proceda de uma das seguintes maneiras: ainv = inv(a) ainv = a^-1 Lembre que a inversa somente existe para matriz quadrada (número de linhas e colunas iguais). Defina uma matriz A = [1 5 8; 84 81 7; 12 34 71] e examine o conteúdo de A(1, 1), A(1:2,:) A(:,1), A(3,:), A(:,2:3). Qual o significado das seguintes linhas de comandos? x = 1:1:10 z = rand(10) y = [z; x] c = rand(4) Defina uma matriz 4x4 e use o comando sum para determinar a soma da 1ª coluna e da 2ª linha. 4. Entrada e Saída Para que o Matlab mostre uma mensagem na janela de comando, usamos o comando disp da seguinte maneira: disp(' Este é o 1º exemplo de como mostrar uma mensagem na tela' ) Se desejarmos "entrar" com um valor e assossiar este valor à uma variável, proceda da seguinte forma: x0 = input('Entre com o valor da estimativa inicial = ') O valor digitado na janela de comando será atribuído à variavel x0. Um dos comandos usados para mostrar o resultado de um cálculo é o fprintf. a = 25; b = 3.56; c = a/2+b^(1/3) fprintf('O valor de c = %10.5f', c) A sintaxe %10.5f significa que a variável c será mostrada com no mínimo 10 dígitos, sendo 5 após o ponto decimal. 5. Gráficos: 2-D e 3-D Para plotar gráficos em 2 dimensões podemos usar o comando plot. Definamos um vetor x: x = [1:0.5:10]; % Vetor x, cujos elementos variam de 1 a 10, em intervalo de 0.5. Na linha de comando anterior aparece um símbolo de %, o que significa que depois do “;” tudo é comentário. Ou seja, não será interpretado pelo Matlab. x Definamos agora o vetor y (de mesmo tamanho que x), y = x.^2 + 2.*x – 23.8 Observe que y foi definido elemnto por elemento (usando o “.” antes da multiplicação). Ográfico de y versus x pode ser assim construído: plot(x, y, 'ro') A aparência do gráfico pode ser melhorada usando os seguintes comandos: plot(x,y,'ro-'); xlabel('x-axis'); ylabel('y-axis'); grid; title('1º Gráfico'); O argumento 'ro-' da função plot define a cor e a forma da curva. As funções seguintes são usadas para definir os títulos dos eixos e da figura. A função grid inclui linhas de grid na figura. Também é possível plotar gráficos de funções pré-definidas, conforme será apresentado em seguida. Defina um vetor x = -1:0.1:1 e então execute cada um dos seguintes comandos: plot(x, cos(x)); plot(x, cos(x.^4)). Para o mesmo vetor x, construir o gráfico de )cos(21 xxy e )sin(22 xxy na mesma figura. Rotular os eixos. Para gráficos em 3 dimensões, a construçõ pode ser realizadas de várias maneiras: superfície, linha de contorno, etc. A seguir, apresentaremos como construir uma superfície, juntamente com as linhas de contorno. Será usada como exemplo a função de Rosenbrok: 222 )1()(100),( xyxyxf . Usando o comando meshgrid e definindo o intervalo de x e y, formamos uma matriz: [x y] = meshgrid(-3:0.1:3) Após escrever a função, f = 100*(x.^2-2).^2 + (1-x).^2, o seu valor em cada ponto da matriz é calculado. O passo seguinte é usar o comando mesh para construir o gráfico: mesh(x, y, f) O uso do comando meshc incluirá as linhas de contorno. 6. Comandos de Repetição e de Condição – Programação Embora exista inúmeras alternativas para desenvolvimento de um programa, qualquer uma pode ser elaborada usando os seguintes comandos: for, while e if. O comando for deve ser usado para situações onde o número de repetições está definido. Por exemplo, para calcular a soma dos n termos da série ... 11 7 8 5 5 3 2 1 S n = 5 % Defining n = 5 num(1) = 1; den(1) = 2; term(1) = num(1)/den(1); for i = 2:n num(i) = num(i-1) + 2; den(i) = den(i-1) + 3; term(i) = num(i)/den(i); end S =sum(term); fprintf('Sum of the %3.0f elemments = %6.4f\n', n, S) O comando sum calcula a soma dos elementos do vetor term. O comando while deve ser usado quando o número de repetições não é conhecido; mas uma condição deve ser estabelecida. Por exemplo, quantos termos serão necessários até a soma da série anterior ser maior do que 4? i = 1; Somadese = 4; num(i) = 1; den(i) = 2; term(i) = num(i)/den(i); Soma = term(i); while Soma <= Somadese i = i + 1; num(i) = num(i-1) + 2; den(i) = den(i-1) + 3; term(i) = num(i)/den(i); Soma = Soma + term(i); end fprintf('A soma dos %3.0f primeiros termos = %10.5f\n', i, Soma) fprintf('\nSão necessários %2.0f termos para que a soma seja maior do que %3.0f', i, Somadese) O comando if deve ser usado para satisfazer alguma condição. O exemplo abaixo demonstra o uso deste comando. i = 1; Somadese = 4; num(i) = 1; den(i) = 2; term(i) = num(i)/den(i); Soma = term(i); while i <= 100 i = i + 1; num(i) = num(i-1) + 2; den(i) = den(i-1) + 3; term(i) = num(i)/den(i); Soma = Soma + term(i); if Soma > Somadese break end end fprintf('A soma dos %3.0f primeiros termos = %10.5f\n', i, Soma) fprintf('\nSão necessários %2.0f termos para que a soma seja maior do que %3.0f', i, Somadese) Assim como o Matlab, tente interpretar o programa linha por linha. Dada uma matriz A de dimensão 4x5, usar o comando for para encontrar a soma de cada coluna. Um procedimento recursivo para determinar a raíz de equações da forma 012 xx é ,...2,1,0 onde 111 rxx rr Partindo de uma estimativa inicial 20 x usar o comando while para determinar uma das raízes da equação de 2º grau. Repetir o problema anterior usando um for e um if. 7. Arquivos M-file e Function Os cálculos realizados na janela de comando são voláteis, ou seja, uma vez que o Matlab seja encerrado, tudo que foi realizado será perdido (pode usar ainda a janela history para recuperar o que foi digitado). Para contornar este inconveniente, usamos um arquivo do tipo M-file, o qual pode ser gravado e armazenado. Por exemplo, para armazenar o programa principal ou modelo do seu problema. Uma vez gravado, um arquivo M-file pode ser chamado da janela de comando ou por outro arquivo M-file. A figura abaixo mostra o conteúdo de um M-file com nome Sum_Serie_I.m. A extensão deverá ser sempre .m e o nome do arquivo não pode conter espaço. Para executar um M-file, na janela de comando digite o nome do aquivo. É importante salientar, que ao "chamar" um M-file, este esteja localizado no diretório de trabalho do Matlab. Escrever um arquivo M-file com objetivo de calcular a soma e a multiplicação de duas matrizes quadradas. Use comentários explicar cada passo e use funções de entrada e saída. Repetir os exercícios do item anterior usando um M-file. Uma function (definida pelo usuário) é um M-file com uma característica especial: o nome do arquivo M-file é sempre igual ao nome da function. O uso de function é mais bem explicado com um exemplo, o que será realizado nos próximos itens. 8. Solução de Equações Não Lineares No Matlab, a localização de raízes de funções não lineares pode ser realizada através do comando fzero. Considere a função: 102)( 2 xxxf Existem duas maneiras de definir a função: usando uma função anônima e usando um M-file. Usando uma função anônima, inicie definindo a função: f = @(x) x.^3 + 3.6*x.^2 – 36.4; Observe que para elevar o x à potência (2 e 3) foi usado um . antes, pois se x for um vetor (e será logo em seguida) cada elemento será elevado à potência individualemnte. Definido a função desta maneira, como uma função anônima, evita-se a necessidade de escrever um M-file. Em seguida, use o comando fzero: sol = fzero(f, 1) Os argumentos da função fzero são a função (f) cuja raiz se deseja encontrar e a estimativa inciail (1). Para encontrar a raiz, a função fzero usa uma combinação do Método da Secante com o Método da Bissecção. Para plotar o grafico de f, proceda da seguinte forma: x = -50:5:50; plot(x, f(x), 'r.-'); xlabel('x'), ylabel('y'); title('Exemplo I'); grid; A função f pode ser dependente de um parâmetro externo, por exemplo, a: for i = 1:5 if i >= 3 a = i^2; else a = i; end f = @(x) a*x^3 + 3.6*x.^2 – 36.4; sols = fzero(f, 1) end Conforme descrito anteriormente, o comando for é usado para situações onde se necessita de repetir alguma ação n (conhecido) vezes. Observe que a função fzero encontra apenas uma raiz da função; geralmente, a raiz que está mais próxima da estimativa inicial. Entretanto, a função é um polinômio de 3º grau, o que significa que existem três raízes (reais e/ou complexas). A função roots determina de uma única vez todas as raízes de um dado polinômio. Primeiro definimos um vetor P contendo os coeficientes do polinômio inicial; em seguida, chamamos a função roots. P = [1 3.6 0 -36.4]; raizes = roots(P) Para a maioria dos casos na engenharia, a função que se deseja encontrar o zero é resultande de uma sequência de procedimentos. Por exemplo, considere o problema de calcular o ponto de bolha de uma solução líquida (comportamento ideal), sendo dadas a pressão e a composição da fase líquida. A figura a seguir apresenta os três arquivos M-file usados para resolver o problema: Bubl_Point, Parameters_II e Summy. O arquivo Bubl_Point é o programa principal; aquele responsável por gerenciar a chamada dos outros arquivos, pela entrada de dados e pela saída de resultados.O arquivo Parameters_II contém dados que são constantes durante a execução, no caso, as constantes da Equação de Anoine e a pressão do sistema. Onde for digitado o nome deste arquivo (Parameters_II), as informações nele contidas estarão disponíveis a partir daquele ponto. O arquivo Summy é uma function, a qual é responsável por realizar o cálculo da pressão a partir de uma estimativa de temperatura e comparar com a pressão do sistema. A função fzero é usada para encontrar o valor exato da temperatura que satisfaça a function Summy, ou seja, 0f . Na janela de comando digite Bubl_Point para obter o resultado desejado. Bubl_Point É fundamental enfatizar o uso de funções embutidas do Matlab, como é o caso de fzero, pois são funções compiladas e otimizadas. No caso de sistemas, a solução é obtida usando o comando fsolve, o qual usa o Método de Newton-Rhapson. Considere o sistema de equações a seguir: 2 1 21 21 2 2 x x exx exx Inicialmente, crie um M-file, conforme mostra a figura a seguir. Observe que as duas funções foram definidas de modo que o lado direito foi igualdado a zero e escritas como elementos de um vetor f. Em seguida, na janela de comando, defina o vetor com as estimativas iniciais. x0 = [-5 -5]; Em seguida, chame a função fsolve. [x] = fsolve(@Myfunc,x0) É possível definir o que se pretende que seja mostrado ao chamar a função fsolve usando um conjunto de opções. options = optimset('display', 'iter'); [x f] = fsolve(@Myfunc,x0,options) A função fsolve pode ser usada para obter os diagramas y-x e T-xy do probema de equilíbrio de fases apresentado anteriormente. Na situação anterior, a função fzero foi usada para determinar apenas um ponto dos diagramas citados, uma vez que esta função encontra a raiz de uma única equação (apesar de podermos ter usado um comando for para repetir os cálculos). A figura a seguir mostra três arquivos M-file usados para obter os diagramas. No arquivo Equil_Curve (programa principal) um vetor x1 é criado com espaçamento (valor) de 0.05 entre os elementos. O vetor Test é criado usando o comando linspace que distribui de forma igualitária os elementos entre o intervalo desejado (no caso 80.1 e 110.6). A function fsolve resolve simultâneamente as 21 equações; uma para cada composição de líquido (x1 e x2). Para facilitar a visualização, os gráficos são plotados na mesma janela. Para tanto, usamos o comando subplot. O primeiro argumento deste comando define o número de linhas; o segundo o número de colunas e o terceiro o gráfico que estará sendo plotado em sguida. A utilização do comando for deve ser continuamente evitada, pois torna o processamento muito mais lento. Ou seja, use abundantemente vetores e matrizes. Para executar, na janela de comando digite Equil_Curve. A rotina fsolve pode ser usada para resolver o sistema de equações algébricas não lineares, resultante dos balanços de massa para a figura mostrada a seguir. 435623256 22563256 CHCHHCHCHCHHC HCHCHHCCHCHHC 1 Eb 2 Wa 5 Eb 3 Eb Wa 4 Eb Wa Sty Tol Met Hy 6 Met Hy 7 Tol 8 Sty 9 Wa M R S 9. Solução de Sistemas de Equações Lineares Para resolver um sistema algebrico linear, defina o a matriz dos coeficientes; em seguida defina o vetor do lado esquerdo da igualdade. A = [2 2 -1; 5 2 2; 3 1 1]; b = [1 -4 5]'; Observe que A e b foram definidos na mesma linha, usando ; para separá-los. No caso do vetor b, usou-se um ' apóstrofo para transformar o vetor linha em um vetor coluna (transpor b). A solução é encontrada da seguinte forma: x = A\b Na resolução, o Matlab usa a eliminação gaussina com pivotamento parcial. Considere a sequencia de reatores apresentado na figura a seguir. A partir do balanço de massa, o objetivo é determinar é concentração na saída de cada reator. A partir do balanço de massa em cada reator, obtém-se o seguinte sistema de equações algébricas lineares: 2001202040 08090 40020130 321 21 21 ccc cc cc No Matlab, A = [130 -20 0; 90 -80 0; -40 -20 120]; b = [400 0 200]'; Sol = A\b 10. Ajuste de Curvas: Interpolação e Regressão Para quem trabalha com experimentos, uma necessidade quase sempre presente é o ajuste de dados. Se os dados são precisos o suficiente, usamos a interpolação para correlacionar as variaveis, dependente e independente. Caso os dados apresentem ruído, como geralmente é o caso, usamos regressão para a correlação. Considere os dados da tabela a seguir: temperatura versus capacidade calorífica para um gás. Inicialmente, usaremos o Matlab para determinar a melhor curva que interpola os dados. T -40 -20 10 70 100 120 Cp 1250 1280 1350 1480 1580 1700 O passo inicial é dispor os dados na forma de vetor. xexp = [-40 -20 10 70 100 120]'; yexp = [1250 1280 1350 1480 1580 1700]'; A função interp1 do Matlab interpola dados em uma dimensão. O método padrão da função é linear. Para se ter uma idéia do método a ser usado, é recomendável plotar o gráfico de x versus y. plot(xexp, yexp, 'o'); xlabel('Temperatura'); ylabel('Capacidade calorífica'); Usando interpolação linear para determinar o valor de Cp para T = 30: Cpinterp = interp1(xexp, yexp, 30) Para se ter o gráfico com diversos dados interpolados, criamos um vetor para x: xinterp = [-40:5:120]; Em seguida, usamos a rotina interp1. yinterp = interp1(xexp, yexp, xinterp,'spline'); plot(xexp, yexp, 'o', xinterp, yinterp, '-') Neste caso, usamos o método spline para realizar a interpolação. O Matlab também realiza interpolação em duas e três dimensões (interp2 e interp3). Usaremos os mesmos dados para determinar a função que melhor correlaciona a variáveis (dependente e independente). O procedimento se inicia com a definição do tipo de modelo a ser usado para a regressão; usaremos, inicialmente, um modelo linear. Linmodel = fittype('a*x+b'); Em seguida, definimos o método a ser usado: options = fitoptions('Method', 'LinearInterpolant'); Finalmente, realizamos a regressão e plotamos o gráfico para ter uma idéia do ajuste: Regr = fit(xexp, yexp, Linmodel, options) plot(xexp, yexp, 'o') hold on plot(Regr, 'm') Para usarmos um polinômio de grau 2, procedemos da mesma maneira. Observe que no exemplo a seguir usamos um método diferente para a regressão. Nonlmodel = fittype('a*x^2 + b*x + c'); options = fitoptions('Method', 'NonlinearLeastSquares'); Regr = fit(xexp, yexp, Nonlmodel, options) plot(x, y, 'o') hold on plot(Regr, 'm') O Matlab dispõe de uma toolbox com interface gráfica. Na janela de comando do Matlab, digite cftool e uma janela de diálogo se abrirá. Após "carregar os dados", defina o modelo a ser usado e proceda com a regressão. Use o help para mais informações. O Matlab também realiza regressão multivariável e linear múltipla. O exemplo a seguir apresenta uma regressão linear múltipla, usando a função regress. Dada a tabela a seguir, o objetivo é encontrar uma função linear que melhor ajuste as variáveis (dependente e independentes). x1 0 0 1 2 0 1 2 2 1 x2 0 2 2 4 4 6 6 2 1 y 14 21 11 12 23 23 14 6 11 Inicialmente, tentaremos ajustar os dados a uma função do tipo 21 cxbxay ; ou seja, o Matlab retornará os valores a, b e c. Iniciamos definindo os vetores x1, 2 e y: x1 = [0 0 1 2 0 1 2 2 1]'; x2 = [0 2 2 4 4 6 6 2 1]'; y = [14 21 11 12 23 23 14 6 11]'; Observe que os três vetorespossuem um ' após o colchete, indicando que foram transpostos. Em seguida, colocamos os vetores x1 e x2 em uma matriz X: X1 = [ones(size(x1)) x1 x2]; O primeiro termo da matriz X (primeira coluna) é constiuída pelo número 1, de modo a formar um sistema algébrico linear. Finalmente, usamos a função regress para obter o desejado: b1 = regress(y, X1) Desta forma, a equação do tipo 21 cxbxay que melhor representa o experimento é: 21 3333.26667.66667.141 xxyajust . Para ajustar considerando a interação entre x1 e x2, proceda da seguinte forma: X2 = [ones(size(x1)) x1 x2 x1.*x2]; b2 = regress(y, X2) Desta forma, a equação do tipo 2121 xdxcxbxay que melhor representa o experimento é: 2121 1111.04444.23333.64074.142 xxxxyajust . 11. Otimização A grande maioria dos modelos matemáticos é utilizada para descrever o comportamento de fenômenos ou sistemas. Por outro lado, a otimização se preocupa em não apenas resolver o problema, mas resolver o problema da melhor maneira possível. As técnicas de localização de raízes e otimização estão relacionadas pelo fato de que ambas envolvem a estimativa e a busca por pontos de funções. A diferença entre as duas técnicas está ilustrada na figura abaixo. A localização de raízes procura por pontos onde a função seja anulada, enquanto a otimização envolve a busca por pontos onde a função alcance um valor máximo ou mínimo. O ponto ótimo é alcançado quando a função inverte o seu sentido. Em termos matemáticos, isto ocorre para o valor de x onde a derivada da função assume valor zero, ou seja, 0)(' xf ; a segunda derivada, 0)('' xf , indica se o ponto é de máximo ou de mínimo: se 0)('' xf , o ponto é de máximo; se 0)('' xf , o ponto é de mínimo. 0 1 2 3 4 5 6 7 8 9 10 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 x S in (x ) Máximo Mínimo Máximo O Matlab resolve problemas de otimização em uma ou mais dimensões; com ou sem restrições. Considere encontrar o mínimo da função 252)( 2 xxxf . No Matlab, f = @(x) x.^2 + 2*x -25; x = [-10:0.5:10]; plot(x, f(x)); xlabel('x'); ylabel('y'); axis([-10 10 -40 100]) Neste exemplo simples, o extremo (mínimo) da função pode ser encontrada derivando a função e igualando a zero. Entretanto, o objetivo aqui é demonstrar o uso do Matlab na localização de extremos. Observe que o mínimo da função ocorre entr 0 e -2. Este é um problema unidimensional e sem restrição; ou seja, a função depende apenas de uma única variável (x) e esta variável pode mudar livremente. As funções fminunc e fminsearch resolvem problemas unidimensionais e multidimensionais sem restrição. A função fminunc usa métodos baseados na derivada das funções. A função fminsearch usa o Método Simplex. Usando a função fminunc: xmin = fminunc(f, 0) Usando a função fminsearch: xmin = fminsearch(f, 0) Um problema mais elaborado. A tabela a abaixo apresenta os dados de pressão versus composição para o sistema metanol(1)-água(2). O objetivo é determinar os parâmetros da equação de Margules que melhor representa os dados, considerando que a mistura segue a Lei de Raoult Modificada. P(kPa) x1 y1 19.953 0.0 0.0 39.223 0.1686 0.5714 42.984 0.2167 0.6268 48.852 0.3039 0.6943 52.784 0.3681 0.7345 56.652 0.4461 0.7742 60.614 0.5282 0.8085 63.998 0.6044 0.8383 67.924 0.6804 0.8733 70.229 0.7255 0.8922 72.832 0.7776 0.9141 84.562 1.0 1.0 A Lei de Raoult Modificada apresenta a seguinte forma: P xPsaty iii 1 onde γ representa o coeficiente de atividade da fase líquida. Uma das expressões para calcular γ é a equação de Margules ])(2[ln ])(2[ln 2211221 2 12 1122112 2 21 xAAAx xAAAx A pressão de vapor Psat é calculada usando a Equação de Antoine: TC BALnPsat i i ii onde A, B e C são específicas para componente. Sabendo que a soma das frações nas fases é igual a 1, obtemos aseguinte equação: 222111 xPsatxPsatPcalc Esta equação permite calcular o valor da pressão (Pcalc) a partir dos dados de T e x. Entretanto, isto somente é possível se dispusermos das constantes de Antoine e das constantes de Margules. Considerando que as constantes de Margules estão disponíveis e visto que a tabela anterior disponibiliza dados de P, nós podemos definir a seguinte função: i PPcalcfobj 2)( A função representa a diferença para cada experimento, entre o valor experimental (P) e o valor teórico (Pcalc). Para diminuir esta diferença, os parâmetros a serem variados são as constantes de Margule (A12 e A21). E é isto que as rotinas de otimização fazem; minimizam (ou maximizam) uma função. A figura a seguir apresenta os arquivos M-file usados para resolver este problema. O Matlab possui uma toolbox de otimização com interface gráfica, a qual é ativada digitando optimtool Vários tipos de problemas podem ser resolvidos usando esta interface gráfica, incluindo problemas com restrições, através da função fmincon. 12. Equações Diferenciais Ordinárias Apenas relembrando, uma derivada representa a tendência do comportamento de uma variável. Desta forma, as equações diferenciais são fundamentais para estudar o comportamento dos fenômenos que são dependentes do tempo e/ou do espaço. Quando uma variável depende apenas do tempo ou do espaço, temos as Equações Diferenciais Ordinárias (EDO); quando depende do tempo e do espaço temos uma Equação Diferencial Parcial (EDP). As equações diferenciais que dependem do tempo são usadas para descrever modelos transientes. O Matlab resolve EDO e EDP; entretanto, neste curso apresentaremos apenas a resolução de EDO. Várias funções estão disponíveis para resolução de EDO: ode45, ode23, ode113, ode15s, etc. Cada uma destas funções usa um método diferente para integração, e o uso depende do tipo de cada problema. Neste curso usaremosa a função ode45, a qual faz uso do Método de Runge- Kutta. Integrar a equação diferencial a seguir, desde t=0 até t=4. 1)0( 5.820122 23 yttt dt dy Esta é uma (muito simples) EDO, pois temos apenas uma variável independente, e será resolvida usando a função ode45 do Matlab, conforme descrito a seguir. Inicialmente definimos a EDO como uma função anônima (logo em seguida usaremos um exemplo com M-file) dydt = @(t, y) -2*t^3 + 12*t^2 – 20*t + 8.5 Observe que a EDO foi definida como sendo função de t e de y, de forma generalizada, apesar de y não aparecer do lado direito da igualdade. Lembrando que uma EDO precisa de um valor inicial, definimos a seguir o valor da variável dependente para t=0 y0 = 1; Caso tenhamos mais de uma variável dependente (no caso de sistemas de EDO), y0 será um vetor. Precisamos informar ao Matlab o intervalo da integração tint = [0 4]; Finalmente, chamamos a função ode45 [t y] = ode45(dydt, tint, y0); O lado esquerdo da igualdade armazena dois vetores. O vetor t representa a variável independente, enquanto o vetor y armazena os valores correspondentes da variável dependente. Entretanto, a forma mais interessante de observar o resultado é através do uso de gráficos. plot(t, y); xlabel('t'); ylabel('y'); grid on; Um problema mais elaborado. Considere a figura a seguir, onde temos dois reatores do tipo CSTR. Fin CAin V1 K1 V2 K2 F1 CA1 F2 CA2 O objetivo é determinar o comportamento da concentração na saída do 2º reator, depois um distúrbio na concentração na entrada do 1º reator. O modelo matemático do processo é representado pelas EDO's a seguir: 222211 2 2 1111 1 1 VKCACAFCAF dt dCAVVKCACAFCAF dt dCAV inin A figura a seguir apresenta os arquivos do tipo M-file usados para resolução deste problema. A função ode45 do Matlab novamente foi usada para integração das duas equações diferenciais.
Compartilhar