Introdução aos Processos Químicos Capítulo 4 - INTRODUÇÃO AO USO DO MATLAB 4. 1 - Objetivo O objetivo deste Capítulo é permitir ao aluno dominar o conceito, a lógica e os comandos básicos presentes no Matlab. Pretende-se também familiarizar o aluno que nunca teve contato com programação com conceitos elementares presentes em diversas linguagens de computação científica. É importante que a leitura seja acompanhada da realização de exercícios no próprio Matlab, permitindo assim uma melhor compreensão dos tópicos apresentados. Para orientar este estudo, há uma seqüência de exemplos ao longo do texto com tarefas computacionais com dificuldade crescente e compatíveis com o assunto recém abordado. 4.2 - Introdução Com o desenvolvimento da indústria de informática, máquinas cada vez mais poderosas passaram a estar disponíveis a um custo cada vez menor. Este fenômeno alterou de forma marcante os rumos das ciências da engenharia, permitindo precisão e velocidade no processamento de informações. Em virtude deste cenário, o domínio das principais ferramentas computacionais passou a ser um requisito básico para o engenheiro moderno. Apesar da existência no mercado de um grande número de programas para a resolução dos mais diversos problemas de engenharia, um profissional deve conhecer os fundamentos de, pelo menos, uma linguagem de programação, uma vez que o desenvolvimento de ferramentas computacionais é uma atividade de grande importância nas áreas acadêmica, de pesquisa, de desenvolvimento e de engenharia básica. É comum a crença, principalmente entre iniciantes, de que os simuladores de processos comerciais são capazes de resolver todo e qualquer tipo de problema. Isto não é verdade, nenhum programa disponível tem utilização universal. É muito comum a necessidade de que o usuário, na solução de um problema específico de seu interesse, seja obrigado a programar módulos para serem acoplados aos programas comerciais, tornando-os assim passíveis de serem utilizados. 109 Introdução aos Processos Químicos O Matlab (Matrix laboratory) é um ambiente, que permite o desenvolvimento de programas (rotinas) computacionais, semelhante a uma linguagem de programação (FORTRAN, PASCAL, BASIC, etc.). Ele dispõe ainda de poderosos recursos para a apresentação de resultados gráficos e processamento de matrizes. Apesar do Matlab ser bastante versátil, o desenvolvimento de programas no ambiente Matlab é uma tarefa mais simples do que as análogas utilizando as linguagens de programação tradicionais. 4.3 – Ambiente de Trabalho Quando o Matlab é acionado, surge na tela do computador uma janela (janela de comando/command window) com um pequeno texto introdutório na parte superior. Logo abaixo, a esquerda, aparece o símbolo ( » ), com o cursor piscando ao lado. Essa linha é chamada linha de comando (command line). É através da janela de comando que o usuário se comunica com o software, introduzindo as instruções através da linha de comando, com o acionamento da tecla ENTER. O símbolo ( » ) indica que o software está pronto para receber as instruções do usuário. • Exemplo 4.3.1: Digite: » 238*436 Nota: Não esqueça de pressionar, após a digitação, a tecla ENTER. Lembre-se que esta observação vale para todos os exemplos apresentados. Observe que o resultado da operação de multiplicação digitada na linha de comando aparece logo abaixo dessa linha, precedida por: ans = . • Exemplo 4.3.2: Digite: • » clc (este comando apaga a tela) Exemplo 4.3.3: Digite: » 258/652 , 56*48 A vírgula permite que mais de um comando seja introduzido de uma só vez. O Matlab executa os comandos da esquerda para a direita e apresenta os resultados, um acima do outro, na ordem de execução. 110 Introdução aos Processos Químicos 4.4 - Acesso ao “Help” A existência de um comando de ajuda (“help”) no Matlab permite ao estudante, uma vez dominando os comandos básicos do software, explorar ao longo do tempo uma quantidade cada vez maior de recursos, em um processo de autoaprendizado contínuo. O comando “help” pode ser acessado através da barra de menu (como qualquer “software for Windows” convencional) ou diretamente da linha de comando, como indica o exemplo: • Exemplo 4.4.1: » help quad 4.5 - Operações Aritméticas A linha de comando pode ser utilizada como uma calculadora científica, como nos Exemplos 4.3.1 e 4.3.3. No quadro a seguir são apresentados os símbolos que representam cada operação aritmética: Operação Soma Subtração Multiplicação Símbolo + * Operação Divisão Potenciação Símbolo / ^ 4.5.1 - Funções O Matlab disponibiliza um grande número de funções matemáticas. Exemplos destas funções podem ser encontrados na tabela a seguir: Função Módulo de x Raiz quadrada de x Exponencial (base natural) Logaritmo natural de x Logaritmo decimal de x Resto de x/y Comando abs(x) sqrt(x) exp(x) log(x) log10(x) rem(x,y) Função seno de x cosseno de x tangente de x arco-seno de x arco-cosseno de x arco-tangente de x Comando sin(x) cos(x) tan(x) asin(x) acos(x) atan(x) As funções indicadas são representadas por expressões com letras minúsculas, seguidas dos argumentos entre parênteses. Como será visto adiante, o Matlab vê diferença entre letras minúsculas e letras maiúsculas. Todos os comando Matlab são em letras minúsculas. 111 Introdução aos Processos Químicos Outro ponto importante é que os argumentos das funções trigonométricas e os resultados de suas inversas são expressos em radianos. Deve-se tomar cuidado para não fazer confusão ao utilizar as funções logarítmicas. Em textos, a notação usual para o logaritmo na base natural é ln(x) – a função correspondente no Matlab é log(x) - enquanto o logaritmo na base 10 é normalmente representado por log(x) – no Matlab log10(x). 4.5.2 - Ordem dos Cálculos Os cálculos aritméticos são realizados sempre segundo a seguinte ordem: 1) Operações dentro dos parênteses (interno → externo); 2) Funções; 3) Potenciação; 4) Multiplicação e divisão; 5) Soma e subtração. Operadores de mesma hierarquia são efetuados da esquerda para a direita. • Exemplo 4.5.2.1: Utilizando o Matlab, determine o valor da expressão: (9,8 − 0,8) (4 − ln(10)) ( 245 ) 124 = ? Esta expressão matemática é escrita na forma adequada para o Matlab da seguinte forma: » ((9.8-0.8)/(4-log(10)))^(245/124) e o seu resultado é igual a 27.0011 . Observe que as vírgulas nas expressões para o Matlab são representadas por pontos, pois ele utiliza a forma inglesa de representar os números decimais. • Exemplo 4.5.2.2: Determine o resultado das seguintes operações: a) 433 − 256 23,45 × 47 (483 − 234) b) 3,21 + 133 sen(ln(2)) 3 Os resultados são: a) 0.1606 ; b) 7.0567e+003 . 112 Introdução aos Processos Químicos Lembre-se que o resultado 0.1606 na realidade representa 0,1606. Observe também que a notação científica utilizada pelo Matlab não usa o símbolo x 10exp comum em textos. Assim: 1,2 x 106 ≡ 1.2e+006 = 1.2e6 9,9 x 10-12 ≡ 9.9e-012 = 9.9e-12 no Matlab e no Matlab. 4.6 - Variáveis 4.6.1 Conceito de Variável Uma variável pode ser considerada como um objeto armazenado na memória do computador. Uma variável é composta por um nome (cadeia de letras e/ou números necessariamente iniciada por uma letra) e o seu conteúdo (objeto armazenado naquela variável). Neste primeiro contato com o Matlab, será considerado que o objeto armazenado tem natureza numérica, podendo ser um escalar ou uma matricial. As variáveis ficam armazenadas no chamado espaço de trabalho do Matlab. Na criação do nome de uma variável pode-se utilizar letras maiúsculas ou minúsculas, entretanto não se pode esquecer que o Matlab faz distinção entre elas, ou seja, a e A são variáveis diferentes no Matlab. Uma vez que a variável armazena um valor numérico, ela pode participar plenamente de operações aritméticas, nas quais ela substitui o valor numérico nela armazenado. Por exemplo, se as variáveis A e B correspondem, respectivamente, aos valores numéricos 10 e 20, então: » A+B é equivalente a: » 10 + 20 4.6.2 - Comando de Atribuição Para armazenar um valor numérico em uma variável, utiliza-se o comando de atribuição. Este comando apresenta a seguinte estrutura: Nome da variável = Valor numérico O valor numérico armazenado na variável pode estar representado por uma expressão aritmética ou até mesmo pela combinação de uma ou mais variáveis. Observe o exemplo a seguir: 113 Introdução aos Processos Químicos • Exemplo 4.6.2.1: Qual é o valor da variável Casa ? » A=3 , B=45+234 » Casa = sqrt(A+B) » Casa=Casa*3 O resultado é igual a 50,3786. Ao fazer o exemplo anterior, você observou que após inserir cada comando de atribuição o Matlab informa na janela de controle o resultado da operação realizada. Você pode evitar isto, adicionando após cada comando de atribuição o símbolo (;). Veja a diferença na janela de controle quando você entra as operações do exemplo 4.6.2.1 da seguinte forma: » A=3 ; B=45+234 ; » Casa = sqrt(A+B) ; » Casa=Casa*3 ; Note que após você inserir a última atribuição o Matlab não apresenta a solução. Isto ocorre em função do ponto e vírgula após o último comando de atribuição. Entretanto, ao final destas operações o valor numérico 50,3786 encontra-se armazenado na variável Casa. Você pode confirmar isto inserindo: » Casa No exemplo, a não colocação do ponto e vírgula no final da última linha de comando faz com que o valor final armazenado na variável Casa seja apresentado na janela de comando. 4.6.3 - Comandos de Entrada e de Saída Os comandos de entrada e saída são responsáveis pela comunicação de dados entre o usuário e o espaço de trabalho do Matlab. Ao trabalhar na janela de controle, a definição de um valor para uma variável e a sua inserção no espaço de trabalho é feita pelo usuário, utilizando o comando de atribuição (Seção 4.6.2). Na elaboração de programas, o programador define a utilização de uma determinada variável, e pode conferir valores para ela através de comando de atribuição ou através do comando de entrada input. Ao rodar um programa, quando encontra este comando, o computador interrompe temporariamente a execução e 114 Introdução aos Processos Químicos apresenta uma mensagem na janela de comando solicitando que o usuário entre com o valor da variável. Após a inserção do valor, o programa volta a rodar automaticamente. A sintaxe do comando input é a seguinte: Nome da variável = input('mensagem') • Exemplo 4.6.3.1: » w = input('Entre com o valor da variável') O resultado da inserção deste comando é o aparecimento na janela de comando do texto entre ‘ ‘. Você deve então inserir o valor desejado. Caso, em algum momento ao longo de um programa, seja necessário apresentar uma mensagem na tela, utilize o comando disp('mensagem'). Note que, de forma distinta do que ocorre com o comando input, o comando disp não para a execução do programa. • Exemplo 4.6.3.2: » disp('Valores das variáveis Casa e w') , Casa , w • Exemplo 4.6.3.3: Verifique a diferença entre os comandos: » C=40 » D=50; » C,D 4.6.4 - Gerenciamento de Variáveis Quando, em algum momento, é necessário determinar quais variáveis estão definidas no espaço de trabalho, é utilizado o comando who. • Exemplo 4.5: » who Uma vez que uma variável foi definida através do Matlab, ela ganha um espaço no espaço de trabalho e fica armazenada até o momento em que a janela de comando é fechada (término de uma seção de utilização do Matlab). Assim, quando uma tarefa no Matlab é finalizada e outra é logo iniciada na mesma sessão de trabalho, 115 Introdução aos Processos Químicos é indesejável que os valores das variáveis do trabalho anterior interfiram no novo trabalho. Utiliza-se então dos comandos clear ou clear all. A sintaxe destes comandos é: • » clear nome da variável (Apaga a variável identificada) » clear all (Apaga todas as variáveis armazenadas) Exemplo 4.6.4.1: Execute a seguinte seqüência de comandos: » A=30; » A (existência de A confirmada pela indicação de seu valor) » clear A » A (a variável A não existe mais no espaço de trabalho) 5 - Arquivos de Comandos A entrada de informações através da linha de comando pode se tornar inconveniente, principalmente em grandes problemas, pois requer a introdução dos comandos um a um, seqüencialmente. Além disso, caso seja necessário repetir um procedimento, todos os comandos devem ser novamente digitados. Para permitir a realização de tarefas mais complexas, o Matlab possibilita a criação de arquivos de comandos (“script files”). Arquivos de comandos são arquivos texto onde é armazenada uma seqüência qualquer de comandos, que pode vir a ser executada a qualquer momento, quando necessário. Estes arquivos desempenham tarefa equivalente aos programas fonte utilizados nas linguagens de programação convencionais. Através de um arquivo de comandos é possível acionar outros arquivos de comandos. Os arquivos de comandos devem ser escritos no bloco de notas (notepad editor de texto disponível no Windows) e sempre gravados com a extensão “.m”. Versões mais recentes do Matlab já trazem um editor incorporado. Para executar um arquivo de comandos, deve-se apenas digitar o nome do arquivo na linha de comando. No entanto, é necessário antes da execução do arquivo, 116 Introdução aos Processos Químicos indicar ao Matlab em que local da máquina (subdiretório) se encontra o arquivo. Para esta tarefa, é possível utilizar o comando path, ou, alternativamente, o comando cd. As respectivas sintaxes são: » path(path,'endereço do subdiretório') » cd endereço do subdiretório A seguir é apresentado, passo a passo, o procedimento básico para a criação de um programa (arquivo de comandos): - Passo 1 Inicialmente, deve-se identificar um subdiretório existente ou criar um novo subdiretório, onde serão colocados seus arquivos de trabalho, por exemplo subdiretório “prog”. - Passo 2 Informe ao Matlab onde seus arquivos de comandos estarão localizados, por exemplo, » path(path,'a:\prog') ou então, » cd a:\prog - Passo 3 Abra um arquivo novo no bloco de notas ou no editor do Matlab, quando este estiver disponível. - Passo 4 Escreva neste arquivo os comandos do programa, como se estivesse na janela de comando. Os comandos são colocados linha por linha ou, quando escritos na mesma linha, devem estar separados por vírgula. - Passo 5 Grave o arquivo de comandos com um nome apropriado, por exemplo, “trab.m” (nunca esquecer da extensão “.m”). Usando o editor do Matlab, a extensão .m é adicionada automaticamente. - Passo 6 Passe para a linha de comando do Matlab e digite o nome do arquivo de comandos, sem a extensão. No exemplo em questão seria digitado: » trab . # Observação: Após qualquer alteração realizada no programa, o arquivo deve ser novamente 117 Introdução aos Processos Químicos salvo. Deve-se sempre ter em mente que o Matlab não lê o arquivo da tela e sim o que encontra-se gravado no disco. # Algumas dicas: i) Introduza comentários nas listagens dos programas. Os comentários são linhas entre os comandos destinadas apenas a descrever a função de certos trechos do programa. Os comentários auxiliam no momento de corrigir possíveis erros (“bugs”), facilitando também que uma outra pessoa possa entender o programa. Para colocar um comentário utilize o símbolo “%” antes da linha. O Matlab não executa o que é escrito a direita do símbolo %. ii) Para evitar que na execução dos programas, variáveis anteriormente definidas perturbem a seqüência de comandos, sugere-se que no início do arquivo seja adicionado o comando clear all. Este comando nunca deve ser colocado no meio do programa, pois caso isto aconteça, haverá a eliminação de todas as informações geradas até aquele momento. iii) Quando se desenvolve um programa formado por vários arquivos de comandos, sugere-se criar um subdiretório só para o conjunto desses arquivos. Desta forma, cada tarefa executada no Matlab deve possuir um subdiretório próprio. Esta medida facilita o acesso aos arquivos, evitando confusões desnecessárias. No exemplo a seguir é apresentado um arquivo de comandos (listagem de um programa) com uma estrutura típica. • Exemplo 4.5.1: Escreva um arquivo de comandos que realize a conversão de temperaturas em °F, adicionadas via janela de comando, para °C e K. Este arquivo deve ser chamado de convtemp. % Programa para a conversão de temperaturas % Inicialização clc , clear all % Entrada de dados Tf = input('Digite a temperatura em graus Fahrenheit'); 118 Introdução aos Processos Químicos % Cálculos Tc=(Tf-32)/9*5; Tk=Tc+273.15; % Apresentação dos Resultados disp('Temperatura em graus Celsius'); Tc disp('Temperatura em Kelvin'); Tk Ao final da digitação o arquivo de ser salvo com o nome: convtemp.m. • Exemplo 4.5.2: (tente fazer e rode verificando se está certo) Criar um programa para o projeto de tanques cilíndricos. O usuário deve introduzir o diâmetro e a altura do tanque e o programa deve calcular o volume e a área superficial total do tanque. 6 - Matrizes e Vetores 6.1 - Definição e Entrada de Matrizes e Vetores Matrizes são arranjos bidimensionais de números. Nas matrizes, os valores numéricos são organizados em n linhas e m colunas (dimensão n x m). Vetores são matrizes formadas por apenas uma linha ou uma coluna (dimensão n x 1 ou 1 x m). A introdução de um matriz no ambiente de trabalho pode ser feita diretamente pela definição de seus elementos individuais: » A(i,j) = valor numérico onde (i,j) é a posição do elemento na matriz A , i representando a linha e j a coluna. No entanto, é mais prático introduzir as matrizes de uma outra forma, como está representado abaixo: » A = [ A11 A12 ; A21 A22 ] ou » A = [ A11 , A12 ; A21 , A22 ] onde A i , j representa o elemento na posição (i,j). Neste caso, todos os elementos são envolvidos por colchetes. O ponto e vírgula indica a mudança de linha e em uma determinada linha os elementos são separados por um espaço ou uma vírgula. 119 Introdução aos Processos Químicos • Exemplo 6.1.1: Entre com a seguinte matriz: 34 −1 B= 4 2 6.2 - Operações Matriciais O Matlab possui a capacidade de realizar operações matriciais do mesmo modo que as operações aritméticas envolvendo escalares. Os símbolos das operações matriciais são apresentados na tabela a seguir: Símbolo + * Operação Soma Subtração Multiplicação • Operação Transposição Matriz Inversa Símbolo ' inv(A) Exemplo 6.2.1: Calcule as seguintes operações matriciais no Matlab: a) A⋅B d) A T b) A−C e) d ⋅A ⋅ d c) (A ) ⋅ (A) −1 T onde, 1 2 A= 5 3 3 5 5 B= 2 4 4 2 6 C= 4 5 2 d= 3 Resultados: 7 13 13 a) 21 37 37 − 1 − 4 ; b) 1 − 2 1 0 ; c) 0 1 1 5 ; d) 2 3 ; e) 73. 120 Introdução aos Processos Químicos 6.3 - Operações Elemento a Elemento Além das operações tradicionais entre matrizes, o Matlab dispõe do recurso das operações elemento a elemento. Quando aplicamos uma operação elemento a elemento a uma matriz, a operação é aplicada separadamente a cada elemento da matriz. Veja abaixo o exemplo da potenciação elemento a elemento: 1 2 A= 3 4 1 4 A .^ 2 = 9 16 , As principais operações elemento a elemento são: Símbolo ·* ·/ ·^ Operação Multiplicação Divisão Potenciação # Observações: i) Para realizarmos uma multiplicação ou divisão elemento a elemento entre duas matrizes, estas devem ter a mesma dimensão (deve existir correspondência entre os elementos). ii) As operações de soma e subtração convencionais já são naturalmente operações elemento a elemento, não necessitando assim de um caracter especial. As funções matemáticas embutidas no Matlab (seno, exponencial, etc.) quando aplicadas a matrizes geram resultados do tipo elemento a elemento. • Exemplo 6.3.1: Indicar o resultado das seguinte operações matriciais elemento a elemento: a) A .* C b) sen(g) onde A e C são as mesmas matrizes do Exemplo 6.2.1, 1 2 A= 5 3 2 6 C= 4 5 e g = 0 π 2 π 3π 2 2π . Resultados: 1 5 a) 2 3 ; b) [0 1 0 − 1 0] 121 Introdução aos Processos Químicos Observe que A * C ≠ A . * C . Outro ponto importante é que o Matlab possui o valor de algumas variáveis muito utilizadas, como o número π . A variável que armazeno o seu valor é pi. 6.4 - Manipulações de Matrizes e Vetores O Matlab permite a manipulação de matrizes e vetores de maneira bastante flexível. Você pode alterar e compor matrizes e vetores através de elementos individuais, linhas, colunas ou até mesmo submatrizes. Os principais recursos para esta manipulação são apresentados a seguir, através de alguns. 6.4.1 - Vetores • Exemplo 6.4.1.1: Digitando, » x = 1:4 % Análogo a: x = [1:4] obtém-se, x= 1 2 3 4 ou seja, um vetor linha de 1 até 4, com os elementos separados por um incremento unitário. • Exemplo 6.4.1.2: Digitando, » x = 1:0.5:4 obtém-se, x= 1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000 . O vetor continua tendo os seus elementos variando de 1 a 4, mas o incremento entre estes elementos passa a ser 0,5. • Exemplo 6.4.1.3: Digitando, » x = 0:2:10 122 Introdução aos Processos Químicos gera-se o vetor, x= 0 2 4 6 8 10 Pode-se também criar novos vetores através da seleção de “partes” de um vetor existente: » y = x(1:4) gera o seguinte vetor originado de x : y= 0 2 4 6 O vetor y contém do primeiro ao quarto elementos do vetor original x . Note que: » y = x(2:5) gera o seguinte vetor originado de x : y= 2 4 6 8 6.4.2 - Matrizes • Exemplo 6.4.2.1: Digitando, » A=[ 2 3 ; 4 5 ] , B=[ 1 2 ; 4 6 ] obtém-se, A= 2 3 4 5 B= 1 2 4 6 A partir destas duas matrizes é possível criar uma terceira, » C=[A,B] gera no espaço de trabalho: C= 2 3 1 2 4 5 4 6 123 Introdução aos Processos Químicos Utilizando este conceito é possível compor matrizes complexas a partir de submatrizes mais simples. Observa a matriz formada pelo comando: » F=[A;B] Note que ela é diferente da matriz C criada no Exemplo 6.4.2.1. • Exemplo 6.4.2.2: O caracter (:) também pode ser utilizado em matrizes de maneira equivalente àquela utilizada para vetores. Digitando, » A=[ 1:4 ; 5:8 ] cria-se no espaço de trabalho: A= 1 2 3 4 5 6 7 8 Parte dessa matriz pode ser utilizada na formação de uma nova matriz: » B = A(:,1:3) % Igual a B = A(1:2 , 1:3) B= 1 2 3 5 6 7 Note que a nova matriz contém todas as linhas da matriz original e apenas as três primeiras colunas. 6.5 - Resolução de Sistemas Lineares Através da representação matricial de um sistema linear, como o Matlab tem todos os recursos do cálculo matricial, é possível facilmente determinar a sua solução. Considere um sistema linear genérico, com duas variáveis (x1 e x2) e duas equações: A1,1x1 + A1, 2 x 2 = b1 A 2,1x1 + A 2, 2 x 2 = b 2 Este sistema pode ser representado matricialmente da seguinte forma, A1,1 A 2,1 A1, 2 x1 b1 = A 2, 2 x 2 b 2 ou seja, A. x = b 124 Introdução aos Processos Químicos A solução utilizando cálculo matricial é facilmente obtida através da pré−1 multiplicação dos dois lados da equação pela matriz inversa ( A ) da matriz dos coeficientes ( A ). Assim: A .A. x = A .b -1 -1 ⇒ x = A .b -1 No Matlab esta operação é realizada pelo comando: » x = inv(A) * b . Uma forma alternativa de efetuar esta operação no Matlab é através do seguinte comando: » x = A\b • % ≡ b÷A Exemplo 6.5.1: Resolva o sistema de equações: x+ y+z= 6 x − y + 4z = 11 x + 2 y + 3z = 14 A solução é: x = 1 ; y = 2 ; z = 3 . 6.6 - Exemplos de Aplicações de Operações Matriciais • Exemplo 6.6.1: Para facilitar o trabalho dos operadores de uma planta industrial, deseja-se montar uma tabela que relacione a altura de líquido em um determinado tanque com o seu volume. O tanque possui 2 m de diâmetro e altura máxima de 2 m. Preparar esta tabela considerando um intervalo de 10 cm entre seus elementos. # Sugestões: Utilize vetores coluna, operações elemento a elemento e composição de vetores para formar matrizes. 125 Introdução aos Processos Químicos • Exemplo 6.6.2: Em uma unidade industrial três tanques cilíndricos (A, B e C) são periodicamente alimentados com nitrogênio. Os diâmetros e as alturas dos tanques são respetivamente: tanque A, 2 m e 3 m; tanque B, 1,5 m e 2 m e tanque C, 1,8 m e 2 m. Em um determinado momento, a temperatura nos três tanques é igual a 25°C. A instrumentação dos tanques indica as seguintes pressões: 1 atm, 2 atm e 3 atm, respectivamente. Calcular a massa de gás em cada tanque. Utilize a equação dos gases ideais para descrever o comportamento do nitrogênio no interior dos tanques. 7 - Gráficos 7.1 - Gráficos Bidimensionais A maneira mais prática para traçar gráficos bidimensionais é através da utilização do comando plot. Este comando, em sua forma mais simples, apresenta a seguinte sintaxe: >> plot(x,y) onde x é um vetor contendo as abcissas e y é um vetor contendo as ordenadas dos pontos. Assim, as coordenadas dos pontos utilizados na construção do gráfico são (xi , yi ). • Exemplo 7.1: Traçar o gráfico da função f(x) = x3 entre os valores de x = -2 e x = 2. # Sugestão: Lembre-se das operações elemento a elemento. Solução: >> x = linspace(-2,2,50); >> y = x .^3; >> plot(x,y) Observações: i) O gráfico é formado em uma janela especial que recebe o nome de Figure No.1. Esta janela pode ser manipulada como uma janela qualquer do Windows; ii) Repita o exemplo criando o vetor x com somente cinco pontos. Ou seja, use: >> x = linspace(-2,2,5); O que ocorre com o resultado obtido? Curvas formadas a partir de um número de 126 Introdução aos Processos Químicos pontos diferente têm formas diferentes, pois o Matlab une, automaticamente, os pontos utilizados para a construção da curva da função desejada por retas. Através do comando plot também é possível definir a cor e/ou a forma de apresentar nos gráficos: >> plot(x,y,'ct') onde c e t indicam, respectivamente, o código da cor e o código do símbolo a ser utilizado para marcar os pontos utilizados na construção do gráfico. Os códigos são apresentados na Tabela 7.1.1. Teste as diversas formas de representação (símbolos) para saber as possibilidades disponíveis. Tabela 7.1.1 – Códigos para Cores e Símbolos em gráficos Matlab Código Cor Código Símbolo y amarelo · pontos m magenta o círculos c azul claro x xis r vermelho + cruzes g verde * asteriscos b azul - linha contínua w branco : tracejado k preto -· traço-ponto -- linha interrompida É possível traçar duas ou mais curvas em um mesmo gráfico, com apenas um comando plot. A sintaxe para duas curvas é: >> plot(x1,y1,'ct',x2,y2,'ct') onde as indicações dos códigos de cores e símbolos ('ct') é opcional. Quando os códigos não são informados é utilizado o procedimento padrão, ou seja, a linha contínua é utilizada. A cor utilizada é definida aleatoriamente. É possível também indicar somente um dos códigos. Uma outra alternativa de sintaxe, quando todas as curvas apresentam a mesma variável independente (abscissa), é: >> plot(x,[ y1 y2]) 127 Introdução aos Processos Químicos Quando várias curvas são traçadas em um mesmo gráfico sem a indicação do código de cores, o Matlab vai colorindo cada curva de acordo com a ordem da tabela de cores (ver Tabela 7.1.1). • Exemplo 7.2: Traçar os gráficos das curvas y = x2, w = x3, no intervalo entre -2 e 2. 7.2 - Gráficos Tridimensionais 7.2.1 Curvas O procedimento para traçar curvas no espaço tridimensional é semelhante aqueles empregados para as curvas 2-D, bastando apenas utilizar o comando plot3, >> plot3(x,y,z) >> plot3(x,y,z,'ct') >> plot3(x1,y1,z1,'ct',x2,y2,z2,'ct') • Exemplo 7.3: Traçar a curva parametrizada: x = t . sen(t) ; y = t . cos(t) ; z=t; no intervalo [0,20π]. 7.2.2 Superfícies A criação de gráficos de superfícies é realizada através de um conjunto de etapas. Primeiro, deve-se definir os vetores das variáveis independentes, com a seguinte sintaxe: >> x= (limite inferior das variáveis x:incremento:limite superior das variáveis x); >> y= (limite inferior das variáveis y:incremento:limite superior das variáveis y); Note que os parênteses pode ser omitidos neste comando. O próximo passo consiste em, a partir destes dois vetores, criar duas matrizes especiais através do comando meshgrid: >> [X,Y]=meshgrid(x,y) 128 Introdução aos Processos Químicos A matriz X consiste no vetor x repetido através das linhas e a matriz Y consiste no vetor y repetido em colunas. Estas matrizes servirão para a determinação do gráfico da superfície. O próximo passo é calcular o valor da variável dependente, por exemplo: >> Z=X.^2+Y.^2; Para traçar o gráfico da superfície utilize o comando surf, que a seguinte sintaxe: >> surf(X,Y,Z) Além do comando surf, o Matlab dispõe de uma série de comandos equivalentes que permitem visualizar a superfície de diferentes maneiras. Estes comandos são: surfc, mesh, meshc, meshz, waterfall e contour3. Verifique a utilização destes comandos utilizando o help do Matlab e fazendo alguns exemplos. • Exemplo 7.4: Traçar o gráfico da superfície do exemplo apresentado no texto, entre os intervalos x ∈[ −2,2] e y ∈[ −2,2] . Para traçar curvas de nível das superfícies, utiliza-se o comando contour, >> contour(X,Y,Z) . 7.3 - Identificação dos Gráficos Para complementar a representação gráfica de uma curva ou de uma superfície, existem uma série de comandos que permitem adicionar títulos e identificações dos eixos. 7.3.1 - Títulos Adiciona-se um título ao gráfico através do comando title, >> title('Título Desejado') 7.3.2 - Identificações dos Eixos A identificação dos eixos x, y e z do gráfico é realizada respectivamente através do comandos xlabel, ylabel e zlabel, >> xlabel('Eixo x') , ylabel(‘Eixo y’) , zlabel(‘Eixo z’) • Exemplo 7.5: Refazer o Exemplo 7.1, colocando um título no gráfico e identificando os seus eixos. 129 Introdução aos Processos Químicos 7.4 Organização para Apresentação de Gráficos Quando um gráfico é traçado e, logo após, um segundo gráfico é construído, o último gráfico substitui o primeiro na janela de apresentação criada. Caso seja necessário, a apresentação dos dois gráficos pode ser feita em janelas diferentes, mantendo-se assim a possibilidade de visualização dos dois gráficos obtidos. O comando que eprmite isto é o figure. Observe a seqüência de comando a seguir: >> plot(x1,y1) % este comando traça o primeiro gráfico >> figure(2) % este comando prepara uma segunda janela >> plot(x2,y2) % este segundo gráfico vai para a segunda janela Para fechar uma janela, utiliza-se o comando close >> close(n) % Fecha a janela n >> close all % Fecha todas as janelas de gráfico abertas 7.5 - Exemplo Ilustrativo • Exemplo 7.6: (Adaptado de “Fundamentos de Transferência de Calor e Massa”, Incropera, F. P. e De Witt, D. P.) Quando um fluido escoa através de um tubo com temperatura de parede constante, a temperatura média do fluido ao longo do comprimento do tubo se aproxima gradativamente da temperatura da parede. A equação que relaciona a temperatura média do fluido com a posição ao longo do comprimento de um tubo circular é: πdh T ( x ) = Tp − (Tp − Te) exp − x m Cp Seja um exemplo cujos dados são apresentados a seguir. Apresente um gráfico que mostre o valor da temperatura média de fluido (T(x)) ao longo do comprimento do tubo (x). No mesmo gráfico deve também ser apresentado o valor da temperatura da parede (Tp(x)) ao longo do comprimento do tubo. Incluir um título e a identificação dos eixos. Dados do problema: 130 Introdução aos Processos Químicos Temperatura média do fluido na entrada do tubo: Te = 15°C; Temperatura da parede do tubo: Tp = 100°C; Diâmetro do tubo: d = 50 mm; Coeficiente de transferência de calor médio: h = 756 W/(m2 K); Vazão mássica do fluido: m = 0,25 kg/s; Calor específico do fluido, a pressão constante: Cp = 4178 J/(kg K); Comprimento total do tubo: L = 6 m. Obs: Apresente os resultados em kelvin. 8 - Expressões Lógicas : Expressões Relacionais e Comandos Condicionais 8.1 Expressões Relacionais Expressões relacionais são utilizadas para comparar dois elementos. O resultado da comparação pode ser falso (0) ou verdadeiro (1) (variável booleana). Os operadores utilizados para compor as expressões relacionais são apresentados na Tabela 8.1.1. Tabela 8.1.1 – Operadores de Expressões Relacionais • Operador Significado Operador Significado == igual >= maior ou igual ~= diferente < menor > maior <= menor ou igual Exemplo 8.1: Verifique o resultado das seguintes expressões relacionais: 2>3 ; 10+2==13 , (2+3)^2 ~= (2^2+3^2) . 131 Introdução aos Processos Químicos 8.2 Expressões Lógicas Expressões lógicas relacionam elementos do tipo verdadeiro (1) ou falso (0) – variáveis booleanas. O resultado de uma expressão lógica é também um resultado tipo verdadeiro/falso (1/0). Os principais operadores lógicos são apresentados na Tabela 8.2.1. Tabela 8.2.1 – Operadores de Expressões Lógicas Operador Significado & and / e | or / ou ~ not / não Sejam A e B duas variáveis booleanas. Os resultados dos operadores lógicos envolvendo estas duas variáveis são mostrados na Tabela 8.2.2. Tabela 8.2.2 – Resultados de Operações Lógicas • A B A&B A|B ~A 0 0 0 0 1 0 1 0 1 1 1 0 0 1 0 1 1 1 1 0 Exemplo 8.2: Verifique o resultado da expressão lógica a seguir: not A and B sendo A = 0 e B = 1. 8.3 Expressões Mistas Expressões mistas utilizam operadores lógicos e relacionais simultaneamente. • Exemplo 8.3: Qual o resultado das expressões abaixo: 10 > 2 & 3 < 4 e ~(2^2~=4 or 3/5==0.6) 132 Introdução aos Processos Químicos 8.4 Comandos Condicionais Comandos condicionais do tipo if/else/end (if/then/else em outras linguagens) permitem, através da comparação entre dois elementos, direcionar os cálculos para caminhos distintos. No Matlab, esses comandos apresentam duas estruturas fundamentais: if-end e if-else-end, que são apresentadas a seguir: • Estrutura if-end: if condição seqüência de comandos end Caso a condição (expressão relacional, lógica ou mista) seja verdadeira, o programa executa a seqüência de comandos. Caso seja falsa, o programa ignora a seqüência e passa para o comando posicionado imediatamente após o end. • Estrutura if-else-end: if condição seqüência de comandos 1 else seqüência de comandos 2 end Se a condição (expressão relacional, lógica ou mista) for verdadeira, o programa executa a seqüência de comandos 1. Caso a expressão seja falsa, o programa executa a seqüência de comandos 2. Após realizar uma das duas seqüências, o programa passa para o comando posicionado imediatamente a seguir do end. As seqüências de comandos no interior das estruturas if-else-end também podem incluir novos comandos if/else/end, gerando assim estruturas mais complexas. Como exemplo, tem-se: if condição 1 if condição 1a seqüência de comandos 1a end seqüência de comandos 1b else 133 Introdução aos Processos Químicos seqüência de comandos 2 end Note que ao escrever estes comandos, é comum se posicionar cada grupo de comandos correspondentes iniciando em uma mesma coluna, de modo a tronar mais simples o entendimento da seqüência de cálculos programada. • Exemplo 8.4: Observe este trecho de programa, que identifica se a produção de uma fábrica (prod) atingiu a meta (meta) ou não. Ele também identifica se a produção ficou abaixo do limite aceitável (lim), emitindo textos que comentam o resultado. if prod>=meta disp(‘Parabéns, a meta de produção foi atingida’) else disp(‘Produção não atingiu a meta desejada’) if prod<lim disp(‘Produção abaixo do limite aceitável. Realizar auditorias’) end end Há outras formas de organizar comandos do tipo if/else/end que executam a tarefa do exemplo proposto. Proponha uma alternativa. • Exemplo 8.5: Um tanque cilíndrico de dióxido de carbono resiste a uma pressão máxima de 3 atmosferas. As dimensões do cilindro são: diâmetro igual a 2 m e altura igual a 1,5 m. Fazer um programa onde o usuário digite a temperatura no interior do tanque e a massa de gás que será adicionada. O programa deve informar se a operação é segura ou não. Verifique utilizando o programa desenvolvido, se a uma T = 27°C, uma massa de gás igual a 30 kg pode ser adicionada. Utilize a equação dos gases ideais para descrever o comportamento do gás no interior do tanque. 134 Introdução aos Processos Químicos 9 - Comandos de Repetição (for e while) 9.1 - Comando for O comando for causa a repetição de um trecho do programa um número de vezes que é previamente determinado. Sua estrutura é: • Estrutura for: for contador = valor inicial:passo:valor final seqüência de comandos end Uma estrutura for deve ser montada considerando que o programa executa as seguintes etapas: 1) No início do comando for, o programa atribui ao contador (uma variável) o seu valor inicial definido no próprio comando; 2) A seqüência de comandos é executada quantas vezes forem especificadas, ou seja, até o contador atingir o valor final especificado no programa. A atualização deste contador é efetuada automaticamente utilizando como incremento o valor do passo indicado no comando. Quando o valor do passo não é indicado, o Matlab considera o passo unitário. 3) Quando o valor do contador ultrapassa o valor final especificado no comando for, o processo termina e o programa passa a executar o comando imediatamente após o end. Quanto o valor do passo não for especificado, será considerado, automaticamente, igual a 1. • Exemplo 9.1: Este programa calcula a produção média diária (med) a partir de um período de tempo definido pelo usuário (N): N = input(`Digite o número de dias de acompanhamento da produção = ’); soma=0; for d = 1:N disp(‘Dia ’) , d prod = input(‘Digite a produção do dia indicado = ’); 135 Introdução aos Processos Químicos soma=soma+prod; end med=soma/N; disp(‘A produção média diária é igual a ’) , med • Exemplo 9.2: Séries infinitas são seqüências de somas de números. A utilização de séries apresenta grande importância em diversos campos da engenharia química, como, por exemplo, nos estudos de transferência de calor e da mecânica dos fluidos. É possível calcular o valor de π com o auxílio de uma série: π = 6s n , quando n → ∞ ; n 1 sendo s n = ∑ 2 . k =1 k Determine o valor de π utilizando a série com a soma de seus 100 primeiros termos (n =100). Há uma outra possibilidade de resolver o Exemplo anterior sem a utilização de uma estrutura for. Pesquise o comando sum. 9.2 - Comando while O comando while permite que um trecho do programa seja repetido, enquanto uma determinada condição permanecer verdadeira. A sua estrutura é: while condição seqüência de comandos end A execução deste comando segue as seguintes etapas: 1) Verifica inicialmente se a condição é verdadeira. Caso seja verdade, segue para a seqüência de comandos, caso contrário a execução passa para o restante do programa, logo após o end; 2) Executa a seqüência de comandos; 3) Volta à etapa 1. 136 Introdução aos Processos Químicos • Exemplo 9.3: Este trecho de programa é utilizado para determinar quantos reatores em série (N) são necessários para que uma corrente de produto atinja a concentração desejada (cdes). Considere que a concentração de saída de cada reator (cs) é determinada por uma função chamada reat, que utiliza como dado de entrada (argumento) a concentração de produto na corrente de entrada (ce). Note que esta função reat não existe no Matlab. Mais adiante, será mostrado como o usuário pode definir uma função para depois utilizá-la. Nesse exemplo, é considerado que a função foi definida em um ponto anterior do programa. Programa: cs=0; , N=0 while cs<cdes N = N+1; , ce=cs; , cs = reat(ce); end disp(‘Número de reatores em série necessários: ’) N • Exemplo 9.4: Equações do tipo: x i = f ( x i −1 ) para i = 1 , 2 , 3 ... são muito comuns em algoritmos que utilizam métodos numéricos resolvendo problemas de engenharia. Seja a seguinte equação recursiva, xi = 1 ( 3 − x i −1 ) 2 com x0 = 1 . (i) Determine o valor de xi para o qual o valor absoluto da diferença (xi-xi-1) se torna menor do que 10-4. (ii) Observe qual a relação entre o resultado do processo recursivo do item (i) e a equação: x− 1 =0 (3 − x ) 2 . Qual a conclusão que você chega? O que representa na realidade o valor de xi determinado no item (i). 137 Introdução aos Processos Químicos 10 - Variáveis Indexadas 10.1 - Conceito Variáveis indexadas são variáveis formadas por um conjunto de elementos individuais, onde cada elemento apresenta uma posição definida no conjunto. Vetores e matrizes, tal qual foram apresentados na Seção 6, são exemplos de variáveis indexadas, onde a posição do elemento é indicada por um índice, no caso dos vetores, ou dois índices, no caso das matrizes. Nas linguagens de programação usuais são possíveis variáveis indexadas com mais de dois índices. 10.2 Utilização As variáveis indexadas permitem ao programador gerenciar uma grande quantidade de informações de maneira simples e organizada. Uma grande massa de dados pode ser introduzida no computador através de apenas uma variável indexada, possibilitando depois que os dados individuais possam ser manipulados indicando apenas a sua posição no conjunto (índices). O exemplo a seguir ilustra a aplicação deste tipo de variável. • Exemplo 10.1: Em um sistema de controle de estoque em uma indústria química, um programa recebe os níveis diários de aditivo em um tanque em um certo período, calcula a massa de aditivo disponível em cada dia, e devolve os dados de resposta indicando o dia, o nível do tanque, a massa de aditivo e um aviso nos dias em que a massa de aditivo estever abaixo do limite mínimo. % Leitura das informações à respeito do nível diário de aditivo Ndias=input(‘Digite o número de dias analisados’); for i=1:Ndias disp(‘Dia’) , i nivel(i)=input(‘Digite o nível do tanque (m)’); end % Rotina para cálculo das massas de aditivo em cada tanque for i=1:Ndias 138 Introdução aos Processos Químicos massa(i)=pi*D^2/4*nivel(i)*dens; end % Saída dos resultados for i=1:Ndias disp(‘Dia’) , i disp(‘Nível do tanque’) , nivel(i) disp(‘Massa de aditivo’), massa(i) if massa(i)<lim , disp(‘Estoque abaixo do limite mínimo’) , end end Observação: O emprego das operações elemento a elemento presentes no Matlab (Seção 6.3) permite simplificar bastante a utilização das variáveis indexadas, eliminando muitas vezes a necessidade da utilização de laços for. É importante observar que este recurso normalmente não está disponível nas demais linguagens de programação. 11 - Funções 11.1 – Conceito e Estrutura Funções (“function files”) são uma classe especial de arquivos de comandos. Sua mecânica de funcionamento é similar as funções definidas na matemática. As funções recebem um ou mais argumentos, e partir destes argumentos, procedem a execução de um conjunto de comandos, gerando na saída um ou mais resultados numéricos. A grande vantagem das funções é que, uma vez definidas, elas podem ser empregadas quantas vezes forem necessárias em um ou mais programas diferentes. Com o objetivo de apresentar, na prática, como deve ser montado um arquivo de função, considere a criação de uma função destinada a determinar a pressão de um gás, a partir da temperatura e do volume, segundo a equação de estado dos gases ideais. A função deve ser criada em um arquivo exclusivo para ela. Todo arquivo de função deve começar pelo comando function. Ao lado deste comando, escreve-se o valor numérico da saída da função (no nosso caso p, a pressão) igualado ao nome da função (eq), seguido pelos argumentos de entrada (T,V; respectivamente, temperatura e volume). 139 Introdução aos Processos Químicos function p = eq(T,V) Seguem-se então o conjunto de definições, operações matemáticas e comandos que permitirão a função determinar o valor numérico da saída. No exemplo em questão: R=8314; p=R*T/V; Finalmente, um arquivo de função deve ser gravado necessariamente com o nome da função e a extensão “.m”. No exemplo acima, o arquivo deve ser gravado como “eq.m”. É possível, agora, utilizar a função de cálculo da pressão de um gás (eq) na linha de comando, em um arquivo de comandos qualquer ou até mesmo em outra função. Por exemplo, o comando: PT = eq(273.15,22.4); calcula o valor da pressão de um kgmol de gás ideal para T = 273,15 K e V = 22,4 m3, armazenando o resultado na variável PT. Lembrem-se que, para que o Matlab possa reconhecer a função criada, deve-se inicialmente indicar o “endereço” do arquivo (Seção 5). • Exemplo 11.1: Criar uma função que faça a conversão de volume em ft3 para litros e m3. 11.2 Variáveis Locais e Globais Quando um arquivo de comandos convencional é executado, as variáveis envolvidas são manipuladas ao longo do programa, e, no final, continuam armazenadas em um espaço de memória gerenciado pelo Matlab (“workspace”). Tente, como exemplo, executar um arquivo de comandos e depois digite o comando who. Funções, no entanto, operam de maneira diferente. As variáveis definidas no interior de uma função (variáveis locais) não são armazenadas após a execução da função, e também não interferem com as demais variáveis externas. Da mesma maneira, as operações matemáticas e os comandos utilizados no interior da função só reconhecem as variáveis internas à função. 140 Introdução aos Processos Químicos • Exemplo 11.2: Limpe as variáveis da memória do Matlab (comando clear all), execute uma vez a função gerada no exemplo da Seção 11.1 e digite o comando who. Caso seja necessário, é possível permitir que uma função reconheça uma ou mais variáveis externas. Neste caso utiliza-se o comando global, global A B C onde A, B e C são nomes de variáveis. O comando global deve ser incluído na função e também no arquivo de comando onde as variáveis globais aparecem. Em teoria, é possível nunca usar o comando global, introduzindo todos os valores numéricos necessários para o cálculo da função, ou através do argumento, ou definindo-os no interior da própria função. Mas este pode não ser o procedimento mais prático sempre. Em um programa onde um grande número de parâmetros é calculado através de um arquivo de comandos principal e depois estes parâmetros são utilizados em várias funções diferentes, torna-se mais prático “distribuir” estes parâmetros através do comando global. 12 - Bibliografia “Notas de Aula do Curso de Computação I” Eduardo Paz e Moacyr Azevedo “Matlab - User`s Guide” The MathWorks, Inc. “Matlab - Versão do estudante - Guia do Usuário” Makron Books “Mini-Curso: Uma Introdução ao Mathematica” (Apostila) Marcelo Castier 141