Prévia do material em texto
Universidade Federal do Paraná Setor de Tecnologia Departamento de Engenharia Química Grupo PET Engenharia Química MINICURSO DE MATLAB 2019/1 Ana Carla Corrêa Machado Bruna Derlan Daniela Yuri Mori Edson Yuji Suzuki Eloisa dos Santos Felipe Silva Narvas Guilherme Frasato Bastos Lucas Godinho Cassemiro Correa Marco Andrey Salle Filho Mateus de Oliveira Nespolo Patricia Cristina Pagnoncelli Rafael Schwambach Victor Matheus Mahl Tutor: Prof. Dr. Carlos Alberto Ubirajara Gontarski Curitiba 2019 2 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Grupo PET Engenharia Química Universidade Federal do Paraná 1ª edição - 2019/1 Daniela Yuri Mori Guilherme Augusto Surek Marcelo Yuji Tamura Rafael Schwambach Thiago Nishimura Vitor Lazzarotto Hecke Revisão final Daniela Yuri Mori Guilherme Augusto Surek Marcelo Yuji Tamura Marco Andrey Salle Filho Rafael Schwambach Thiago Nishimura Vitor Lazzarotto Hecke Patricia Cristina Pagnoncelli 3 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 MINICURSO DE MATLAB Noções Básicas, Vetores, Matrizes, Gráficos, Cálculo Diferencial e Integral, Equações Diferenciais Ordinárias, Simulink, Redes Neurais. 4 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Sumário CAPÍTULO 1 ..................................................................................................................................... 7 1. NOÇÕES BÁSICAS E APRESENTAÇÃO DO SOFTWARE ............................... 7 1.1. OBJETIVO ...................................................................................................................... 7 1.2. INICIALIZAÇÃO .............................................................................................................. 7 1.3. JANELAS PRINCIPAIS ................................................................................................... 7 1.4. COMMAND WINDOW ..................................................................................................... 7 1.5. CURRENT FOLDER ....................................................................................................... 8 1.6. WORKSPACE ................................................................................................................. 9 1.7. HOME ............................................................................................................................. 9 1.8. PLOTS .......................................................................................................................... 10 1.9. APPS ............................................................................................................................ 11 1.10. COMANDO LOOKFOR ................................................................................................. 12 1.11. PROGRAMAS ............................................................................................................... 12 1.12. DECLARAÇÃO DE VARIÁVEIS E CONSTANTES........................................................ 14 1.13. OPERADORES LÓGICOS ............................................................................................ 15 1.14. OPERADORES ARITMÉTICOS .................................................................................... 15 1.15. COMANDOS BÁSICOS DE SAÍDA ............................................................................... 16 1.16. COMANDOS BÁSICOS DE ENTRADA ......................................................................... 17 1.17. COMANDOS ÚTEIS DO MATLAB ................................................................................ 18 1.18. ESTRUTURA CONDICIONAL ....................................................................................... 19 1.19. ESTRUTURA DE REPETIÇÃO ..................................................................................... 21 1.20. COMANDO FOR ........................................................................................................... 21 1.21. COMANDOS WHILE, BREAK E CONTINUE ................................................................ 22 1.22. COMANDO SWITCH .................................................................................................... 24 1.23. SCRIPTS E FUNÇÕES ................................................................................................. 25 1.24. EXERCÍCIOS ................................................................................................................ 27 1.25. RESOLUÇÃO DOS EXERCÍCIOS ................................................................................ 28 CAPÍTULO 2 ................................................................................................................................... 33 2. CÁLCULO DIFERENCIAL E INTEGRAL, VETORES, MATRIZES, FUNÇÕES POLINOMIAIS E GRÁFICOS .................................................................................. 33 2.1. LIMITE .......................................................................................................................... 33 2.2. DERIVADA .................................................................................................................... 33 2.3. INTEGRAL .................................................................................................................... 34 2.4. INTEGRAL DUPLA ....................................................................................................... 34 5 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 2.5. INTEGRAL TRIPLA ....................................................................................................... 34 2.6. DECLARAÇÃO DE VETORES E MATRIZES................................................................ 35 2.7. ENDEREÇAMENTO DE VETORES E MATRIZES........................................................ 38 2.8. OPERAÇÃO COM VETORES E MATRIZES................................................................. 40 2.9. FUNÇÕES DE GERENCIAMENTO DE MATRIZES E VETORES ................................. 42 2.10. ANÁLISE DE DADOS DE VETORES E MATRIZES...................................................... 42 2.11. FUNÇÕES POLINOMIAIS............................................................................................. 43 2.12. GRÁFICOS ................................................................................................................... 43 2.13. GRÁFICOS TRIDIMENSIONAIS ................................................................................... 47 2.14. EXERCÍCIOS ................................................................................................................ 47 2.15. RESOLUÇÃO DOS EXERCÍCIOS ................................................................................ 48 CAPÍTULO 3 ................................................................................................................................... 51 3. RESOLUÇÃO DE EQUAÇÕES DIFERENCIAIS ORDINÁRIAS ....................... 51 3.1. INTRODUÇÃO .............................................................................................................. 51 3.2. MÉTODOS NUMÉRICOS PARA A RESOLUÇÃO DE EDO’S ....................................... 51 3.3. ACHANDO SOLUÇÕES NUMÉRICAS NO MATLAB .................................................... 52 3.4. LOCAL DE EVENTO ..................................................................................................... 54 3.5. TOLERÂNCIA DO MÉTODO ........................................................................................ 56 3.6. SISTEMAS DE EDO ..................................................................................................... 58 3.7. EQUAÇÕES RÍGIDAS ..................................................................................................formato .m. Isso pode ser feito, no exemplo, da seguinte forma: Definir funções dessa maneira é especialmente conveniente se o sistema em análise é muito complexo, já que possibilita o cálculo do valor final em várias etapas, o que não é possível com as funções anônimas. Por fim, a chamada do ode45 é levemente diferente do que anteriormente. Como e são vetores, pode-se plotar um gráfico do resultado obtido escrevendo: Os resultados podem ser observados na Figura 43. Figura 43 - Exemplo de utilização da ode45 Pode-se observar que os dois vetores que apareceram na janela de comandos foram bem longos (e por isso foram omitidos neste material), com 45 elementos cada. Isso se deve ao fato do MATLAB ter escolhido automaticamente o passo e o tamanho dos sub-intervalos, retornando o valor da função em cada um desses sub- intervalos. Por uma questão de praticidade, é possível escolher em quais valores da variável independente o MATLAB deve retornar. Suponha que busca-se obter os vetores do exemplo contendo 5 estimativas. Para isso, deve-se colocar no domínio da função um vetor contendo os valores desejados para a variável independente. Assim, escreve-se: 54 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Obtendo os seguintes vetores: Um detalhe importante é que essa é uma ferramenta que altera somente a exibição dos dados, então o número de sub-intervalos e o tamanho do passo utilizado pela função é praticamente o mesmo, não havendo perda de precisão. 3.4. LOCAL DE EVENTO Normalmente, os solvers de EDO’s no MATLAB trabalham dentro de um intervalo especificado para a variável independente. Entretanto, em muitos casos, busca-se parar a resolução do problema num valor específico da variável dependente. Por exemplo, quando a temperatura de um fluido num trocador de calor atinge determinado valor desejado ou quando uma conversão objetivo é atingida dentro de um reator. Dessa forma, configurando um quarto input em nosso solver de EDO’s, chamado de options, é possível parar o avanço do método em determinado ponto. Exemplo 2 – Ainda tomando a função @exemplo utilizada anterormente, encontre o ponto tal que e , ou seja, o ponto que a função retorna para o seu valor inicial. Para isso, primeiramente deve-se criar um novo script .m no seguinte formato abaixo, com ele é possível especificar o evento que procuramos. No arquivo retorno.m, a linha lookfor especifica que o programa deve procurar pelo evento , ou seja, . Já a linha stop indica que o MATLAB deverá parar de resolver o problema depois que o evento for localizado. Por último, a linha direction é responsável pelo programa reconhecer o evento se a função estiver se movendo no sentido positivo. Dessa forma, o primeiro ponto, , será ignorado pelo MATLAB pois a derivada é negativa no ponto. Em seguida deve ser criada uma variável options, usando a função odeset da forma mostrada abaixo. 55 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Depois de configurar o input options do ode45, ele deve ser chamado de forma semelhante à vista anteriormente. Nesse caso, além do novo input options, a função pode, opcionalmente, retornar mais duas variáveis, e , que representam, respectivamente, a abscissa e a ordenada do(s) evento(s) localizado(s). Além disso, o domínio foi mudado para para conter o evento buscado. Por fim, pode-se plotar o resultado obtido, como demonstrado na Figura 44. 56 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Figura 44 - Local de evento utilizando odeset Para descobrir os valores de e , basta digitar na janela de comandos, obtendo-se assim as coordenadas quando . 3.5. TOLERÂNCIA DO MÉTODO Como se viu quando a função odeset foi ativada anteriormente, existem diversas opções nos solvers que dão ao usuário um maior controle sobre o algoritmo. Talvez, as duas opções mais importantes são os controles de tolerância relativa e absoluta, RelTol e AbsTol, respectivamente. Em cada passo do método, é feita uma estimativa do erro ( ) no ponto . Para que o passo seja aceito, ele deve possuir um erro aceitável, que é definido pelas tolerâncias na expressão: Se as tolerâncias são diminuídas, a precisão da solução aumenta, entretanto o tempo para a execução do solver também, devido à diminuição do passo. Dessa forma, deve-se analisar a necessidade de cálculos de alta precisão no projeto. De maneira geral, a tolerância relativa controla o número de dígitos corretos nos componentes da solução e a absoluta representa um limiar abaixo do qual somente a magnitude da solução é importante e não os dígitos corretos dela. Uma ilustração sobre tais tolerâncias está explícita na Figura 45. 57 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Figura 45 - Tolerâncias relativa e absoluta Exemplo 3 Analise numericamente, com o solver ode45, o comportamento da EDO: Como sua solução exata é , então, evidentemente, a solução ficará muito grande perto de . Dessa forma, o domínio será usado em conjunto com a função format long, que apresenta os números por completo. Primeiramente, deve-se declarar a função . Em seguida, após criar um vetor para o domínio, o solver pode ser chamado. Entretanto, dessa vez, um aviso é projetado na tela, dizendo que é impossível cumprir as tolerâncias de execução sem reduzir o tamanho do passo abaixo do menor valor possível. Isso significa que, com o valor padrão de RelTol, o erro torna-se grande demais para ser aceitável. Assim a tolerância deve ser reduzida por meio da função odeset, utilizada de forma semelhante ao tópico anterior. 58 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Como o valor da solução exata para esse ponto é e valor calculado pelo MATLAB , pode-se ver que essa estimativa é coerente. Se a RelTol for reduzida ainda mais, a tendência é que o valor estimado se aproxime cada vez mais do valor exato. 3.6. SISTEMAS DE EDO Para resolver um sistema de EDO’s no MATLAB, o procedimento é bem similar ao de resolução de uma única equação. A diferença essencial está na declaração da função, que nesse caso só pode ser feita na forma de um script .m, das condições iniciais e das variáveis dependentes, que deverão ser representadas em um vetor coluna. Exemplo 4 Utilize o solver ode23 para aproximar os valores de e a partir do sistema de EDO’s abaixo: O script .m contendo as equações aparece abaixo. Note que as variáveis dependentes, e , estão armazenadas em um mesmo vetor, nas posições e , respectivamente. Na janela de comandos devem estar contidas as condições iniciais e a chamada do solver. A resposta será dada em duas variáveis distintas, um vetor coluna contendo os passos de x utilizados seguido por uma matriz de duas colunas, cada uma contendo os valores de e associados aos de . 59 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Por fim, para melhor visualizar os resultados, gráficos podem ser plotados da mesma forma que anteriormente. Esse procedimento rende duas curvas pelo fato de ser uma matriz, apresentadas na Figura 46 abaixo. Figura 46 - Sistemas de EDO 60 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 3.7. EQUAÇÕES RÍGIDAS As equações diferenciais rígidas são aquelas que, em geral, os erros numéricos se intensificam drasticamente ao longo da solução e/ou possuem uma variação muito maior da solução em determinados pontos do domínio do que em outros. Tomando como exemplo a EDO: Já que a variável dependente,, está multiplicada por um fator de , então pequenos erros na aproximação serão amplificados. Assim os passos a serem tomados deverão ser cada vez menores, o que pode aumentar muito o tempo computacional para se obter a solução do problema. Dessa forma, o MATLAB possui uma série de solvers específicos, como o ode15s e o ode23s, que variam drasticamente o tamanho do passo ao longo da solução para a que a resolução de problemas rígidos seja rápida e eficiente. Para efeito de comparação serão utilizados os solvers ode45 e ode15s, o último sendo o mais utilizado com equações rígidas, para resolver o PVI acima até e, em seguida, comparar graficamente as soluções obtidas e seus passos. Assim, escrevendo na janela de comandos: Obtendo-se assim, a Figura 47. Figura 47 - Comparação entre ode45 (esquerda) e ode15s (direita) 61 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Como pode-se observar na Figura 47, quando o solver passa para a área que aparenta um comportamento linear (e, portanto, de menor rigidez), o tamanho do passo permanece virtualmente o mesmo com o ode45. Enquanto que com o ode15s, o tamanho do passo aumenta consideravelmente na região linear, o que diminui o tempo de operação do solver. 3.8. SELEÇÃO DE SOLVERS IMPLEMENTADOS Além das funções já apresentadas, o MATLAB possui uma série de solvers já implementados como funções na sua biblioteca interna, sendo necessário somente declarar a equação diferencial a ser resolvida, o domínio e a condição inicial. Abaixo, na Tabela 30, encontra-se um resumo das opções de solvers existentes na biblioteca do MATLAB, junto com suas condições recomendadas. Solver Tipo de problema Precisão Quando utilizar ode45 Não rígido Média Na maior parte do tempo, o ode45 deve o primeiro método a ser utilizado. ode23 Baixa O ode23 pode ser mais eficiente que o ode45 em problemas onde uma menor precisão é exigida, ou naqueles onde há um certo grau de rigidez. ode113 Baixa a alta O ode113 pode ser mais eficiente que o ode45 em problemas onde a tolerância para o erro é mais rigorosa, ou naqueles onde a função problema exige um alto gasto computacional para sua avaliação. ode15s Rígido Baixa a média Use o ode15s quando o ode45 for ineficiente ou houver suspeita de que o problema seja rígido. Pode ser usado quando se estiver resolvendo equações diferenciais algébricas (EDA’s). ode23s Baixa O ode23s pode ser mais eficiente que o ode15s em problemas onde uma menor precisão é exigida, ou em problemas rígidos onde o ode15s não é eficaz. Nesse método, a jacobiana é recalculada a cada passo, então é recomendado provê-la na chamada da função para aumentar a eficiência e precisão. ode23t Baixa Use o ode23t se o problema é somente moderadamente rígido e é necessário apresentar uma solução sem erros de amortecimento. ode23tb Baixa Como no ode23s, o ode23tb pode ser mais eficiente que o ode15s em problemas onde uma menor precisão é exigida. ode15i Totalmente rígido Baixa Use ode15i para problemas totalmente implícitos, f(t,y,y’) = 0, e para EDO’s de ordem 1. Tabela 30 - Resumo das opções de solver do MATLAB 3.9. EXERCÍCIOS Exercício 11. A partir da coleta de dados experimentais num ensaio em batelada, chegou-se a conclusão que a reação , que ocorre em fase líquida, segue a seguinte equação cinética elementar. Agora, deseja-se dimensionar um reator PFR, que segue a seguinte equação de projeto: 62 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Para que a operação seja economicamente viável, a conversão do reagente limitante deve ser de pelo menos de Calcule o volume mínimo que o reator deve ter para atingir essa conversão nas condições especificadas: Temperatura de operação: 70°C ( ); Concentração de alimentação: e ; Vazão do reagente limitante: ; Utilize as seguintes equações para relacionar a conversão com a concentração dos reagentes: Exercício 12. As equações de Lorenz são um sistema de EDO’s proposto por Edward Lorenz em 1963 como um modelo simplificado para descrever a relação convectiva de massas de ar na atmosfera. Este sistema é expresso por: onde Utilize o solver ode45 para aproximar a solução desse sistema até . a) Para observar o comportamento da solução, plote um gráfico de em função de e também um das variáveis ao longo do tempo. b) Em seguida, para verificar o comportamento caótico do sistema, altere a condição inicial para e resolva o problema novamente, salvando a nova solução em vetores novos, para que seja possível comparar os dois resultados em um gráfico das variáveis ao longo do tempo. Exercício 13. Uma reação ocorre em dois reatores CSTR em série, como indicado na Figura 48 a seguir. Figura 48 - Exercício 13 63 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Pode-se considerar que os reatores são bem agitados, de modo que a concentração dos reagentes não varia dentro de cada reator, sendo função somente do tempo. Através de um balanço molar, pode-se determinar que a concentração dos dois compostos obedece ao seguinte conjunto de equações: onde, por exemplo, representa a concentração do composto A no reator 2. A taxa pode ser considerada e os tempo de residência . Assuma que inicialmente os reatores estavam isentos das espécies e e que a concentração alimentada é de . Determine e plote a variação da concentração dos componentes até um tempo final . Determine o tempo necessário para que o sistema atinja o estado estacionário. Considere que variações menores que possam ser desprezadas. Exercício 14. A equação de Van der Pol é uma importante equação utilizada na modelagem de processos que envolvem amortecimento não linear. Dessa forma sistemas que seguem a equação de Van der Pol são cíclicos, com momentos nos quais os componentes da solução variam lentamente e outros em que a solução varia de maneira aguda. Essa equação pode expressa por: Onde representa a coordenada espacial e é um parâmetro das características do amortecimento. Essa EDO de segunda ordem pode ser escrita como duas de primeira da seguinte forma. Considere , e . Avalie a solução utilizando o ode45 até . (Obs: a resolução utilizando o ode45 é muito lenta, sendo necessários alguns minutos para que a solução seja encontrada, devido às centenas de milhares de passos que deverão ser computados.) Obtenha outra solução (salva em vetores diferentes) para a resolução do problema usando o solver ode15s, próprio para sistemas rígidos, e compare a quantidade de elementos em ambas as soluções. Plote um gráfico para cada uma das soluções dos itens anteriores, comparando neles os passos utilizados para o cálculo delas. 3.10. RESOLUÇÃO DOS EXERCÍCIOS Inicialmente, deve-se criar uma função contendo a EDO que rege o sistema e seus parâmetros constantes. Nesse exercício, ela será chamada intuitivamente de PFR. 64 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Já se pode criar a função auxiliar para parar a resulução quando a conversão mínima for atingida. Utilizando a função odeset para configurar a variável options e chamando o solver ode45 com um domínio grande o suficiente para conter o evento desejado. O valor final do comprimento do reator foi salvo navariável , que pode ser resgatada na janela de comandos. Por fim, também é possível plotar toda a solução obtida escrevendo simplesmente: 65 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 2. a) Como sempre, é essencial declarar a função contendo o sistema de EDO’s. Nesse exercício, essa é a única função que precisa ser criada, assim é possível ir diretamente para a declaração das condições iniciais, a qual deve ser feita num vetor. Em seguida, já pode-se chamar o solver. Para plotar o atrator (gráfico de em função de ), deve-se atentar ao fato de que ambas as variáveis estão contidas numa mesma matriz, sendo diferenciadas pelo número da coluna. Assim, escreve-se: Para plotar as variáveis ao longo do tempo em um só gráfico, pode-se escrever os comandos dessa forma (para pular para a próxima linha sem que o comando seja executado imediatamente basta pressionar shift +Enter): 66 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 O resultado disso é: b) Nesse item, a obtenção da solução é praticamente idêntica à letra a), mudando somente o valor inicial de e o nome das variáveis que receberão a solução. Dessa vez, plotam-se no gráfico ambas as soluções obtidas, para efeito de comparação. 67 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 3. a) Como é de praxe, é preciso escrever o sistema de EDO’s em um arquivo .m. Nessa resolução, elas foram escritas na ordem apresentada no enunciado. Em seguida, sabendo as condições iniciais e o domínio da função, é possível obter as solução do problema. 68 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 b) Para esse item, deve ser criada uma função para identificar se o sistema entrou em regime estacionário. Para isso, pode-se usar a função max, que retorna o maior valor de um vetor ou matriz, em conjunto com a função CSTRs, que retorna todas as variações de concentrações do sistema. Em seguida, pode-se utilizar a janela de comandos, conforme já foi visto anteriormente, para encontrar a solução. Para que o gráfico apareça em uma nova janela, é necessário escrever o comando da seguinte forma: 69 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 4. a) b) Observando o tamanho das soluções é fácil observar que, nesse caso, o solver ode15s é muito mais eficiente que o ode45. O motivo disso é facilmente observável ao comparar os gráficos de ambas as soluções, presentes no próximo item. O tamanho dos passos no ode45 é virtualmente sempre o mesmo, enquanto no ode15s esse tamanho varia de acordo com a rigidez da região na qual a solução está sendo avaliada. c) 70 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 71 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 CAPÍTULO 4 4. SIMULINK 4.1. INTRODUÇÃO O Simulink nada mais é do que um ambiente de simulações presente no MATLAB, usado para fazer programações com a álgebra de blocos. Trata-se de um programa análogo ao Xcos do Scilab, que, basicamente, utiliza os mesmos princípios para a elaboração de simulações. No contexto da Engenharia Química, esse programa se mostra extremamente útil para simular malhas de controle e observar o comportamento das variáveis controladas, distúrbios e manipuladas. Por fim, cabe ao engenheiro analisar os gráficos gerados, tirar conclusões e, se necessário, mudar a estratégia de controle. Outra vantagem do Simulink está na resolução de problemas de equações diferenciais ordinárias que possam ser resolvidos por Transformada de Laplace, como equações de balanço de massa em reatores de cinética conhecida, esvaziamento de tanques e sistemas dinâmicos em geral. 4.2. INTERFACE Para acessar o Simulink é preciso clicar no ícone Simulink Library, disposto na aba Home do MATLAB, como mostrado na Figura 49. Figura 49 - Botão para iniciar o Simulink Ao inicializar o Simulink, uma nova janela abrirá mostrando a interface da biblioteca de blocos do Simulink (Figura 50). Nessa biblioteca estão organizados todos os blocos disponíveis para a simulação, discriminados por função, como operadores matemáticos, fontes, receptores e outros. 72 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Figura 50 - Interface do Simulink Figura 51 - Barra de ferramentas Aqui se encontram: 1) Retornar ou avançar páginas; 2) Busca por blocos; 3) Criar modelo ou biblioteca; 4) Abrir modelo ou biblioteca; 5) Stay on top: deixa a biblioteca sempre em primeiro plano; 6) Ajuda. 73 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 A fim de facilitar a navegação pelos inúmeros blocos presentes no software, é importante o uso do sumário encontrado ao lado esquerdo da biblioteca (Figura 52). Nesse sumário, os blocos são dispostos em diferentes categorias, como contínuos, operadores lógicos, operados matemáticos, fontes, receptores e outros. Figura 52 - Sumário de blocos Para fazer uma simulação, é preciso criar um modelo, como representado pelo número 3 na Figura 51. Uma nova janela será aberta com a área de trabalho do Simulink (Figura 53). Figura 53 - Área de trabalho do Simulink 74 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 4.3. BLOCOS Os blocos representam as ações que serão realizadas em um determinado sinal que poderá, ou não, gerar um ou mais sinais. Para adicioná-los basta selecionar na biblioteca de blocos e arrastá-lo para a janela do modelo. Outra forma é dar um clique com o botão esquerdo na janela e escrever o nome do bloco que se deseja adicionar. Na biblioteca, os blocos estão dispostos conforme sua categoria. Existem diversos tipos de blocos que desempenham as mais diferentes funções. Na Tabela 31 abaixo estão alguns dos blocos mais utilizados e uma breve descrição. Para saber mais basta clicar com o botão direito e selecionar a opção de ajuda do bloco. Cada bloco possui uma gama de variáveis que podem ser personalizadas pelo usuário, como a quantidade de saídas e entradas ou parâmetros de uma função senoidal, por exemplo. Fontes Gera um valor constante real ou complexo. Pode ser um escalar, vetor ou matriz. Gera uma função degrau, entre dois valores em um instante especificado. Gera uma função senoidal. Necessita dos parâmetros de amplitude, bias, frequência e fase. Gera pulsos no sinal. Define-se a amplitude do pulso, período e duração do pulso. Gera uma função rampa, a uma taxa constante, que pode ser positiva ou negativa. Operações Matemáticas Faz a adição ou subtração de dois ou mais escalares, vetores ou matrizes. Para definir soma ou subtração utiliza-se os sinais + ou -. Faz o produto entre escalares, um escalar e um não-escalar e entre não-escalares de mesma dimensão. No caso de matrizes, também calcula a matriz inversa. Utiliza os sinais * ou / para definir multiplicação ou divisão. 75 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Resolve zero de funções. Tem como entrada uma função algébrica f(z) e retorna o valor da variável independente em f(z) = 0. Define uma função matemática já contida no MATLAB. Entre elas: exponencial, logaritmo natural, logaritmo na base 10, potência, módulo, conjugado de número complexo, transposta, entre outros. Extrai a raíz quadrada de um escalar ou de um sinal. Retorna o valor absoluto de um sinal ou escalar ou vetor. Calcula a derivada da entrada em relação ao tempo. Calcula a integral do sinal de entrada em relação ao tempo. A diferença entre o Integrator e o Integrator Limited é que nesse último é possível colocar um limite no sinal de saída. A condição inicial pode ser inserida no próprio bloco ou utilizar uma fonte externa.Esse bloco possibilita ao usuário escrever o código de uma função no MATLAB para ser utilizado em uma simulação. Faz o cálculo de uma função matemática definida pelo usuário. Utiliza como parâmetros um vetor u com n parâmetros. Controle Modela um sistema linear com uma função de transferência no domínio de Laplace, na variável s. Só é possível utilizar uma entrada, mas pode gerar uma ou mais saídas. Simula um controlador PID (Proporcional Integral Derivativo). 76 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Coloca um delay no sinal. Coloca um limitador superior e/ou inferior no sinal de entrada. Receptores Mostra o resultado numérico de um sinal. Nas configurações é possível mudar o tipo de variável (short, long,...) e o número de casas decimais Mostra o gráfico do sinal da simulação em relação ao tempo. Semelhante ao Scope, porém nesse bloco a variável do eixo x não é o tempo, mas uma outra variável definida pelo usuário. Tabela 31 - Blocos do Simulink mais utilizados 4.4. CRIANDO UM MODELO Como exemplo para demonstrar como criar um modelo e executar uma simulação criar-se-á um modelo de um osciloscópio de uma função senoidal. Esse processo será descrito nos seguintes passos: Abrir a biblioteca do Simulink e a biblioteca de blocos; Procurar pelo bloco Sine Wave, que está localizado em Sources (fontes), e adicioná-lo na janela de modelo; Procurar pelo bloco Scope, no agrupamento Sinks; Criar uma linha conectando a saída do bloco do seno com a entrada do bloco Scope. Caso a linha não esteja devidamente conectada aos blocos a linha ficará tracejada e na coloração vermelha; Ao clicar no texto abaixo de cada bloco é possível editar o seu nome; É possível criar comentários ou tags no modelo com o duplo clique com o botão esquerdo em no local que desejar; Para acessar as configurações do bloco basta dar um duplo clique no bloco. Essa ação abrirá uma janela para inserir ou modificar parâmetros exclusivos de cada bloco. No caso da função seno é possível alterar a amplitude, frequência, deslocamento, entre outros; Com um duplo clique no Osciloscópio uma janela de gráfico será aberta para poder acompanhar os resultados. Essa ação pode ser realizada depois de executar a simulação; 77 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Por último, para executar a simulação, basta clicar no botão Run, em verde. Obtemos, assim uma tela similar à explícita na Figura 54. Figura 54 - Diagrama e resultado da simulação. Para arrumar as escalas do eixo, basta clicar no botão Autoscale. Também é possível dar um zoom em uma determinada área do gráfico apenas selecionando essa área. Ao clicar no botão Parameters, pode-se mudar o estilo do gráfico, como as cores das linhas. Nesse exemplo pode-se observar que os valores de x (tempo) estão limitados ao valor 10, que é o padrão do Simulink. Pode-se alterar esse valor na janela do modelo na área, como destacado na Figura 55. 4.5. EXERCÍCIOS Exercício 15. Desenvolva a álgebra de blocos para determinar as raízes da seguinte equação de 2º grau: Exercício 16. Dada uma reação simples do tipo elementar e irreversível, com a constante cinética k = 0,25 mol/m³.h e concentração do reagente A no instante t = 0 mol/m³. Essa reação é processada em um reator batelada que opera de forma isotérmica. Com isso: a) desenvolva uma simulação para construir um perfil da concentração do reagente A pelo tempo; b) repita o exemplo a) porém avaliando o perfil da conversão do reagente A pelo tempo. Equação a : Taxa de uma reação irreversível de 1ª ordem em função da concentração Figura 55 - Mudança no tempo de simulação. 78 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Equação b : Taxa de uma reação irreversível de 1ª ordem em função da conversão Exercício 17. São alimentados a um reator PFR (Plug Flow Reactor) dois reagentes, A e B, que produzem um produto P como mostrado na equação abaixo: Considerando que as concentrações da alimentação são mol/l e mol/l; a reação é elementar e o reator opera isotermicamente e possui uma área A da seção transversal constante, construa o perfil da conversão do reagente A pelo comprimento do reator. Equação de projeto de um reator PFR: Equação da taxa do reagente A para uma reação bimolecular, irreversível e de segunda ordem: Fonte: Levenspiel Exercício 18. Em um reator CSTR (Continuous Stirred Tank Reactor) de 380 m³ é alimentado uma corrente de vazão Q = 200 m³/h contendo o reagente A a uma concentração de 10 mol/m³. Dada uma reação simples de primeira ordem e irreversível, com a constante de velocidade k = 3 mol/m³.h. Construa o perfil da concentração no reator durante início da operação (regime transiente até atingir o regime estacionário) pelo tempo, considerando que o reator opera de forma isotérmica. Verifique o tempo para atingir o regime estacionário. Exercício 19. Resolva a equação diferencial de segunda ordem a seguir, com a condição inicial de e 79 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 4.6. CONTROLE DE PROCESSOS Ao estudar o comportamento de uma malha de controle ou de uma variável de processo conforme um distúrbio atua sobre o sistema, o Simulink se mostra um software de extrema importância, pois há ferramentas especificas para estudar essas variações com as simulações. Contudo, como se trata de uma matéria que requer um conhecimento mais avançado sobre engenharia química, nesse minicurso será apenas apresentado um exemplo simples de aplicação do Simulink em controle de processos. Antes do exemplo, é preciso entender alguns conceitos básicos de controle para poder compreender melhor o exercício. Primeiro, para que serve o controle? O controle serve para que uma variável de interesse, a variável controlada, esteja dentro do que foi especificado. Por exemplo, a temperatura de saída da corrente quente de um trocador de calor. E de que forma pode-se controlar essa variável? Existem várias formas e várias estratégias de se fazer isso, que serão vistas com mais detalhes na disciplina de Controle de Processos. Uma dessas formas é pela vazão de entrada da corrente fria desse trocador de calor (variável manipulada). Se a temperatura de saída da corrente quente estiver acima do desejado (Set-Point), deve-se aumentar a vazão da corrente fria. Para o caso oposto, da temperatura de saída da corrente quente abaixo do set-point, deve-se diminuir a vazão da corrente fria. Como primeiro exemplo, desenvolva um diagrama para avaliar o comportamento da variável controlada ao aplicar uma variação do tipo degrau no sistema. Para isso, é preciso usar os blocos Step, Transfer Fcn e Scope. O Step é a função degrau, ou seja, em um determinado intervalo de tempo a função vale zero e, após esse intervalo, passa a ter outro valor especificado. O Transfer Fcn permite ao usuário inserir os parâmetros da função de transferência do processo na ordem decrescente do expoente de “s”. Ou seja, se a função desejada for 3s³-4s²+s+4, é preciso inserir os parâmetros [3 -4 1 4]. No caso, a função de transferência será 1/s+1. O diagrama e o resultado da simulação são mostrados na Figura 56 e Figura 57 a seguir. Figura 56 - Diagrama de blocos. Figura 57 - Resultado da simulação 80 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 O gráfico da simulação mostra o comportamento da variável controlada até atingir o regime estacionário. Acontinuação do exemplo será introduzir um sistema de controle, que é representado pelo bloco PID Controller. Esse bloco define a contribuição de cada uma das 3 partes de um controlador: Proporcional, Integral e Derivativo. Esses parâmetros serão definidos como na Figura 58. Figura 58 - Parâmetros do controlador PID Figura 59 - Diagrama da malha de controle. 81 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Figura 60 - Resultados da simulação das variáveis controlada e manipulada. Essa malha de controle é do tipo Feedback, ou seja, o controle passa a atuar somente se verificar um erro entre o set-point e o valor da variável controlada. O set-point é representado pela linha roxa no segundo gráfico, juntamente com a variável controlada. A variável manipulada é representada no primeiro gráfico. 4.7. RESOLUÇÃO DOS EXERCICIOS 15. Nesse exercício são necessários os seguintes blocos: 3 Constants; 1 Gain; 1 Bus Creator; 2 Subtracts; 2 Divides; e 2 Displays. Não há muitos segredos na elaboração desse exercício, mas é necessário ter cuidado com a utilização do Bus Creator e do Fcn no momento de ordenar as constantes, sendo u(1) = a, u(2) = b e u(3) = c. 82 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 16. a) Blocos necessários para resolução do exercício: 1 Constant; 1 Product; 1 Integrator; 1 Scope. Nesse exercício é preciso tomar dois cuidados principais. O primeiro é com relação ao sinal da constante cinética k. O outro está na condição inicial do problema, que, no caso, é a concentração inicial do reagente A. Essa informação é inserida no Integrator. 83 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 84 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 b) Nesse item é necessário colocar 2 blocos a mais em relação ao item a: 1 Constant e 1 Subtract. Além disso, o sinal da constante cinética é trocado e é preciso mudar a condição inicial de integração, que será de conversão igual 0. Pode-se mudar a configuração do Integrator para usar uma condição inicial externa, sendo assim, necessário colocar mais uma constante para isso. 85 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 17. São necessários os seguintes blocos: 6 Constants; 2 Divides; 2 Subtracts; 1 Integrator; 1 Scope. Nesse exercício não há muitos segredos com a montagem do diagrama, a não ser pelo bloco “Divide1” que apresenta 6 entradas e apenas uma saída. Para configurá-lo basta acessar a janela do bloco e digitar a sequência “*****/”, que correspondem às operações matemáticas envolvidas. 86 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 18. Blocos utilizados: 4 Constants; 2 Subtracts; 2 Products; 1 Divide; 1 Integrator e 1 Scope. Nesse exercício a condição inicial vem de uma fonte externa. Essa opção pode ser selecionada na janela de opções do bloco em “Limit Output”. 87 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 19. Blocos utilizados: 1 Constant; 1 Subtract; 2 Gains; 2 Integrator e 1 Scope. 88 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 CAPÍTULO 5 5. REDES NEURAIS Nota de abertura: Este material é baseado no curso de Machine Learning oferecido pela Universidade de Stanford, ministrado pelo professor Andrew Ng. Curso disponível em: https://www.coursera.org/learn/machine- learning. 5.1. O QUE SÃO REDES NEURAIS? São modelos computacionais inspirados pelo sistema nervoso central de um animal (em particular o cérebro) que são capazes de realizar o aprendizado de máquina bem como o reconhecimento de padrões. O cérebro é um computador altamente complexo, não-linear e paralelo. Ele tem a capacidade de organizar seus constituintes estruturais, conhecidos como neurônios, de forma a realizar certos processamentos (i.e. reconhecimento de padrões, percepção e controle motor) muito mais rapidamente que o mais rápido computador digital hoje existente. Uma rede neural é um processador maciçamente e paralelamente distribuído constituído de unidades de processamento simples, que têm a propensão natural para armazenar conhecimento experimental e torná-lo disponível para o uso. Ela se assemelha ao cérebro em dois aspectos: 1) O conhecimento é adquirido pela rede a partir de seu ambiente através de um processo de aprendizagem; 2) Forças de conexão entre neurônios, conhecidas como pesos sinápticos, são utilizadas para armazenar o conhecimento adquirido. Simon Haykin, 2001 5.2. MODELO DE UM NEURÔNIO Um neurônio artificial é uma unidade de processamento central dentro de uma rede neural, no qual os sinais elétricos ou digitais são recebidos, processados e enviados. Na Figura 61 é apresentado um modelo de neurônio artificial. Figura 61 - Modelo de um neurônio artificial. Há três principais regiões em um neurônio artificial. A primeira delas é um conjunto de sinapses ou elos por onde chegam os sinais de entrada, que em seguida serão ajustados de acordo com um peso ou força própria de cada sinal. Em outras palavras, cada variável de entrada Xj, proveniente de uma sinapse j, será multiplicada por um peso wki, que representa a força da sinapse j no neurônio k. A segunda é a região de combinação linear de todos os sinais recebidos pelo neurônio k, ou seja, todos os sinais, já tendo sido multiplicados pelos seus respectivos pesos, serão somados em um único sinal Vk, e a terceira região é onde o sinal resultante Vk terá sua amplitude restringida pela função de ativação (x) a um valor finito yk, tipicamente entre 0 e 1 ou -1 e 1. Além dessas regiões, há um termo de ajuste de entrada da função de ativação, o bias, aumentando ou diminuindo o valor líquido. Em termos matemáticos a modelagem do neurônio artificial k pode ser apresentada da seguinte forma: 89 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 (3) (4) (5) Onde x1, x2, ..., xm são os sinais de entrada; wk1, wk2, ..., wkm são os pesos sinápticos do neurônio k; uk é a saída do combinador linear; bk é o bias; Vk é o sinal de saída do combinador linear ajustado com o bias; (x) é a função de ativação; e yk é o sinal de saída do neurônio k. 5.3. FUNÇÃO DE ATIVAÇÃO Existem várias formas de representar a função de ativação (x), iremos apresentar algumas delas na Figura 62. Figura 62 - Representações de funções de ativação. A) Função Limiar; b) Função Linear por Partes; c) Função Sigmoidal; d) Função Gaussiana; Função Limiar: Caracterizada pela transição direta no limiar. Na equação (18) o limiar é 2. (6) Função Linear por Partes: Caracterizada por uma transição linear entre o máximo e o mínimo. (7) Onde (8) Função Sigmoidal: Caracterizada por uma transição mais suave e em forma de S. (9) 90 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Função Gaussiana: Caracterizada por um pico em um único ponto e uma curva em forma de sino. (10) 5.4. ARQUITETURAS DE REDE A arquitetura da rede neural define a disposição dos neurônios e como serão feitas as conexões sinápticas entre eles. Existem vários tipos de arquiteturas como redes alimentadas com camada única, redes alimentadas com camadas múltiplas, redes recorrentes, entre outras. Abordaremos apenas a arquitetura de redes alimentadas com camadas múltiplas. Neste tipo de arranjo há uma camada inicial, também chamada de camada de entrada, há uma ou mais camadas ocultas e uma camada de saída. A função dos neurônios ocultos é trazer maior complexidade ao sistema, extraindo estatísticas de ordem mais elevada. Quanto maior a camada de entrada e as camadasocultas, maior a capacidade da rede de extrair essas estatísticas, no entanto, quanto maior for a rede, maior a quantidade de dados que precisará para treiná-la. Na Figura 63, há um exemplo de arquitetura de uma rede com quatro sinais de entrada, uma camada oculta de três neurônios e uma camada de saída com dois neurônios, gerando dois sinais de saída. Nesta rede objetiva-se extrair duas informações de quatro parâmetros diferentes. Tirando os quatro círculos da camada de entrada, cada círculo da figura representa um neurônio, portanto, esta rede neural possui 5 neurônios artificiais. Figura 63 – Uma arquitetura de rede neural 4x3x2 e seus neurônios. Os quatro parâmetros de entrada são enviados todos aos três neurônios da primeira camada oculta, onde serão multiplicados pelos seus respectivos pesos e somados. (11) 91 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Em seguida é aplicado a função de ativação. (12) Os sinais resultantes serão enviados à camada de saída, que também serão processados e gerados uma resposta final para cada neurônio. (13) (14) As variáveis e são os sinais de resposta da rede. É comum, em aplicações de classificação, aplicar sobre esse sinal uma linha de corte (i.e. se o sinal resultante for maior que 0,7, o resultado é positivo, caso contrário é negativo). Em termos matemáticos uma rede neural é um conjunto de equações lineares, com uma aplicação de não- linearidade entre cada um dos conjuntos de equações. Essa rotina de cálculos apresentada acima, até chegar-se a uma resposta final, é chamada de feedfoward. O arranjo da rede é definido com base na complexidade da resposta desejada e na quantidade de dados que se possui. Geralmente o número de neurônios das camadas ocultas são iguais (i.e. 4x4 ou 3x3x3) e o número de neurônios na camada final depende do número de respostas que se deseja obter. 5.5. APRENDIZAGEM DA REDE NEURAL A aprendizagem é um processo de ajustes dos pesos de cada ligação sináptica por meio de uma estimulação pelo ambiente no qual a rede está inserida. O tipo de aprendizagem é determinado pela maneira como este ajuste é feito. Portanto, uma rede neural é estimulada por um ambiente, sofre modificações e responde de uma maneira nova ao ambiente. Além disso, há duas formas de se realizar a aprendizagem, com ou sem supervisão. Neste capítulo iremos trabalhar em um exercício de classificação, portanto iremos focar a abordagem neste tipo de problema. E para ensinar uma rede neural de classificação iremos minimizar uma função custo por meio dos ajustes nos pesos, como citado acima. 5.6. FUNÇÃO CUSTO OU FUNÇÃO OBJETIVO A função custo ou função objetivo é uma função que lhe retorna o quão distante da realidade está sua rede neural, quão bem a rede está conseguindo extrair informação das entradas (X’s) e chegando ao resultado esperado (y). O processo de aprendizagem de uma rede neural é o ajuste dos pesos a fim de minimizar a função custo. Existem muitas formas de se calcular esta função, tais como erro simples, erro médio simples, erro médio quadrado, entropia cruzada, entre outros. O erro médio quadrado, equação (18), é comumente utilizado nesta abordagem para redes neurais de predições numéricas, isto é, cujo resultado final é um valor finito e não uma classificação. 92 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 (15) Já a entropia cruzada, equação (18), é utilizada para problemas de classificação, também chamados de regressão logística, no qual o resultado da rede neural é uma porcentagem. Por exemplo, deseja-se classificar imagens entre cães e gatos; o resultado da rede neural será dois parâmetros indicando uma porcentagem de ser cada um deles, uma resposta 0,8 cão e 0,4 gato, indicará que a rede neural classificou aquela imagem como sendo mais próxima a um cão do que a um gato. (16) Aplicando-o ao contexto de uma rede neural, tem-se: (17) Onde J( ) é a função custo, é a matriz de pesos sinápticos, m é o número de exemplos de treino que serão usados para treinar a rede neural, é a classificação correta de cada exemplo de treino i (exemplo, cão ou gato), é o(s) sinal(is) de resposta da rede neural, também chamadas de hipótese, e são as os parâmetros de entrada de cada exemplo de treino i. 5.7. FEEDFORWARD O feedforward, ou propagação da rede neural, é o cálculo do resultado dela propriamente dito, isto é, a partir das variáveis de entrada, multiplicar pelos pesos sinápticos, efetuar a somatória, aplicar a função de ativação, e seguir toda a arquitetura da rede até que se chegue ao resultado final, sempre se movendo em uma única direção. 5.8. BACKPROPAGATION A backpropagation, ou propagação reversa, faz parte do método de aprendizagem da rede neural, onde calcula- se o gradiente de erro da matriz de pesos sinápticos. O cálculo inicia-se pela resposta da rede e regride até a primeira camada de neurônios, por isso propagação reversa. Após calcularmos os gradientes, aplica-se um método de otimização para ajustar os pesos. Uma vez que os pesos foram ajustados, calcula-se novamente a função custo e verifica-se se o erro chegou a um nível aceitável ou se precisa de uma nova iteração. 5.9. PREDIÇÕES/CLASSIFICAÇÕES Uma vez que a rede neural está treinada você pode aplicá-la a novos valores de entrada. No caso do exemplo de classificação entre cães e gatos, você poderá fornecer uma nova imagem a rede, aplicar o feedforward e obter o resultado. 5.10. EXERCÍCIO Exercício 20. Problema de Classificação de Dígitos Manuscritos. 93 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Atualmente o chamado OCR, ou Optical Character Recognition (Reconhecimento Ótico de Caracteres), é uma ferramenta amplamente utilizada em vários sistemas e aplicativos. Por exemplo, aqueles aplicativos em que se tira uma foto da nota fiscal e o aplicativo reconhece os produtos e os valores, salvando a informação em sua base para seu controle de finanças pessoais. O objetivo deste exercício será configurar e treinar uma rede neural para identificar dígitos escritos à mão, como na Figura 64. Figura 64 - Dígito 2 escrito à mão Fazem parte desta aula os seguintes arquivos: aula6.m – Código MATLAB/Octave que o guiará pelo exercício aula6dados.mat – Conjunto de treino de dígitos manuscritos aula6pesos.mat – Pesos da rede neural para o exercício mostrarDados.m – Função para visualizar o conjunto de dados fmincg.m – Rotina de otimização¹ sigmoid.m – Função de ativação sigmoidal computaGradienteNumerico.m – Calcula os gradientes numericamente verificaGradientesRN.m – Função que o ajudará a verificar seus gradientes inicializarPesosDepurar.m – Função para inicializar pesos predizer.m – Função de predição da rede neural, executa o feedforward inicializarPesosAleatorios.m – Inicializar pesos aleatórios para a rede neural [*] gradienteSigmoid.m – Calcula o gradiente da função sigmoidal [*] rnFuncaoCusto.m – Função custo da rede neural ¹Função fornecida pelo curso Machine Learning, autoria de Andrew Ng, da Universidade de Stanford. Os arquivos marcados com [*] serão os arquivos em que você deverá completar o código. Os demais arquivos já estão prontos para execução do código. Para fazer o download dos arquivos, acesse o link bit.ly/matlabaula6. Fluxo do Exercícioe Execução do Programa: Antes de iniciarmos o exercício faremos uma explicação sobre a execução do programa e o fluxo para aplicar a rede neural. A execução principal do código é realizada pelo arquivo “aula .m”, você pode abri-lo em modo edição e acompanhar as explicações junto com a leitura do código. Neste exercício não iremos abordar a parte de aquisição de imagem, logo, começaremos o exercício carregando um banco de dados com 5000 imagens, salvo no arquivo “aula6dados.mat”, além de definir a arquitetura da rede neural, que será 1 camada oculta com 25 neurônios e 10 neurônios na camada de saída, representando as 10 classificações possíveis (de 0 a 9). Cada imagem possui um formato 20x20 preto e branco totalizando 400 pixels, um exemplo é mostrado na Figura 65. 94 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Figura 65 - Exemplo de uma imagem de dígito do banco de dados - aula6dados.mat. Está imagem, para o computador, é vista como uma matriz 20x20 de números decimais que variam perto de -1 a 1, Figura 66. Uma imagem normal possui pixels que variam entre 0 e 255, em três camadas de cores (RGB), entretanto, ao trabalhar com 3 camadas de cores além de aumentar o número de entradas, requerindo um número maior de exemplos de treino, trabalhar com um intervalo de valores muito grande (0 a 255) tornará o aprendizado da rede neural lento, atrapalhando a rotina de otimização dos pesos. Figura 66 - Matriz de uma imagem de dígito. No entanto, não há como armazenarmos 5000 matrizes de uma forma prática, logo, cada imagem será aberta em uma única linha com 400 colunas. Na sequência, vinte imagens aleatórias serão escolhidas do banco de dados e mostradas em uma figure, utilizando a função “mostrarDados.m”. Carregaremos pesos da rede neural já ajustados previamente, a partir do arquivo “aula6pesos.mat”, para que você possa comparar os resultados que chegará com os resultados verdadeiros. Neste momento o programa irá verificar o cálculo da função gradiente sigmoid do arquivo “gradienteSigmoid.m”, a qual você deverá completar o código. Mais informações sobre os arquivos que você deverá completar serão apresentadas na sequência. Uma vez verificado a função gradiente, o programa irá executar o cálculo da função custo sem regularização, pelo arquivo “rnFuncaoCusto.m”, o qual você também deverá completar o código. Será efetuado um feedforward na rede neural, utilizando os pesos já ajustados, e calculando o custo comparando a hipótese gerada pela rede com o resultado real. Um resultado será mostrado na janela de execução e a resposta correta estará logo a baixo. Caso seu resultado não tenha dado o mesmo valor, confira novamente o seu código. Após efetuar o cálculo da função custo sem regularização, você deverá implementar o cálculo com regularização, no mesmo arquivo. O programa irá verificar se a regularização foi implementada corretamente e mostrará o resultado obtido e o resultado correto. 95 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Na sequência serão inicializados os pesos da rede neural que iremos treinar, utilizando o arquivo “inicializarPesosAleatorios.m”. Esta etapa de inicialização dos pesos é uma etapa muito importante na implementação de uma nova rede neural. Os pesos inicializados não podem ser iguais a zero e também não podem ser todos iguais. Se os pesos forem iguais a zero todas as multiplicações irão dar zero e não conseguiremos obter nenhum resultado com a rede, muito menos fazê-la aprender alguma coisa. Se todos os pesos forem iguais a rede neural não saberá reconhecer os parâmetros que são mais importantes, e também não conseguirá aprender nada. Portanto, ao inicializar os pesos de uma nova rede é necessário que sejam diferentes de zero e diferentes entre si. Outra dica importante é que os pesos não tenham valores altos, para não gerar muita diferença entre os sinais, o que deixa o processo de aprendizagem lento. Na sequência o programa irá testar a retroalimentação, ou backpropagation, sem e com regularização, utilizando o arquivo “verificaGradientesRN.m”. A backpropagation é um método para calcular o erro da rede neural e indicar para onde ela deve seguir para melhor a assertividade, calculando os gradientes da matriz de pesos. Uma vez que tudo está funcionando corretamente é hora de treinar a nossa nova rede neural. Um treino de rede neural nada mais é do que mostrar a ela um parâmetro (no nosso caso uma imagem) e dizer o que é (i.e. número 3), em seguida mostrar outro e outro, até ela conseguir identificar por si só novos parâmetros (novas imagens). Em termos matemáticos, iremos calcular os gradientes e otimizar a função custo, utilizando uma rotina de minimização “fmincg.m”, desenvolvida pelo Andrew Ng, afim de encontrar os melhores valores para os pesos sinápticos que nos tragam a predição correta da imagem, como se fosse um mínimos quadrados mais complexo. Durante o treino haverão várias iterações, em cada uma delas será calculado a hipótese da rede para determinado conjunto de parâmetros, o custo desta hipótese, o gradiente da rede, e seus pesos serão ajustados um pouco, a fim de melhorar o resultado. Há duas formas de finalizar o treinamento, definindo um número máximo de iterações ou definindo um erro mínimo a ser atingido. A mais comum é um número máximo de iterações, para se ter mais controle sobre a execução do programa. Após realizado o treinamento, nós iremos visualizar uma prévia do que a rede neural está buscando, isto é, iremos visualizar, em formato de imagem, o que os pesos sinápticos valorizam mais em uma imagem analisada. Na Figura 67, cada quadrado representa a matriz de pesos de cada um dos 25 neurônios da camada oculta. As regiões importantes são as regiões mais próximas ao branco ou ao preto, regiões cinzas são as menos importantes ou até desconsideradas pelo neurônio. Figura 67 - Visualização da matriz de pesos sinápticos em formato de imagens. 96 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Por fim, o programa irá aplicar a rede neural em todo o conjunto de dados e irá indicar qual a taxa de assertividade do modelo sobre este conjunto de dados, utilizando o arquivo “predizer.m”. Como os parâmetros inicializados são aleatórios, toda vez que o programa executar será obtido um resultado diferente, porém variando entre 92 a 95%. Para aplicar a sua rede neural à novas imagens, primeiramente você deverá fazer um tratamento nas imagens, transformando-as em escala de cinza e no tamanho 20x20. Na sequência, você precisa reduzir a intensidade da escala de 0 a 255 para -1 a 1 e salvar esta matriz de imagem em um vetor de uma única linha com 400 coluna. E então você utiliza a função predizer(Theta1, Theta2, vetor) fornecendo os pesos sinápticos treinados (Theta1 e Theta2) e o vetor da sua imagem. Agora você irá trabalhar nos dois arquivos que são necessários completar o código, o arquivo do gradiente sigmoid e o arquivo da função custo. Gradiente Sigmoid: Iremos iniciar o exercício montando o código para calcular o gradiente da função sigmoidal. Abra o arquivo “gradienteSigmoid.m” em um editor de texto ou no próprio Matlab/Octave como editor. A função sigmoidal, como apresentada na equação (9), tem o seguinte formato. A função sigmoid aplicada para a função de ativação ficará da seguinte forma. (18) Onde é a função sigmoid, e é o parâmetro de entrada da função, podendo ser um valor único, um vetor ou uma matriz. O gradiente de uma função nada mais é que sua matriz de derivadas parciais. Portanto o cálculo que você deve fazer no espaço indicado no arquivo é o cálculo da derivada de g(z) com respeito a z. Nota: Nesta função deve ser possível trabalhar com valores único, vetores e matrizes. Para efetuar cálculos valor a valor em vetores e matrizes, tais como multiplicação e divisão utilizar “.*”e “./”. Função Custo: Agora iremos completar o código que fornece o resultado da função custo de nossa rede neura, assim como o algoritmo de backpropagation. Abra o arquivo rnFuncaoCusto.m em um editor de texto ou no MATLAB/Octave. Como se trata de um problema de classificação (reconhecimento de dígitos), a função custo utilizada será a de entropia cruzada: Onde m é o número de exemplos (número de imagens) e K é o número de classes, que é igual a 10 (10 algarismos possíveis). Assim, para determinar o valor desta função necessitamos saber: as respostas corretas/esperadas para o reconhecimento de dígito ( ) e a hipótese/predição da rede neural na presente iteração ( ). A predição da rede neural é dada pelo processo de feedforward: 97 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Observação: perceba que a matriz de entrada X não possui o bias, que deve ser implementado antes da multiplicação pela matriz de pesos. O bias também deve ser inserido na matriz . deve ser uma matriz com as mesmas dimensões que a matriz (número de classes x número de exemplos), onde, para cada exemplo, o dígito correto deve ser indicado pelo número 1 e os dígitos incorretos pelo número 0. Exemplo: se o dígito da 3ª imagem é um 8, espera-se que: Com as matrizes e calculadas, é possível implementar o código de cálculo da função custo J. O próximo passo é a implementação do algoritmo de propagação reversa. Este processo é necessário para otimizar os pesos com base no erro da rede neural em relação ao resultado esperado. O primeiro passo é computar este erro, que, para a arquitetura de rede neural proposta, é a diferença entre a predição e o resultado correto: (17) Em seguida, realizam-se as seguintes operações: (18) Na multiplicação elemento a elemento entre e , deve-se desconsiderar a primeira linha de . Após isso, acumulam-se os deltas através das seguintes operações: (19) Após o cálculo de e , calculam-se os gradientes para a função custo da rede neural com respeito aos pesos, através da seguinte expressão: (20) Esses gradientes serão utilizados pela rotina de otimização para melhorar as matrizes dos pesos da rede neural. 5.11. RESOLUÇÃO DO EXERCÍCIO Gradiente Sigmoid dg = (1 ./ (1 + exp(-z))) .* (1 - (1 ./ (1 + exp(-z)))); 98 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Função Custo % Adicionar um's à matriz de dados X X = [ones(m, 1) X]; % Transformar as classes do y em um vetor y yVec = zeros(n_classes, m); for i = 1:m yVec(y(i),i) = 1; end % Calcular a segunda camada, adicionar um's (bias) à segunda camada calculada e % calcular a terceira camanda z2 = Theta1 * X'; a2 = [ones(1, m); sigmoid(z2)]; h= sigmoid(Theta2 * a2); % Calcular a função custo não regularizada, da rede neural J = sum(sum(1 ./ m .* ( -yVec .* log(h) - ((1 - yVec) .* log(1 - h))))); % Calcular a regularização if lambda ~= 0 J = J + lambda / (2 * m) * (sum(sum(Theta1(:,2:(camada_entrada_tamanho + 1)) .* Theta1(:,2:(camada_entrada_tamanho + 1)))) + sum(sum(Theta2(:, 2:(camada_escondida_tamanho + 1)) .* Theta2(:, 2:(camada_escondida_tamanho + 1))))); end % Calcular os Deltas delta3 = h - yVec; delta2 = Theta2' * delta3; delta2 = delta2(2:end, :) .* gradienteSigmoid(z2); % Calcular os gradientes dos Thetas Theta1_grad = (delta2 * X) ./ m + lambda ./ m .* [zeros(camada_escondida_tamanho, 1), Theta1(:, 2:end)]; Theta2_grad = (delta3 * a2') ./ m + lambda ./ m .* [zeros(n_classes, 1), Theta2(:, 2:end)];60 3.8. SELEÇÃO DE SOLVERS IMPLEMENTADOS .............................................................. 61 3.9. EXERCÍCIOS ................................................................................................................ 61 3.10. RESOLUÇÃO DOS EXERCÍCIOS ................................................................................ 63 CAPÍTULO 4 ................................................................................................................................... 71 4. SIMULINK ........................................................................................................ 71 4.1. INTRODUÇÃO .............................................................................................................. 71 4.2. INTERFACE .................................................................................................................. 71 4.3. BLOCOS ....................................................................................................................... 74 4.4. CRIANDO UM MODELO ............................................................................................... 76 4.5. EXERCÍCIOS ................................................................................................................ 77 4.6. CONTROLE DE PROCESSOS ..................................................................................... 79 4.7. RESOLUÇÃO DOS EXERCICIOS ................................................................................ 81 CAPÍTULO 5 ................................................................................................................................... 88 5. REDES NEURAIS ............................................................................................ 88 5.1. O QUE SÃO REDES NEURAIS? .................................................................................. 88 5.2. MODELO DE UM NEURÔNIO ...................................................................................... 88 5.3. FUNÇÃO DE ATIVAÇÃO .............................................................................................. 89 6 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 5.4. ARQUITETURAS DE REDE ......................................................................................... 90 5.5. APRENDIZAGEM DA REDE NEURAL.......................................................................... 91 5.6. FUNÇÃO CUSTO OU FUNÇÃO OBJETIVO ................................................................. 91 5.7. FEEDFORWARD .......................................................................................................... 92 5.8. BACKPROPAGATION .................................................................................................. 92 5.9. PREDIÇÕES/CLASSIFICAÇÕES ................................................................................. 92 5.10. EXERCÍCIO .................................................................................................................. 92 5.11. RESOLUÇÃO DO EXERCÍCIO ..................................................................................... 97 7 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 CAPÍTULO 1 1. NOÇÕES BÁSICAS E APRESENTAÇÃO DO SOFTWARE 1.1. OBJETIVO O foco desta aula é introduzir aos participantes do minicurso as ferramentas e demais recursos do MATLAB, que se trata de um software interativo de alta performance aplicado ao cálculo numérico. O programa integra análise numérica, realiza operações com vetores e matrizes, resolve Equações Diferenciais Ordinárias (EDO’s) e Parciais (EDP’s), além de construir gráficos e realizar muitas outras funções; tudo isso num ambiente e sintaxe fáceis de utilizar e aprender. 1.2. INICIALIZAÇÃO Para iniciar o programa, clique sobre o ícone do MATLAB. Feito isso, já podemos ver a tela inicial do software, como mostrado na Figura 1. Figura 1. Tela inicial do MATLAB Quando inicializamos o MATLAB, podemos perceber que o software apresenta uma interface bastante dinâmica, permitindo ao usuário trabalhar utilizando várias abas simultaneamente. As diferentes janelas e botões da tela inicial do MATLAB serão explicadas a seguir. 1.3. JANELAS PRINCIPAIS Podemos notar que o MATLAB apresenta 3 janelas (ou abas) principais, o que permite uma visualização mais dinâmica do programa. Cada aba apresenta seu nome no canto superior esquerdo, e são elas: Command Window, Current Folder e Workspace. As janelas apresentam funções diferentes, e serão explicadas e descritas nas seções a seguir. 1.4. COMMAND WINDOW A aba Command Window (janela de comando), que está no centro da tela, é a mais importante dentre as três citadas, pois é nela que o usuário pode digitar comandos, realizar operações simples, 8 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 definir variáveis, chamar funções, plotar gráficos, receber o resultado do seu programa, e em caso de algum erro na sintaxe do mesmo, será nesta janela que mostrará em qual linha o erro se encontra, e qual erro foi cometido. Uma vez que o comando for digitado e a tecla Enter apertada, a instrução será imediatamente realizada. A Figura 2 explicita a janela de comando, e alguns exemplos de definição de variáveis e operações matemáticas simples. Figura 2. Aba Command Window do MATLAB 1.5. CURRENT FOLDER A aba Current Folder, que está no canto superior esquerdo do MATLAB, serve para abrir programas feitos anteriormente, pastas e arquivos rapidamente. A Figura 3 mostra a janela discutida nesta seção. 9 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Figura 3. Aba Current Folder 1.6. WORKSPACE A aba Workspace, no canto inferior esquerdo, tem como função mostrar para o usuário o nome e o valor das variáveis que estão sendo utilizadas. Sua função pode ser comparada com a aba Navegador de variáveis, do Scilab. A Figura 4 representa a aba Workspace com algumas variáveis aleatórias. Figura 4. Aba workspace 1.7. HOME No canto superior do MATLAB, vemos 3 abas, denominadas “Home”, “Plots”, e “Apps”. A primeira aba, Home, é representada na Figura 5. 10 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Figura 5. Home Na aba Home, percebemos que os botões são divididos em blocos: File, Variable, Code, Simulink, Environment e Resources. No primeiro bloco, os botões referem-se basicamente a criar e abrir algum script, função, figura ou simulação do Simulink. No bloco Variable é possível manipular as variáveis, podendo importá-las de outros arquivos, criar, editar e excluí-las. O bloco Code apresenta botões que possibilitam ao usuário verificar o código do programa, além de excluir todos os comandos presente na janela Command Window. O botão Simulink Library, no bloco Simulink, será explicado posteriormente, devido a sua complexidade ser alta. No bloco Environment, podemos alterar o layout da tela inicial. E, finalmente, o último bloco, Resources, talvez é o mais importante para quem está começando a programar no MATLAB, pois esse bloco possui o botão Help, onde podemos ver exemplos de aplicação de funções, e toda a biblioteca do software. Também é possível acessar tal ferramenta utilizando a tecla de atalho F1. 1.8. PLOTS A aba Plots está mostrada na Figura 6. Figura 6. Plots De imediato, percebemos que esta aba refere-se a plotagem de curvas e gráficos. No bloco Selection, podemos selecionar a/as variável/eis a serem plotadas. No exemplo da Figura 6, duas variáveis quaisquer x e y estão selecionadas. No bloco Plots, notamos a quantidade imensa de opções de gráficos, como gráfico de pontos, linha, barras, pizza, e etc. No canto direito, ao lado da opção Comet, vemos uma seta apontando para baixo, que, caso selecionada, apresenta ainda mais opções de plotagem de gráficos, como representado na Figura 7. 11Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Figura 7. Opções de gráfico No último bloco dessa aba, Options, podemos escolher se reutilizamos a figura do gráfico, ou se criamos uma nova. Caso a opção de criar uma nova figura estiver selecionada, é possível, por exemplo, comparar as diferentes figuras que foram feitas. 1.9. APPS Na aba Apps, podemos ajustar uma curva a uma série de pontos, além de outras funções bastante utilizadas na estatística e matemática. Essa aba está mostrada na Figura 8. Figura 8. Apps Podemos fazer ajustes de vários tipos e métodos, entre ajuste linear e ajuste cúbico, como representado na Figura 9. 12 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Figura 9. Ajustes de curva da aba Apps 1.10. COMANDO LOOKFOR Caso o usuário não saiba o comando, a função exata ou a sequência de chamamento de uma função sobre uma ação que deseja realizar, é recomendável utilizar o comando lookfor. Para utilizá-lo, basta digitar o comando seguido da palavra que deseja pesquisar. A palavra pesquisada não precisa ser necessariamente uma função ou comando do MATLAB. Portanto, vale digitar qualquer palavra para o lookfor, que o software retornará com a pesquisa. O comando lookfor retorna ao usuário os comandos e funções em que a palavra pesquisada aparece. A Figura 10 mostra um exemplo da procura de comandos relacionados a “integrate”. Figura 10. Comando lookfor 1.11. PROGRAMAS Perceba que não é possível realizar grandes operações e criar elaborados programas na janela Command Window devido ao espaço da mesma ser extremamente limitado, sendo útil somente quando é necessário realizar alguma operação simples ou verificar o erro do seu programa. Portanto, no desenvolvimento de códigos maiores no MATLAB utiliza-se uma ferramenta de edição de texto. Para criar um programa, utilizamos os botões contidos no bloco File na aba Home. Para abrir o editor, basta clicar no botão New Script. Entretanto, se o usuário deseja escrever uma função, o MATLAB oferece a estrutura de uma, caso o botão New, seguido do botão Function, for utilizado. A Figura 11 mostra onde encontrar tal botão. 13 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Figura 11 - Abrindo o editor de códigos e scripts A Figura 12 mostra o espaço para escrever códigos e programas do MATLAB. Figura 12 - Editor de script A Figura 13 mostra a estrutura para escrever funções no MATLAB. Figura 13. Editor de função 14 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 A grande vantagem de utilizar o editor de texto ao invés da janela Command Window, é que, nessa janela, quando você digitar o comando que precisa realizar e pressionar a tecla Enter, esse comando será realizado imediatamente, tornando inviável e difícil criar programas com várias funções e lógicas complexas. Já no editor de texto, o programa será rodado apenas quando ele estiver efetivamente terminado, sendo possível editá-lo livremente. 1.12. DECLARAÇÃO DE VARIÁVEIS E CONSTANTES Voltando ao Command Window, faça alguma operação de adição envolvendo dois algarismos. Por exemplo, “5 + 5”, e aperte Enter. Note que a seguinte mensagem aparecerá: Como nenhuma variável foi declarada para a operação 5 + 5, o próprio programa declara “ans” como variável da operação. Digite agora “ans”, e aperte Enter. A mensagem que aparecerá é: Como esperado, o valor da variável ans é 10, resultado da operação feita anteriormente. Entretanto, se efetuarmos uma nova operação, como “4 - 9”, o programa mostrará que ans = -5. Portanto, a variável ans teve seu valor alterado de 10 para -5. Para evitar a perda de alguma variável que será utilizada em seu programa, é fundamental declarar variáveis diferentes para cada operação que será realizada. Por exemplo, no parágrafo anterior, poderíamos ter declarado duas variáveis auxiliares, de modo que: A = 5 + 5, e B = 4 - 9. Para declarar variáveis e constantes no MATLAB devemos seguir as regras próprias do software para a escolha de seus nomes, como: 1) Os nomes de variáveis e constantes devem ser compostos por letras, números ou “underline”; 2) Não podem começar com números; 3) Para o caso de variáveis com duas palavras, por exemplo “valor esperado”, deve-se unir as palavras com o “underline”, de modo que seu nome fique “valor_esperado”. O MATLAB não aceitará variáveis com espaço entre as palavras; 4) O software diferencia letras maiúsculas de minúsculas. Portanto, a variável “valor” é diferente da variável “Valor”. A variável que queremos declarar pode armazenar valores escalares, textos, matrizes, vetores e funções. Uma explicação mais aprofundada sobre matrizes, vetores e funções será dada mais adiante na apostila. Nesta seção, o objetivo é aprender a declarar elementos escalares e textuais. Para declarar variáveis no MATLAB, basta seguir o modelo: “ = ”. O trecho após a igualdade varia quanto ao gênero da sua variável. Para a variável do tipo: - Escalar: como o elemento escalar precisa somente de um valor, basta digitá-lo. Exemplo: Declarar uma variável “preco” que contenha o valor do Restaurante Universitário para alunos: “preco = 1.30”; 15 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 - Texto: o texto que o programador deseja impor à variável deve estar entre apóstrofos. Exemplo: Declarar uma variável “A” que contenha o texto “O sonho do HEXA continua vivo”: “A = ‘O sonho do HEXA continua vivo’.” 1.13. OPERADORES LÓGICOS É extremamente comum a realização de operações lógicas para determinar se um valor x, é maior, menor, igual ou diferente que outro valor y. Após o teste lógico, o programa retornará ou “1”, ou “0”, significando, respectivamente, Verdadeiro e Falso. A Tabela 1 mostra os operadores lógicos e seus significados: Símbolo Significado > Maior >= Maior ou igual ’,). No campo texto, pode-se colocar qualquer tipo de texto, equação, caractere ou informação. Dentro deste campo, é necessário especificar o local da variável, e o formato em que se deseja imprimi-la. Portanto, no lugar que o valor da variável será impresso, coloca-se o símbolo %, seguido de um caractere que representa o especificador. Exemplo: Digite no MATLAB: fprintf (‘O preço do RU é %f reais \n’, preco); A mensagem que aparecerá é: “O preço do RU é 1.300000 reais”. Digite agora: fprintf (‘O preço do RU é %g reais \n’, preco); Aparecerá: “O preço do RU é 1.3 reais”. O que mudou nas frases que foi responsável pela alteração na impressão foi a especificação no formato da variável.No segundo exemplo, o especificador de formato é %g. Podemos interpretá-lo da seguinte forma: - %: Deve ser incluído toda vez que desejamos especificar o formato de uma variável; - Especificação: No exemplo, o tipo de especificação é g. Esta informação é obrigatória, e define o tipo de dado da variável que será impressa. A Tabela 3 mostra os variados tipos de especificação que podemos atribuir à variável. 17 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Especificador Saída %d Número inteiro %f Número real %e Exponencial %g Menor formato possível %c Caractere %s String Tabela 3. Tipos de especificadores Dentro do nosso código, com o propósito de organizar melhor o programa, e deixar sua apresentação esteticamente melhor, podemos utilizar certos comandos. A Tabela 4 explicita essas informações que podemos incluir nos comandos. Caractere Significado \n Quebra de linha \t Tab \\ Mostra o caractere \ %% Mostra o caractere % Tabela 4. Caracteres especiais no comando fprintf() Outro comando de saída que podemos utilizar é o disp(). Este comando é mais simples que o fprintf(), pois nele ou imprimimos um texto ou o valor de alguma variável. A sequência de chamamento é: disp( ‘’ ou ). Atenção quanto ao uso dos apóstrofos. A Figura 16 explicita a utilização do comando disp. Figura 16. Comando disp 1.16. COMANDOS BÁSICOS DE ENTRADA O comando de entrada mais simples do MATLAB é input(). Deve-se associar o valor de uma variável ou texto à esse comando, de modo que a variável assume o valor ou o texto que o usuário digitar no programa. O comando input pode ser utilizado para ler uma sequência de caracteres de duas formas, e suas sintaxes são (utilizando como exemplo a pergunta do nome do usuário) demonstradas na Figura 17. 18 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Figura 17. Comando input Notamos que a diferença entre as duas formas de utilizar o comando consiste na utilização de apóstrofos na resposta digitada pelo usuário. Portanto, para evitar o uso dos apóstrofos, basta utilizar a sequência ‘s’. O comando ‘s’ indica ao software que a resposta digitada pelo usuário será na forma de string. 1.17. COMANDOS ÚTEIS DO MATLAB Segue na Tabela 5 alguns comandos úteis e bastante recorrentes em programação na engenharia. Caso o usuário tiver alguma dúvida, ou precisar de uma lista maior, pode acessar a seção Help (F1) do programa. Símbolo Significado Símbolo Significado clear Comando que exclui todas as variáveis clc Comando que apaga a aba Console pi Retorna um valor aproximado para o numero pi abs(x) Retorna o valor absoluto de um elemento cos(x) Cosseno exp(x) Retorna o valor para e^x factorial(x) Retorna o fatorial de um número int(x) Retorna a parte inteira do número randi(x) Retorna algum número aleatório entre 0 e x sin(x) Seno sqrt(x) Raiz quadrada tan(x) Tangente round(x) Arredonda para o número inteiro mais próximo fix (x) Arredonda para o inteiro positivo imediatamente menor ceil (x) Arredonda para o número inteiro positivo imediatamente maior rem (x,y) Retorna o resto da divisão de x por y sign (x) Retorna 1 para x>0, -1 floor (x) Arredonda para o número 19 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 para x=0 && Temp=50 && Temp =100 && Temp=150 && Temp=200) fprintf('\n Seu fluido a uma temperatura de %g ºF e apresenta uma viscosidade de 5,7 lb/ft/hr\n', Temp); else %Caso o usuário entrar com valor negativo fprintf('\n Valor invalido para temperatura\n'); end 1.19. ESTRUTURA DE REPETIÇÃO As estruturas de repetição, também conhecidas como laços (ou loops), são utilizadas para realizar uma operação pré-determinada enquanto a condição para estar dentro do laço está sendo satisfeita. Quando esta condição não for mais satisfeita, o loop irá parar de ocorrer, e o software seguirá adiante na leitura do código. Dentro do MATLAB, os comandos de repetição mais utilizados são for, while e switch. Dentro destes laços, utilizaremos também o comando break. A Figura 21 demonstra a lógica por trás de uma estrutura de repetição. Figura 21. Estrutura de repetição 1.20. COMANDO FOR É usado para definir loops em que conhecemos o número de operações a serem realizadas. Geralmente, uma variávelé igualada a um vetor-linha, do tipo (início : razão : fim). Uma explicação mais 22 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 detalhada sobre vetores será feita mais adiante, porém uma pincelada no assunto é necessária para o comando for. Um vetor-linha do tipo (início : razão : fim), como 0 : 2 : 10, tem início 0, razão 2, e fim 10. Portanto, seus termos são: 0, 2, 4, 6, 8, 10. Sequência de chamamento (Figura 22): Figura 22 - Sintaxe do comando for Exemplo: Podemos criar um código em que inicialmente temos uma variável x = i = 0. O contador dentro do comando for será o i, e a cada volta dentro do laço que i for igual a 0:2:10 (portanto 0, 2, 4, 6, 8 e 10), faremos x = x + 1, e mostraremos o valor de x a cada loop em que a condição i = 0 : 2 : 10 é satisfeita. Teremos: Como resultado, o MATLAB imprimirá na aba Console os valores de x: 1 2 3 4 5 6 1.21. COMANDOS WHILE, BREAK E CONTINUE Comandos utilizados quando não sabemos o número de iterações que serão realizados, de modo que continuamos realizando o comando enquanto a condição lógica que especificamos ao comando continua sendo verídica. Estrutura (Figura 23): Figura 23 - Sintaxe do comando while Exemplo: Nas indústrias química, agrícola e de alimentos é muito comum o uso de equações empíricas para estimar a secagem de diversos produtos. Estas equações são válidas para determinadas faixas de temperaturas e umidades relativas. O objetivo destas equações é estimar após um determinado tempo de secagem qual o teor de umidade do produto. Estas equações possuem formas diversificadas, e umas das formas mais utilizadas é conhecida pelo seguinte formato: Em que: U(t) é o teor de água do produto; t é o tempo de secagem em horas; k e n são parâmetros que dependem do produto. Elabore um programa que faça a simulação da secagem de um produto enquanto o teor de água do mesmo seja maior ou igual a 0,13. Mostre na tela a cada hora o valor do teor de água do produto. Utilize k=0,365 e n=0,663. Lembre-se que em t=0, o teor de umidade é 100%. 23 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Resolução: Saída no Console (Figura 24): Figura 24 - Teor de água O comando break pode ser utilizado dentro dos laços de repetição, de modo que interrompa a execução da repetição no interior da estrutura. Nos laços while e for sem break, esta interrupção é realizada somente quando o laço se repetirá. O comando transfere a execução para a especificação após o end. Em repetições aninhadas, o break interrompe a execução apenas da estrutura mais interna. Sintaxe (Figura 25). 24 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Figura 25 - Sintaxe do comando break No código acima, temos que quando a “condição x1” for satisfeita, o comando break será executado e o laço while interrompido. O comando continue, dentro de um laço de repetição, pula o resto das instruções do loop e começa a próxima iteração. Este comando não é definido fora de um laço de repetição. 1.22. COMANDO SWITCH O comando switch funciona com um teste de hipóteses da variável a ser analisada. Dentro do teste do switch, temos vários case, cada um com sua instrução específica, que caso o valor for satisfeito, será realizada, e pularemos para o fim do comando, para o end. Somente um case é satisfeito dentro de cada switch. Se nenhum for satisfeito, a condição otherwise é executada. Sintaxe (Figura 26). Figura 26 - Sintaxe do comando switch Geralmente o valor da variável é atribuído pelo usuário utilizando o comando de entrada input, e é possível utilizar tanto valores escalares como textos. Existe a possibilidade de utilizar o comando menu no lugar do comando input, no momento de pedir ao usuário o valor da variável, como retratado na Figura 27. Desse modo, uma janela com as opções do valor da variável é aberta, cabendo ao usuário clicar no valor. Caso o botão de fechar essa janela for acionado, equivale a atribuir o valor 0 à variável. 25 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Figura 27 - Switch com o comando menu A janela de botões que aparece, quando o comando menu é utilizado, está representado na Figura 28. Figura 28 - Janela de opções utilizando o comando menu 1.23. SCRIPTS E FUNÇÕES Em programas extensos que podem ter repetição de algum determinado código, ou que serão utilizados frequentemente é perda de tempo e bastante cansativo escrevê-lo todas as vezes. Portanto, para tornar o programa mais prático e rápido de ser digitado, utilizamos arquivos que contêm tal código escrito, e quando precisarmos utilizá-lo no programa, basta digitar o nome do arquivo. Tais elementos são os scripts e funções. Script é um arquivo com comandos interpretáveis pelo MATLAB que, quando colocado num programa, é executado na ordem em que foi escrito. Este arquivo deve ter extensão “.m” (M-Files). Por exemplo, podemos criar um script que calcula a distância entre dois pontos p e q no R³. Este script poderia estar no arquivo distancia_p_q.m, e para chamá-lo basta entrar com o nome do arquivo na janela de comandos. A utilização e criação do script está explícita na Figura 29 abaixo. Figura 29 - Exemplo de script 26 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Salvamos o arquivo acima como distancia_p_q.m, e em seguida o utilizamos para os pontos p = (1, 0, 0) e q = (0, 1, 0), de modo que, quando digitamos o nome do script na aba Command Window, podemos notar que na aba Workspace, o valor da distância entre os pontos p e q é atribuído à variável A. Assim, toda vez que o programador precisar calcular a distância entre dois pontos no R³, basta digitar as coordenadas dos dois pontos, e executar o script distancia_p_q, que automaticamente o MATLAB irá rodar o arquivo. Já as funções, diferentemente dos scripts, recebem parâmetros de entrada, retornam valores e possuem variáveis locais (que não afetam o espaço de trabalho). As funções são um tipo de arquivo .m que permitem ao usuário criar novos comandos no software. A Figura 30 demonstra o cabeçalho de uma função. Figura 30 - Cabeçalho de uma função Após o cabeçalho, o resto do arquivo .m consiste da função em si, ou seja, comandos do MATLAB que utilizam os valores das variáveis var1, var2, var_n, manipulando-os até chegar ao valor das variáveis saida1, saida2, ..., saída_n. Vale ressaltar que quando uma função é criada, o software utiliza um ambiente de trabalho exclusivo para a função. Dessa forma, não existe a possibilidade de os comandos da função se relacionarem com as variáveis da área de trabalho, exceto quando elas forem passadas como os argumentos da função (var1, var2,..., var_n). De similar modo, as variáveis criadas dentro da função não se relacionam com as da área de trabalho e são apagadas quando sua execução termina, salvo quando forem passadas como argumentos de saída (saida1, saida2,..., saída_n). Temos a possibilidade de não utilizarmos argumentos de saída nem de entrada, por exemplo, se quisermos que nossa função retorne somente o texto “Eu sou uma função”, a Figura 31 explicita como fazer. Figura 31 - Função sem argumentos de entrada e saída Após salvar a função, para chamá-la basta digitar o nome dela, no caso, “nossa_funcao()”. Como essa função não recebe nenhuma variável de entrada, não é possível colocar algum valor dentro dos parênteses. Apertando Enter, o programa rodará o arquivo, e imprimirá na tela o texto que denominamos à função. Podemos também atribuir somente variáveis de entrada à nossa função, sem incluir os de saída. Para as funções que recebem variáveis, é necessário atribuir algum valor dentro dos parênteses durante o momento de chamar a função. Dessa maneira, a Figura 32 retrata uma função que recebe uma var1 e, após manipulação matemática, retorna var2. Figura 32 - Funçãocontendo somente variável de entrada Por último, atribuindo variáveis de entrada e saída, mantendo a mesma lógica para a função, como mostra a Figura 33. 27 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Figura 33 - Função contendo variáveis de entrada e saída Desse modo, podemos conceder a alguma variável x o valor da var2, valor retornado pela nossa função. 1.24. EXERCÍCIOS Exercício 2. Crie uma função no MATLAB que calcula a pressão de vapor da água a alguma temperatura plausível usando a equação de Antoine (Equação 1), sabendo que, para pressão em mmHg, a temperatura é utilizada em kelvin e as constantes para a água são: A = 18,3036, B = 3816,44 e C = -46,13. Além disso, sabendo que a equação de Antoine fornece resultados precisos somente numa faixa de temperatura específica para cada composto, amplie o código da função para calcular a pressão de vapor utilizando a equação de Harlacher-Braun (Equação 2). Para realizar as iterações, utilize o resultado obtido por Antoine como chute inicial, e como critério de parada do loop, um erro de 10^-5. A função deve receber como variável de entrada a temperatura, e retornar em forma de vetor a pressão de vapor calculada por Antoine, Harlacher, e o erro entre os dois resultados. Dados: A = 55.336, B = -6869.50, C = -5.115 e D = 1.05. Indique o resultado em atm, sabendo que 1 atm = 760 mmHg. (1) (2) Exercício 3. Em determinado processo, é necessário vaporizar água pura a 8 bar. Estime a temperatura com que o vapor deixará o trocador de calor. Utilize a equação de Antoine e os dados do exercício 1. Considere 1 bar = 760 mmHg. Exercício 4. Escreva um script que calcule a pressão do etano e que contêm as equações de Clapeyron, Van der Waals e Peng-Robinson. Para isso, utilize o comando if, de modo que, quando o usuário apertar a tecla 1, utilize a equação de Clapeyron, caso apertar 2, utilize van der Waals, e 3, Peng-Robinson. Caso o usuário teclar qualquer outra tecla, imprima o texto “Esse script possui apenas 3 equações de estado, foi mal”. Observação: os valores obtidos para as pressões serão praticamente iguais; o objetivo desse exercício é ambientar o usuário à estrutura de repetição. Dados: V = 0,1 m³/mol, T = 500 K, R = 8,314 m³.Pa/(K.mol), Tc = 305,4 K, Pc = 48,2 atm = 4,88.10 Pa e = 0,098. Para a equação de Clapeyron, utilize: (3) Para a equação de van der Waals, utilize: (4) 28 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 (5) (6) Para a equação de estado de Peng-Robinson, utilize: (7) (8) (9) (10) (11) Exercício 5. Crie uma função que calcule a variação de entalpia do aquecimento de um gás ideal (metano) a partir das equações abaixo. Como variáveis de entrada da função, o usuário deve fornecer os coeficientes A, B, C e D determinados experimentalmente, e as temperaturas inicial e final do aquecimento. A função deverá retornar o valor da variação de entalpia numa variável de saída. Não utilize a função integrate do MATLAB, resolva a integral analiticamente. (6) (7) Dados: A = 4,598 cal/(gmol.K), B = 1,245.10-2 cal/(gmol.K), C = 2,860.10- cal/(gmol.K), D = - 2,703.10-9 cal/(gmol.K), Ti = 27 ºC e Tf = 227 ºC. Exercício 6. Sabendo que para uma certa bomba o NPSH requerido é de 1,8 metros, o NPSH disponível é de 6 metros e a pressão de vapor do fluido é de 80 kPa, desenvolva um script que retorna ao usuário se a bomba irá ou não cavitar. Lembre-se de fazer uma análise dimensional das variáveis. Utilize os comandos if e disp para verificar a condição e para exibir o resultado na tela, respectivamente. 1.25. RESOLUÇÃO DOS EXERCÍCIOS 1. 29 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Resposta (para T = 500 K): 2. Note que existem vários jeitos de receber os resultados. Uma possibilidade é: Respostas: 30 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 3. Resposta: 4. 31 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Resultados possíveis: 5. 32 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Respostas possíveis: 6. Resultado: 33 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 CAPÍTULO 2 2. CÁLCULO DIFERENCIAL E INTEGRAL, VETORES, MATRIZES, FUNÇÕES POLINOMIAIS E GRÁFICOS O MATLAB disponibiliza funções que facilitam o cálculo de operações mais complexas, como o cálculo do limite, da derivada e a integração. Para que o software reconheça as funções polinomiais que serão utilizadas no cálculo diferencial e integral, é necessário declarar as variáveis através do comando syms. Exemplo: syms x. 2.1. LIMITE Para calcular o limite de uma determinada expressão, utilizamos a função limit(). Existem diversos modos de chamar essa função, como explícito na Tabela 7. Comando Descrição limit (F,x,a) Calcula o limite da expressão F, com a variável x tendendo a a limit (F,a) Calcula o limite da expressão F, com uma variável simbólica tendendo a a limit (F) Calcula o limite da expressão F, com a=0 limit (F,x,a, ‘right’) Calcula o limite da expressão F, com a variável x tendendo a a pela direita limit (F,x,a, ‘left’) Calcula o limite da expressão F, com a variável x tendendo a a pela esquerda Tabela 7 - Comandos para utilizar a função limit() Exemplo: Calcular o limite . 2.2. DERIVADA Para calcular a derivada de uma determinada expressão, utilizamos a função diff(). Como mostrado na Tabela 8, existem diversos modos de chamar essa função. Comando Descrição diff(F) Calcula a derivada de uma expressão F em torno de uma variável simbólica diff(F,x) Calcula a derivada de uma expressão F em torno da variável x diff(F,n) Calcula a derivada de uma expressão F, com n sendo a ordem de derivação diff(F,x,n) Calcula a derivada de uma expressão F em torno da variável x, com n sendo a ordem de derivação Tabela 8 - Comandos para utilizar a função diff() Exemplo: Calcular a derivada segunda da função 34 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 2.3. INTEGRAL Para calcular a integral de uma determinada expressão, utilizamos a função int(). Existem diversos modos de chamar essa função (Tabela 9). Comando Descrição int(F) Calcula a integral indefinida da função F em relação a uma variável simbólica int(F,a,b) Calcula a integral definida da função F de a a b int(F,x,a,b) Calcula a integral definida da função F em relação a x de a a b Tabela 9 - Comandos para utilizar a função int() Exemplo: Calcular a integral da função . 2.4. INTEGRAL DUPLA Para calcular a integral dupla de uma determinada expressão, utilizamos a função dblquad(). Comando Descrição dblquad(F,xmax,xmin,ymax,ymin) Calcula a integral dupla da função F, com os limites de integração de xmax a xmin e de ymax a ymin dblquad(F,xmax,xmin,ymax,ymin,tol) Calcula a integral dupla da função F, com os limites de integração de xmax a xmin e de ymax a ymin. O resultado apresenta precisão tol, caso não seja especificado, utiliza-se a precisão de 10-6 Tabela 10 - Comandos para utilizar a função dblquad() 2.5. INTEGRAL TRIPLA Para calcular a integral dupla de uma determinada expressão, utilizamos a função triplequad(). 35 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Comando Descrição triplequad(F,xmax,xmin,ymax,ymin,zmin, zmax) Calcula aintegral dupla da função F, com os limites de integração de xmax a xmin, de ymax a ymin e de zmax a zmin triplequad(F,xmax,xmin,ymax,ymin,zmin,zmax,tol) Calcula a integral dupla da função F, com os limites de integração de xmax a xmin, de ymax a ymin e de zmax a zmin. O resultado apresenta precisão tol, caso não seja especificado, utiliza-se a precisão de 10-6 Tabela 11 - Comandos para utilizar a função triplequad() 2.6. DECLARAÇÃO DE VETORES E MATRIZES Uma das principais maneiras de trabalhar com dados no MATLAB é utilizando vetores e matrizes. Para o MATLAB, existem somente matrizes, sendo os vetores representados como uma matriz que possui uma das suas dimensões igual a 1. Um dos tipos de vetor é o vetor linha, cuja dimensão que representa a quantidade de linhas é igual a 1, portanto, de modo geral, eles podem ser representados como 1 x n. Outro tipo de vetor é o vetor coluna, em que o número de colunas é igual a 1, podendo ser representado por n x 1. Abaixo, a Figura 34 mostra exemplos desses tipos vetores e de uma matriz. Figura 34 - Vetores e matrizes Existem diversos modos de declarar um vetor (V). Alguns estão descritos na Tabela 12 abaixo. Tipo de declaração Descrição V = [v1, v2, v3, ..., vn] ou V = [v1 v2 v3 ... vn] Cria um vetor V contendo n elementos especificados. Os elementos podem ser separados por vírgulas ou espaços V = v1:vn Cria um vetor V começando com o primeiro valor v1 e incrementando de 1 em 1 até atingir o último valor vn ou o valor mais próximo possível de vn V = v1: i : vn Cria um vetor V começando com o primeiro valor v1 até o valor vn, com um incremento i V = linspace(v1, vn, n) Cria um vetor V começando com o primeiro valor v1 e terminando com o valor vn, contendo n elementos linearmente 36 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 espaçados V = logspace(v1, vn, n) Cria um vetor V começando com o valor 10v1 e terminando com o valor 10vn, sendo que os expoentes são linearmente espaçados Tabela 12 - Declaração de vetores Abaixo, na Figura 35, estão representados alguns exemplos de aplicação dos métodos apresentados para a declaração de vetores. 37 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Figura 35 - Exemplos de declaração de vetores A declaração de matrizes explícitas é realizada colocando os elementos entre colchetes, em que os elementos de cada linha são separados por espaços em branco ou por vírgulas, e as colunas são separadas por ponto e vírgula ou por enter, como demonstrado na Figura 36. Figura 36 - Exemplos de declaração de matrizes As matrizes também podem ser declaradas utilizando os comandos utilizados para a declaração de vetores, em que o comando seria inserido para determinar os valores de uma linha específica, como mostra a Figura 37. Figura 37 - Outros exemplos de declaração de matrizes Existem algumas funções para a declaração de matrizes especiais. Alguns desses comandos estão listados na Tabela 13 abaixo. Em seguida, exemplos de aplicação dos comandos, na Figura 38. Tipo de Matriz Comando Descrição Matriz Identidade eye(n) Cria uma matriz identidade nxn (n linhas e n colunas) Matriz Nula zeros(m, n) Cria uma matriz mxn (m linhas e n colunas) 38 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 somente com zeros Matriz com todos os elementos iguais a 1 ones(m, n) Cria uma matriz mxn (m linhas e n colunas) somente com uns Matriz Aleatória rand(m, n) Cria uma matriz mxn (m linhas e n colunas) com números aleatórios Tabela 13 - Comandos para a declaração de matrizes Figura 38 - Declaração de matrizes utilizando comandos 2.7. ENDEREÇAMENTO DE VETORES E MATRIZES No MATLAB, cada um dos elementos de um vetor pode ser acessado através do seu índice, que identifica cada coluna (no caso de um vetor linha), ou cada linha (para vetores coluna). Diferente de outras linguagens de programação, o índice de linhas e colunas começam com 1 (um), e não zero. Abaixo tem-se um exemplo de como os valores de um vetor são numerados, os tipos de endereçamentos de vetores, presente na Tabela 14, além de exemplos de aplicação, na Figura 39. Tipo de Endereçamento Descrição a = V(n) Armazena na variável a o valor na posição n a = V(n:m) Armazena no vetor a o valores nas posições n a m a = V(m:i:n) Armazena no vetor a o valores de m (primeiro valor) até n (último valor), incrementando i índices a = V( [m n] ) Endereçamento indireto que armazena no vetor a os valores nas posições m e n Tabela 14 - Tipos de endereçamento de vetores 39 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Figura 39 - Endereçamento de vetores O endereçamento em matrizes é similar ao de um vetor para somente um elemento. Entretanto, ao invés de passar somente um valor para a posição, é necessário passar dois valores, um para a linha e outro para a coluna. Abaixo, a Tabela 15 contém os tipos de endereçamento presentes numa matriz, e a Figura 40 apresenta exemplos de aplicação utilizando-os. Tipo de Endereçamento Descrição a = M(n, m) Armazena na variável a o valor na linha n e coluna m a = M(:, m) Armazena no vetor a todos os valores da coluna m. O vetor resultante é um vetor-coluna, possui 1 coluna e n linhas a = M(n, :) Armazena no vetor a todos os valores da linha n. O vetor resultante é um vetor-linha, possui 1 linha e m colunas Tabela 15 - Tipos de endereçamentos de matrizes 40 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Figura 40 - Endereçamento de matrizes 2.8. OPERAÇÃO COM VETORES E MATRIZES Existem diversos comandos e operações com vetores e matrizes disponíveis no MATLAB. Algumas delas estão listadas na Tabela 16 abaixo, considerando as matrizes a, b e c, e o número n. Operação Comando Concatenação c = [a b] Transposta c = a’ Adição c = a + b Subtração c = a - b Multiplicação c = a * b Divisão c = a / b Exponenciação c = a^n Determinante n = det(a) Matriz inversa c = inv(a) Tabela 16 - Operação com matrizes e vetores Utilizando as operações da Tabela 16, foram feitos exemplos de operações com as matrizes a e b, retratados na Figura 41. 41 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Resultando em: Figura 41 - Operações com matrizes Observação: Para realizar operações matemáticas com os valores de uma matriz ou vetor é necessário colocar um ponto antes do operador, como no exemplo a seguir, onde é possível notar a diferença entre os resultados ao realizar a operação de exponenciação com e sem o ponto: 42 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 2.9. FUNÇÕES DE GERENCIAMENTO DE MATRIZES E VETORES A Tabela 17 apresenta maneira de gerenciar matrizes e vetores. Função Descrição n = length(A) Retorna o número de elementos de um vetor A [m,n] = size(A) Retorna um vetor linha [m,n], onde m é o número de linhas e n é o número de colunas reshape(A,m,n) Rearranja a matriz A que tem r linhas e s colunas para ter m linhas e n colunas diag(V) Cria uma matriz quadrada com os elementos do vetor V na diagonal principal diag(A) Cria um vetor com os elementos da diagonal da matriz A. fliplr(A) Cria uma matriz com as colunas espelhadas da matriz A flipud(A) Cria uma matriz com as linhas espelhadas da matriz A sort(A, dim) Cria uma matriz com os elementos das colunas (dim = 1) ou das linhas (dim = 2) da matriz A em ordem crescente. sort(A, mode) Cria uma matriz com os elementos das colunas da matriz A em ordem crescente (mode = ‘ascend’) ou em ordem decrescente (mode = ‘descend’). Tabela 17 - Gerenciamento de matrizes e vetores 2.10. ANÁLISE DE DADOS DE VETORES E MATRIZES A infinidade de operações que se pode realizar com matrizes e vetores no MATLAB é imensa. Não é à toa que MATLAB significa MatrixLaboratory... A Tabela 18 explicita outras operações com vetores e matrizes. Função Descrição mean(V) Sendo V um vetor, retorna o valor médio dos elementos de V n = max(V) n = min(V) Sendo V um vetor, retorna o valor do maior/menor elemento V = max(A) V = min(A) Sendo A uma matriz, retorna um vetor linha V contendo o maior/menor elemento de cada coluna da matriz [d, n] = max(A) [d, n] = min(A) Sendo A uma matriz, d é o maior/menor elemento de A e n é a posição desse elemento na coluna. Caso haja diversos valores máximos/mínimos, a posição será a primeira dentre eles. prod(V) Sendo V um vetor, retorna o produto dos elementos prod(A) Sendo A uma matriz, retorna um vetor com o produto dos elementos de 43 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 cada coluna det(A) Sendo A uma matriz, retorna o seu determinante sum(V) Sendo V um vetor, retorna a soma de seus elementos trace(A) Sendo A uma matriz, retorna a soma dos elementos da diagonal principal da matriz sort(V) Sendo V um vetor, coloca os elementos em ordem crescente median(V) Sendo V um vetor, coloca os elementos em ordem crescente e retorna o valor mediano desses elementos std(V) Sendo V um vetor, retorna o desvio padrão dos elementos dot(V1, V2) Sendo V1 e V2 vetores, retorna o produto escalar desses dois vetores cross(V1, V2) Sendo V1 e V2 vetores com 2 elementos cada, retorna um vetor com o produto vetorial desses dois vetores [a, b] = eig(A) Sendo A uma matriz, retorna em a uma matriz com os autovetores e, em b, uma matriz com os autovalores Tabela 18 - Análise de matrizes e vetores 2.11. FUNÇÕES POLINOMIAIS No MATLAB, um polinômio é interpretado como um vetor contendo os valores dos coeficientes começando pelo termo de maior grau: . Existem diversas funções que facilitam o trabalho com funções polinomiais. Algumas delas estão listadas na Tabela 19 abaixo: Função Descrição roots(f) Retorna um vetor linha com as raízes do polinômio f de entrada polyval(f,n) Retorna o valor de f(n) poly(V) Cria um polinômio a partir de um vetor V de entrada contendo as raízes conv(f, g) Sendo f e g funções polinomiais, retorna um vetor com os coeficientes do polinômio obtido pela multiplicação, de forma distributiva, dos dois polinômios de entrada deconv(f, g) Sendo f e g funções polinomiais, retorna um vetor com os coeficientes do polinômio obtido pela divisão dos dois polinômios de entrada Tabela 19 - Funções polinomiais 2.12. GRÁFICOS Os gráficos são uma importante ferramenta que facilita a visualização de informações. O MATLAB disponibiliza diversas funções para plotar gráficos, podendo gerar gráficos bidimensionais e tridimensionais com qualquer tipo de escala e coordenada. 2.12.1. Gráficos bidimensionais Existem diversos comandos para plotar gráficos bidimensionais, alguns deles estão retratados na Tabela 20. 44 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Comando Descrição plot Plotar um gráfico linear loglog Plotar um gráfico em escala logarítmica semilogx Plotar um gráfico em escala logarítmica no eixo x semilogy Plotar um gráfico em escala logarítmica no eixo y fill Desenhar um polígono 2D polar Plotar um gráfico em coordenada polar bar Construir um gráfico de barras steam Gráfico de sequência discreta stairs Construir um gráfico em degraus compass Plotar gráfico em forma de bússola errorbar Construir um gráfico de erro hist Construir um histograma rose Plotar histograma em ângulo feather Plotar um gráfico em forma de pena fplot Plotar uma função comet Plotar um gráfico em forma de cometa Tabela 20 - Comandos para gráficos bidimensionais Dentro desses comandos, o plot é o mais utilizado. A Tabela 21 apresenta a sintaxe desse comando. Comando Descrição plot(Y) Sendo Y um vetor, o comando plota um gráfico dos valores de Y com seus respectivos índices. plot(X,Y) Sendo X e Y vetores de dimensões iguais, o comando plota um gráfico dos valores de Y em função dos valores de X. Tabela 21 - Comando plot para gráficos bidimensionais Para plotar mais de uma linha no mesmo gráfico, pode-se utilizar as funções hold e plot. Suas descrições, além de outros comandos pare editar gráficos, estão na Tabela 22. Comando Descrição title(“Título”) Adiciona um título ao gráfico xlabel(“Título do eixo x”) Adiciona um título ao eixo x ylabel(“Título do eixo y”) Adiciona um título ao eixo y xlim([xmin xmax]) Estipula os limites do eixo x ylim([ymin ymax]) Estipula os limites do eixo y grid on Adiciona as linhas de grade ao gráfico grid off Remove as linhas de grade do gráfico hold on Adiciona objetos ao mesmo gráfico 45 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 hold off Substitui objetos existentes em um gráfico pelos atuais Tabela 22 - Maneiras de editar gráficos Também é possível alterar a cor da linha, os marcadores e o estilo da linha do gráfico na função plot utilizando as propriedades definidas na Tabela 23. Propriedade Descrição LineWidth Especifica em pontos a espessura de cada linha MarkerSize Especifica em pontos o tamanho do marcador MarkerEdgeColor Especifica a cor do marcador ou da borda de marcadores preenchidos MarkerFaceColor Especifica a cor interna dos marcadores preenchidos Tabela 23 - Alterar cor de gráfico A estrutura para a utilização dessas propriedades é: plot(X, Y, ‘nome da propriedade’, valor, ...) Na Tabela 24 a seguir estão descritos os principais atributos dessas propriedades. Cores Marcadores Estilos de linha y amarelo . Ponto - Sólido m magenta O Círculo : Pontilhado c Ciano X X -. Ponto-traço r vermelho + Mais -- Tracejado g verde * Asterisco b Azul S Quadrado k Preto V Triângulo para baixo w branco ^ Triângulo para cima P Pentágono Tabela 24 - Estilos de gráfico Quando várias linhas são plotadas no mesmo gráfico, torna-se difícil saber qual linha se refere a cada função. Para solucionar esse problema, pode-se inserir legendas para as linhas por meio do comando legend, que possui a seguinte estrutura: legend(‘texto 1’, ‘texto 2’,..., posição) Para o argumento “posição”, pode-se inserir os seguintes valores, contidos na Tabela 25. Valor Significado 0 Escolha automática da melhor posição, onde existe menos conflito com os dados 1 Canto superior direito 2 Canto superior esquerdo 3 Canto inferior esquerdo 4 Canto inferior direito -1 À direita do desenho 46 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Tabela 25 - Posições do gráfico Ainda é possível adicionar qualquer texto em um determinado lugar do gráfico por meio das funções apresentadas na Tabela 26. Comando Descrição text(x,y,’texto’) Insere o ‘texto’ nas coordenadas x e y determinadas gtext(‘texto’) Insere o ‘texto’ na posição escolhida através do mouse Tabela 26 - Adicionando texto no gráfico A Figura 42 contém um exemplo de utilização dos comandos citados acima. Figura 42 - Exemplo de gráfico com cor e outras incrementações Com o comando axis, é possível ajustar o tamanho e a aparência dos eixos do gráfico. Alguns dos comandos estão listados na Tabela 27 abaixo. Comando Descrição axis([xmin xmax ymin ymax]) Define os valores máximos e mínimos de ambos eixos usando os valores dados por um vetor linha 47 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 axis square Deixa o quadro dos eixos quadrado axis equal Ajusta os incrementos dos eixos para que sejam iguais axis normal Cancela o efeito dos dois comandos anteriores axis off Desliga todos os nomes de eixos, grades e marcadores, mas não altera o título e os nomes colocados pelos comandos text e gtext axis on Liga os nomes de eixos, grades e marcadores Tabela 27 - Comando axis Com o comando subplot (aplicações na Tabela28), é possível dividir a janela do gráfico em uma matriz definida pelo usuário, permitindo visualizar mais de um gráfico na mesma janela. Comando Descrição subplot(m,n,p) Divide a janela em m linhas, n colunas, plotando o gráfico na posição p. Caso tenha uma matriz retangular, a contagem inicia-se no sentido anti-horário do gráfico superior esquerdo. subplot(m,n,p,'replace') Caso o gráfico já exista, deleta o gráfico especificado, substituindo por outro gráfico desejado Tabela 28 - Comando subplot 2.13. GRÁFICOS TRIDIMENSIONAIS Existem diversos comandos para plotar gráficos tridimensionais. Alguns deles estão explícitos na Tabela 29. Comando Descrição plot3 Plota um gráfico no espaço 3D fill3 Desenha um polígono 3D contour3 Plota um gráfico de contorno 3D clabel Plota gráfico de contorno com valores quiver Plota gradiente mesh Plota malha 3D surf Plota superfície 3D surfc Combinação de surf e contour slice Plota visualização volumétrica cylinder Gera um cilindro sphere Gera uma esfera Tabela 29 - Comandos para gráficos tridimensionais 2.14. EXERCÍCIOS Exercício 7. Observa-se que a distribuição de temperatura, em estado estacionário, no interior de uma parede unidimensional com condutividade térmica de , e espessura de 48 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 50 mm tem a forma T(°C) = 493 – 73 x², em que x está em metros. Qual a taxa de geração de calor q na parede? Exercício 8. Encontre a raiz positiva da função pelo método de Newton, inicializando-o com . Realize a iteração até que o erro absoluto seja menor que 0,0001. Exercício 9. Plotar um gráfico de um paraboloide hiperbólico cuja equação é: Exercício 10. Plotar o comportamento da fugacidade (f) e do coeficiente de fugacidade ( ) do gás nitrogênio puro a 100K no intervalo de pressão entre 0 e 25 bar. A pressão de vapor do nitrogênio a 100K é 7,78 bar. Considerar as seguintes equações para o cálculo do coeficiente de fugacidade: 2.15. RESOLUÇÃO DOS EXERCÍCIOS 7. Resposta: q = 5 W 49 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 8. Resultado: x = 0,8241. 9. Para resolver esse problema, é necessário utilizar a função [X, Y]=meshgrid(x, y), que gera uma malha, para isso, ele cria duas matrizes X e Y com a intersecção entre os pontos dos vetores x e y. 10. 50 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 51 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 CAPÍTULO 3 3. RESOLUÇÃO DE EQUAÇÕES DIFERENCIAIS ORDINÁRIAS 3.1. INTRODUÇÃO É comum, no estudo da engenharia, deparar-se com sistemas regidos por equações diferenciais ordinárias (EDO’s). Por esse motivo, são destinadas diversas horas dos cursos de graduação para o entendimento e execução dos mais diversos métodos de resolução dessas equações. Após esse momento, é sempre conveniente buscar maneiras mais rápidas e menos suscetíveis a erros para aplicar esses métodos. É aí que o domínio do software MATLAB se torna relevante, já que esse apresenta diversos métodos de resolução de EDO’s já implementados. Esta aula se propõe a expor o funcionamento dessas ferramentas através da resolução de problemas de valor inicial (PVI). 3.2. MÉTODOS NUMÉRICOS PARA A RESOLUÇÃO DE EDO’S Por vezes, a resolução analítica (exata) de uma equação diferencial é demasiadamente difícil ou até mesmo impossível para que essa seja uma alternativa viável. Dessa forma, é comum o apelo a métodos numéricos para realizar essa tarefa, ou seja, toda a complexidade da resolução exata é transformada em trabalho computacional, que pode ser facilmente delegado a um computador por meio de uma linguagem de programação, como a que é abordada por esse curso. Nesse caso, esses métodos se enquadram na categoria de métodos de marcha estimando o valor de determinada função desconhecida num determinado passo (∆x ou h) da condição inicial ou da estimação anterior, com o uso de uma função incremento , cuja avaliação muda de acordo com o método utilizado. 3.2.1. Método de Euler Existem diversos métodos de marcha para a resolução de PVI’s. O método de Euler, por exemplo, é o mais simples deles, com sua dedução sendo a mais simples e compreensível de todas. Tomando uma EDO genérica de primeira ordem, com uma determinada condição inicial. Supondo que gostaríamos de obter uma estimativa dos valores de num determinado intervalo . Já que é conhecido, é feita uma expansão em série de Taylor em torno desse ponto para a obtenção de . ... Observando que se o termo , correspondente ao incremento do método numérico, for pequeno, então os termos e podem ser desprezados e incorporados ao erro inerente ao método. Lembrando que , temos: Se tomarmos como aproximações para os pontos , então podemos aproximar no intervalo por meio da relação geral abaixo: 52 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 3.2.2. Método de Runge-Kutta de 4ª Ordem Como consequência de sua simplicidade, o passo necessário para que o método de Euler ofereça uma precisão apropriada deve ser muito pequeno, e em muitos casos, isso acarreta num altíssimo gasto computacional. Dessa forma, o Método de Runge-Kutta de 4ª Ordem (RK4) é o mais utilizado para a resolução de PVI’s (presente inclusive na calculadora HP50g), devido a sua alta precisão e por apresentar cálculos explícitos. Esse método é classificado como de ordem igual a quatro pelo fato de utilizar uma média ponderada das inclinações no início, meio e fim do passo para o cálculo do incremento, tal que: 3.3. ACHANDO SOLUÇÕES NUMÉRICAS NO MATLAB O MATLAB possui diversos solvers para a resolução numérica de problemas de valor inicial, entretanto o foco maior se dará nas funções embutidas ao software ode23 e ode45. O solver ode23 usa os métodos de Runge-Kutta de 2ª e 3ª ordem simultaneamente, por meio do algoritmo Bogacki-Shampine, enquanto o ode45 usa os métodos de Runge-Kutta de 4ª e 5ª ordem, com o algoritmo de Dormand e Prince. Naturalmente, a ode45 possui um trabalho computacional maior por passo do que a ode23, entretanto pode dar passos maiores sem perder precisão. Tendo isso em vista, a maior parte dos exemplo e exercícios desta aula utilizarão a ode45. Basicamente, o uso dessas funções se dá da forma apresentada abaixo: Exemplo 1 – Encontre a solução numérica para a EDO de primeira ordem abaixo no intervalo de : O primeiro passo para encontrar a solução da EDO acima é definir a função , o que pode ser feito criado uma função anônima. Tais funções não ficam armazenadas num arquivo de programa, mas são associadas a uma variável do tipo function_handle. Elas devem ser escritas na janela de comando na forma: Assim, para esse exemplo, a função escreve-se: 53 Apostila do Minicurso de MATLAB PET Engenharia Química UFPR – 2018 Então aplicando o solver ode45 e observando que ele retorna dois vetores de coluna, com os valores de e , respectivamente. Outra maneira de definir a função é definindo-a dentro de um script em