Baixe o app para aproveitar ainda mais
Prévia do material em texto
[MATLAB/SIMULINK©: Aplicações na Engenharia Química] 2 Ivan Carlos Franco. Matlab/Simulink® - Noções Básicas e Aplicações: Aplicações na Engenharia Química. Centro Universitário FEI. Departamento de Engenharia Química. Versão 1.2018, Atualizado em 03/208. Sumário 3 Sumário CAPÍTULO 1 5 Introdução ao MATLAB© 5 1.1 O que é MATLAB©? 5 1.2 Inicializando o MATLAB© 5 1.3 Operações Aritméticas e funções matemáticas 6 1.4 Armazenamento e manipulação de dados 6 1.5 Operações Matemáticas com vetores ou matrizes 8 1.5.1 Soma e subtração de vetores e matrizes 8 1.5.2 Multiplicação de matrizes e vetores 9 1.5.3 Divisão de matrizes e vetores 9 1.5.4 Operação por elemento 9 1.6 Gerando Arquivo de funções 10 1.7 Criando Gráficos no MATLAB© 11 1.8 Programando no MATLAB 12 1.8.1 Operadores relacionais e operadores lógicos 13 1.8.2 Declarações condicionais 13 1.8.2 Laços de repetição ou loops 14 CAPÍTULO 2 17 SIMULINK© 17 2.1 Introdução 17 2.2 Criando um modelo no SIMULINK© 17 2.3 Configurando os blocos os blocos SIMULINK© 21 2.3.1 Configuração das propriedades dos blocos 21 2.4 Resolvendo equações diferenciais utilizando o SIMULINK© 22 CAPÍTULO 3 23 SIMULINK©: Bibliotecas e Blocos 23 3.1 Principais configurações do SIMULINK© 23 3.2 Biblioteca de Blocos 23 3.2.1 CONTINUOUS: Blocos de sistemas dinâmicos contínuos 23 3.2.2 DISCONTINUITIES: Blocos que implementam sistemas descontínuos 24 3.2.3 DISCRETE: Blocos de sistemas dinâmicos discretos 24 3.2.4 LOOK-UP TABLES: Blocos de pesquisa em tabela (matriz) 24 3.2.5 MATH OPERATION: Blocos de operadores matemáticos 25 3.3.6 MODEL VERIFICATION: Blocos para verificação de modelos 25 3.3.7 MODEL-WIDE UTILITES: Blocos utilitários 26 3.3.8 PORT & SUBSYSTEMS: blocos de portas, conexões e subsistemas. 26 3.3.9 SIGNAL ATTRIBUTES: Blocos de atributos de sinais 26 3.3.10 SIGNAL ROUTING: Roteamento de sinais 27 3.3.11 SINKS: Blocos de saída de resultados 27 3.3.12 SOURCES: Blocos de origem de sinais 27 3.3.13 USER-DEFINED FUNCTIONS: Blocos de funções definidas pelo usuário 28 CAPÍTULO 4 29 Aplicações do MATLAB©\SIMULINK© na Engenharia Química 29 4.1 Problemas envolvendo equações não lineares 29 4.2 Problemas envolvendo sistemas de equações lineares 32 4.3 Problemas envolvendo ajuste de curvas e interpolação 34 4.4 Problemas envolvendo diferenciação numérica 37 4.5 Problema envolvendo integração numérica 38 4.6 Problemas envolvendo Equações diferenciais Ordinárias: PVI 40 4.7 Problemas envolvendo Equações diferenciais Ordinárias: PVC 43 Referências Bibliográficas 45 [MATLAB/SIMULINK©: Aplicações na Engenharia Química] 4 CAPÍTULO 1 5 CAPÍTULO 1 Introdução ao MATLAB© 1.1 O que é MATLAB©? O MATLAB© foi originalmente desenvolvido como um laboratório de matrizes. Atualmente, o elemento central do MATLAB© ainda é a matriz. Manipulações matemáticas de matrizes são muito convenientemente implementadas em ambientes interativos e fáceis de usar. Além de o MATLAB© ser uma linguagem robusta para cálculos científicos e apresentar uma interface gráfica de fácil compreensão, dispõe também de uma biblioteca abrangente de funções matemáticas e de bibliotecas “toolboxes”. O MATLAB© possui também um pacote de software chamado SIMULINK©. O SIMULINK© foi desenvolvido para simular e analisar sistemas dinamicamente. Suporta sistemas lineares e não-lineares modelados em tempo contínuo, tempo discreto ou uma mistura dos dois. Abordaremos este pacote nos Capítulos 3 e 4 deste material. 1.2 Inicializando o MATLAB© O MATLAB© apresenta em sua tela principal várias janelas com propósitos específicos, Figura 1.1. As janelas mais utilizadas são: a janela de comandos (Command Window), a janela de figuras (Figure Window), a janela de edição (Editor Window) e janela de ajuda (Help Window). Além destas quatro janelas mais utilizadas, quando em execução, o MATLAB© apresenta a janela de lançamento (Lauch Pad Window), a janela histórico de comandos (Command History Window), a janela área de trabalho (Workspace Window) e a janela de diário corrente (Current Directory Window). Figura 1. 1 - Janelas do MATLAB quando em execução Estas janelas são descritas com suas funções na Tabela 1.1. Tabela 1. 1 – Janelas do MATLAB© e suas funções. Janela Função janela de comandos (Command Window)a Janela na qual se realiza a entrada de variáveis e comandos e executa programas (scripts). janela de figuras (Figure Window) Janela que apresenta a saída gráfica de comandos. janela de edição (Editor Window) Cria e procura erros em arquivos contendo programas e funções. janela de ajuda (Help Window) Apresenta informações sobre comandos e funções. a janela de lançamento (Lauch Pad Window) Possibilita acessar ferramentas e documentações. janela histórico de comandos (Command History) Lista os comandos utilizados na janela de comandos. janela área de trabalho (Workspace Window)b Lista as variáveis geradas na janela de comando e pelos programas executados. janela de diário corrente (Current Directory Window) Mostra os arquivos presentes no diretório corrente. a A janela de comando é a janela do MATLAB© aberta sempre que o programa é iniciado. Os comandos são digitados ao lado do prompt (>>) e executados quando acionada a tecla Enter. Quando digitado ponto-e-virula (;) ao final da linha do comando não será gerada saída na janela de comando. O símbolo (%) indica comentários. Para limpar a janela de comandos basta digitar o comando (clc). A tecla (↑) pode ser utilizada para visualizar os comandos já digitados. b Para deletar todas a variáveis criadas basta digitar o comando (clear all). [MATLAB/SIMULINK©: Aplicações na Engenharia Química] 6 1.3 Operações Aritméticas e funções matemáticas Da mesma forma que uma calculadora, o MATLAB©, realiza operações aritméticas de forma escalar, Tabela 1.2. Tabela 1. 2 – Operações aritméticas Operação Símbolo Exemplo Adição + 8+2 Subtração - 8-2 Multiplicação * 8*2 Divisão à direita / 8/2 Exponenciação ^ 5^3 As operações aritméticas são introduzidas na janela de comando (command window). Todo comando no MATLAB© é executado com o acionamento da tecla Enter, assim, para executar a operação matemática basta digitá-la na janela de comando e acionar Enter para o MATLAB© calcular a expressão e enviar a resposta à janela de comando. Os valores podem ser introduzidos diretamente ou atribuídos a variáveis. Command window >> 5+6/4 ans = 6.5000 >> (9+6)/3+25^(2/5) ans = 8.6239 Quando valores numéricos são atribuídos às variáveis para a realização de operações aritméticas, deve-se levar em consideração a característica de o MATLAB© ser “case sensitive”, isto é, diferenciar caracteres em caixa alta (letras maiúsculas) e caracteres em caixa baixa (letras minúsculas). Command window >> x=2.3 x = 2.3000 >> y=5.6 y = 5.6000 >> z=(3*x-y)+y^2/x^3 z = 3.8775 Além das operações aritméticas básicas o MATLAB© apresenta diversas funções matemáticas residentes. Para executar uma função residente deve-se adicionar o argumento da função entre parênteses. Por exemplo, calcular o logaritmo na base 10 de um número x qualquer. Para realizar o cálculo deve-se inserir o argumento x entre parênteses na função: log10 (x),onde, log10 é a função que calcula o logaritmo na base 10 e x é o argumento. Da mesma forma que podemos realizar cálculos com valores numéricos atribuídos às variáveis podemos utilizar as funções residentes com variáveis. Command window >> log10(100) ans = 2 >> log10(100+30^2) ans = 3 >> x=400 x = 400 >> log10(x) ans = 2.6021 Na Tabela 1.3 são fornecidas algumas funções matemáticas elementares presentes no MATLAB©. Tabela 1. 3 – Funções matemáticas elementares e exemplos de utilização Comando Função Exemplo sqrt (x) Calcula a raiz quadrada de x >>sqrt(49) ans = 7 exp(x) Calcula o exponencial de x (ex) >>exp(1.5) ans = 4.4817 abs(x) Calcula o valor absoluto de x >>abs(-40) ans = 40 log(x) Calcula o logaritmo natural na base e de x, ln(x) >>log(46) ans = 3.8286 log10(x) Calcula logaritmo na base 10 de x >> log10(46) ans = 1.6628 sin(x) Calcula o seno de um ângulo x em radianos >> sin(180) ans = -0.8012 sind(x) Calcula o seno de um ângulo x em graus >> sind(180) ans = 0 pi Retorna o valor da constante pi >> pi ans = 3.1416 Para obter mais informações sobre funções matemáticas deve-se utilizar o comando help seguido do argumento. Exemplo: como calcular o coseno de um ângulo. Command window >> help cos COS Cosine of argument in radians. COS(X) is the cosine of the elements of X. Pode-se também utilizar o comando lookfor para obter informação de funções. Por exemplo, informações sobre a função coseno. Command window >> lookfor cosine acos Inverse cosine, result in radians. acosd Inverse cosine, result in degrees. acosh Inverse hyperbolic cosine. acsc Inverse cosecant, result in radian. acscd Inverse cosecant, result in degrees. acsch Inverse hyperbolic cosecant. cos Cosine of argument in radians. cosd Cosine of argument in degrees. Cosh Hyperbolic cosine. 1.4 Armazenamento e manipulação de dados A forma fundamental de armazenamento do MATLAB© é arranjo ou matriz. Os dados são organizados em linhas e/ou colunas. A forma mais simples de armazenamento é o arranjo de uma linha ou uma coluna (unidimensional), o que corresponde a um único número. Um conjunto de n×m (bidimensional) é uma lista de números organizados em linhas e colunas, uma matriz ou um Introdução ao MATLAB© 7 vetor (coluna ou linha). Cada componente em um vetor ou matriz é conhecido como elemento. No MATLAB© a criação de um vetor ou matriz se dá atribuindo os valores dos elementos dos mesmos a uma variável ou diretamente (quando estes valores são conhecidos). Para realizar a atribuição dos valores deve-se colocá-los entre colchetes: nome_da_variável=[número_1 número_2…número_n] Para criar um vetor linha os números devem ser digitados utilizando espaço ou vírgula para separar os elementos e para criar um vetor coluna os números devem ser digitados utilizando ponto-e-vírgula para separar os elementos: nome_da_variável = [numero_1 numero_2 … numero_n] (linha) nome_da_variável = [numero_1;numero_2;…;numero_n] (coluna) Pode-se também criar um vetor linha utilizando uma sequência de valores igualmente espaçados, onde m é o primeiro elemento do vetor, k é o incremento entre os elementos e n é o último elemento do vetor: nome_da_variável = m:k:n Uma alternativa para a criação de um vetor é a utilização do comando linspace: Nome_da_variável = linspace(var_inicial,var_final,n) Exemplos de criação de vetores. Command window >> altura=[1.78 1.90 1.45 1.76 1.85 1.63] altura = 1.7800 1.9000 1.4500 1.7600 1.8500 1.6300 [vetor linha] Command window >> idade=[25; 30; 40; 55] idade = 25 30 40 55 [vetor coluna] Command window >> R=[1:3:20] R = 1 4 7 10 13 16 19 [vetor linha com incremento de 3] Command window >> peso=linspace(0,20,6) peso = 0 4 8 12 16 20 [vetor linha utilizando linspace (intervalo de 0 a 20 contendo 6 elementos)] Para a criação de um conjunto bidimensional (matriz), onde os elementos são dispostos em linhas e colunas, é necessário digitar os elementos da linha separando o conjunto que compõe a linha por ponto-e-vírgula: nome_da_variável = [1ª linha de elementos; 2ª linha de elementos;...; última linha de elementos] Os elementos que compõem a matriz podem ser numéricos ou expressões matemáticas sendo válido para vetores. Lembre-se de que todas as linhas devem conter o mesmo número de elementos. Alguns exemplos de criação de matrizes são apresentados a seguir. Command window >> matriz=[3 4 5; 5 8 9; 0 9 8] matriz = 3 4 5 5 8 9 0 9 8 [matriz 3×3 com elementos numéricos] Command window >> %declaração de variáveis >> a1=5; a2=6; a3=7; >> matriz=[a1 a2 a3; log(a1) log10(a2) exp(-a3); 1 a1*a2 8] matriz = 5.0000 6.0000 7.0000 1.6094 0.7782 0.0009 1.0000 30.0000 8.0000 [matriz 3×3 com elementos numéricos e expressões matemáticas] Note que o símbolo (%) define que o que for digitado representa um comentário e o ponto-e-vírgula na declaração de a1, a2 e a3 oculta os valores declarados na tela de comando. Quando declaramos uma variável no MATLAB© estamos criando um vetor ou uma matriz (dependendo da dimensão). Ao declarar um único elemento estamos criando um escalar. Quando declaramos elementos em linhas e colunas criamos uma matriz. A partir do momento em que se cria uma matriz ou vetor pode-se fazer a leitura deste elemento individualmente ou em subgrupos. Ao realizar esta operação estamos endereçando os elementos do vetor ou da matriz e este endereçamento nada mais é que a posição que este elemento ocupa na matriz ou no vetor. Além de realizar a leitura deste elemento pode-se também reescrever seu valor através deste endereçamento. A seguir são apresentados alguns exemplos de endereçamento. Command window >> A=[12 34 32 56 76 54 78 90] A = 12 34 32 56 76 54 78 90 >> A(3), A(7) ans = 32 ans = 78 [leitura dos elementos 3 e 7 do vetor A] Command window >> A(3)=100; A(7)=100 A = 12 34 100 56 76 54 100 90 [atribuindo novos valores aos elementos 3 e 7 do vetor A] [MATLAB/SIMULINK©: Aplicações na Engenharia Química] 8 Command window >> A(6)*A(8) ans = 4860 [efetuando cálculos com elementos individuais (6 e 8) do vetor A] Command window >> B=[1 2 3; 10 30 40; 100 200 300] B = 1 2 3 10 30 40 100 200 300 >> B(2,2) ans = 30 [leitura do elemento (2,2) da matriz B] Command window >> B(1,1)=0; B(2,2)=0; B(3,3)=0 B = 0 2 3 10 0 40 100 200 0 [atribuindo novos valores aos elementos da diagonal principal da matriz B] Command window >> B(3,1)-B(2,3) ans = 60 [efetuando cálculos com elementos individuais (3,1) e (2,3) da matriz B] Assim como para as funções matemáticas, o MATLAB© apresenta um conjunto de funções residentes para criação rápida de alguns vetores e matrizes. Algumas destas funções são descritas na Tabela 1.4. Tabela 1. 4 - Funções residentes destinadas a criação rápida de vetores e matrizes. Comando Função Exemplo zeros(m,n) Cria uma matriz (m×n) com todos os elementos nulos >> zeros(3,5) ans = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 magic(n) Cria uma matriz quadrada de dimensão n (elementos randômicos) magic(3) ans = 8 1 6 3 5 7 4 9 2 rand(m,n) Cria umamatriz com elementos randômicos de dimensão (m×n) com valores distribuidos entre 0 e 1 >> rand(2,3) ans = 0.81 0.12 0.63 0.90 0.91 0.09 Randn(n) Cria uma matriz com elementos randômicos de dimensão n com média 0 e variância 1 com valores distribuídos entre 0 e 1 >> randn(3) ans = -0.43 2.76 0.72 0.34 -1.34 -0.06 3.57 3.03 0.71 ones(m,n) Cria uma matriz (m×n) com todos os elementos igual a 1 >> ones(2,4) ans = 1 1 1 1 1 1 1 1 eye(n) Cria uma matriz identidade >> eye(4) ans = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 Como visto anteriormente podemos gerar os dados a serem utilizados diretamente no MATLAB©. Contudo, pode-se importar dados de interesse de arquivos nos formatos .txt (arquivo de texto) e .xls ou .xlsx (excel). Quando os dados forem do tipo numérico (apenas) e em formato .txt pode-se utilizar o comando load para a importação dos dados. Isto pode ser realizado de duas formas (sintaxe): Command window >> %sintaxe 1 >> load nome_do_arquivo.txt >> %sintaxe 2 >> nome_variavel=load(‘nome_do_arquivo.txt’) [importando dados numéricos de arquivos .txt] Note que na utilização da sintaxe 1 os dados serão importados para uma variável que terá o nome do arquivo .txt e na sintaxe 2 o usuário escolhe o nome da variável na qual será importado os dados. Quando os dados a serem importados são heterogêneos (caracteres e números) deve-se utilizar o comando importdata. Por exemplo: um arquivo no format .txt que contenha na primeira linha as variáveis: Temp1 Temp2 Temp3 Temp4 e na segunda linha 30;40;35;28 ao executar o comando importdata tem-se: Command window >> importdata('exemplo.txt') ans = data: [30 40 35 28] textdata: {'Temp1 Temp2 Temp3 Temp4'} rowheaders: {'Temp1 Temp2 Temp3 Temp4'} [importando dados heterogêneos de arquivos .txt] Outra extensão de arquivo que pode ser importada é o tipo .xls ou .xlsx (arquivos do excel). Para isto pode-se utilizar o comando xlsread como demonstrado no exemplo abaixo. Command window >> %sintaxe 1 >> xlsread(‘nome_do_arquivo.xls’) >> %sintaxe 2 >> nome_variavel=xlsread(‘nome_do_arquivo.xls’) [importando dados numéricos de arquivos .xls ou .xlsx] 1.5 Operações Matemáticas com vetores ou matrizes As operações matemáticas realizadas com os vetores e/ou matrizes criadas no MATLAB© podem ser representadas em três grupos: operações com escalares, matriz (1×1); operações algébricas lineares com vetores ou matrizes e operações elemento por elemento. 1.5.1 Soma e subtração de vetores e matrizes As operações de soma e subtração de vetores e matrizes seguem as regras de álgebra linear e podem ser realizadas apenas com vetores e/ou matrizes de mesma dimensão. Ao realizar uma soma ou subtração de um escalar a um vetor e/ou matriz, este valor escalar será adicionado ou Introdução ao MATLAB© 9 subtraído de todos os elementos do arranjo. Exemplos de operações de adição e subtração de vetores e/ou matrizes: Command window >> vetor_A=[2 4 6] vetor_A = 2 4 6 >> vetor_B=[2 5 3] vetor_B = 2 5 3 >> vetor_c=vetor_A+vetor_B vetor_c = 4 9 9 [adição de vetores] Command window >> vetor_d=vetor_A-vetor_B vetor_d = 0 -1 3 [subtração de vetores (utilizando os vetores anteriores)] Command window >> vetor_e=vetor_A+10 vetor_e = 12 14 16 >> vetor_f=vetor_B-10 vetor_f = -8 -5 -7 [operações com escalares] 1.5.2 Multiplicação de matrizes e vetores Para realizar a operação de multiplicação entre matrizes deve-se levar em conta as regras de álgebra linear. Assim, para que se possa fazer uma multiplicação entre as matrizes MAT1 e MAT2 (por exemplo) de acordo com as regras de álgebra linear o número de colunas de MAT1 deve ser igual a número de linhas de MAT2. Se isto for verdadeiro a multiplicação pode ser realizada através do comando de multiplicação (*). Exemplo de operação de multiplicação de matrizes: Command window >> MAT1=[1 -4 -8;5 7 0; -1 -6 3] MAT1 = 1 -4 -8 5 7 0 -1 -6 3 >> MAT2=[1; -9; 4] MAT2 = 1 -9 4 >> MAT3=MAT1*MAT2 MAT3 = 5 -58 65 [efetuando multiplicação de matrizes] 1.5.3 Divisão de matrizes e vetores A divisão de matrizes no MATLAB© está diretamente associada à solução de um sistema de equações lineares. Os operadores relacionados para a operação de divisão de matrizes são a divisão à esquerda (\) e a divisão à direita (/). A divisão à esquerda pode ser utilizada na resolução de um sistema linear de n equações escritas da forma matricial [a][x]=[b], onde: [a] é a matriz dos coeficientes da matriz (n×n), [x] é o vetor coluna (n×1) com as incógnitas (x1, x2, ... , xn por exemplo) e [b] é um vetor coluna (n×1) de constantes. Tendo como exemplo o sistema de equações lineares abaixo: � 4�� − 2�� − 3� + 6�� = 12−6�� + 7�� + 6.5� − 6�� = −6.5�� + 7.5�� + 6.25� + 5.5�� = 16−12�� + 22�� + 15.5� − �� = 17 e utilizando o operador divisão à esquerda para resolver o sistema obtemos: Command window >> a=[4 -2 -3 6; -6 7 6.5 -6; 1 7.5 6.25 5.5; -12 22 15.5 -1] a = 4.0000 -2.0000 -3.0000 6.0000 -6.0000 7.0000 6.5000 -6.0000 1.0000 7.5000 6.2500 5.5000 -12.0000 22.0000 15.5000 -1.0000 >> b=[12;-6.5;16;17] b = 12.0000 -6.5000 16.0000 17.0000 >> x=a\b x = 2.0000 4.0000 -3.0000 0.5000 [resolução de sistema de equações lineares na forma (n×n) utilizando divisão à esquerda] 1.5.4 Operação por elemento As operações de subtração e adição em matrizes e vetores, por definição, já são realizadas elemento por elemento. Se quisermos realizar uma multiplicação, uma divisão ou uma exponenciação elemento por elemento em uma matriz ou um vetor deve-se utilizar os comandos apresentados na Tabela 1.5: Tabela 1. 5 - Funções dedicadas à operação elemento por elemento Operador Função Operador Função .* Multiplicação ./ Divisão à direita .^ Exponenciação .\ Divisão à esquerda Note que antes de cada operador é adicionado um ponto (.) para realizar operações elemento a elemento de matrizes e vetores. A seguir são apresentados alguns exemplos de operação por elemento em matrizes e vetores. Command window >> MAT_A=[3 4 5; 4 8 7] MAT_A = 3 4 5 4 8 7 >> MAT_B=[4 2 2; 1 6 8] MAT_B = 4 2 2 1 6 8 >> MAT_A.*MAT_B ans = 12 8 10 4 48 56 [multiplicação por elemento] [MATLAB/SIMULINK©: Aplicações na Engenharia Química] 10 Command window >> MAT_A./MAT_B ans = 0.7500 2.0000 2.5000 4.0000 1.3333 0.8750 [Divisão por elemento] Command window >> MAT_B.^MAT_A ans = 64 16 32 1 1679616 2097152 >> MAT_A.^3 ans = 27 64 125 64 512 343 [Exponenciação por elemento] O MATLAB© dispõe de algumas funções para realizar operações de matrizes e vetores. Algumas destas funções são descritas na Tabela 1.6. Tabela 1. 6 - Funções residentes para operações envolvendo matrizes e vetores Comando Função Exemplo size(mat_a) Indica o tamanho do vetor ou matriz (Exemplo: tamanho da matriz mat_a*) >> size(mat_a) ans = 2 2 mat_a’ Retorna a transposta de uma matriz >> mat_a' ans = 2 5 3 9 norm(mat_a) Determina a norma da matriz >> norm(mat_a) ans = 10.90 det(mat_a) Realiza o cálculodo determinante de uma matriz >> det(mat_a) ans = 3 trace(mat_a) Realiza a soma dos elementos da diagonal principal de uma matriz >> trace(mat_a) ans = 11 eig(mat_a) Retorna os autovalores de uma matriz >> eig(mat_a) ans = 0.28 10.72 inv(mat_a) Retorna o valor da matriz inversa de uma matriz >> inv(mat_a) ans = 3.00 -1.00 -1.67 0.66 length(mat_a) Retorna o número de linha de uma matriz >> length(mat_a) ans = 2 sum(vet_a) Realiza a soma de todos os elementos de um vetor >> sum(vet_a) ans = 19 *matriz de referência: mat_a=[2 3;5 9]; &vetor de referência: vet_a=[3 4 5 7] 1.6 Gerando Arquivo de funções No MATLAB© um arquivo de função é um programa usado como uma função. Este programa possui argumento de entrada e saída contendo uma ou mais variáveis que podem ser representadas por um escalar, um vetor ou uma matriz. Um arquivo de função pode ser utilizado como funções matemáticas e subprogramas. Os arquivos de funções são criados e editados através da geração de um script, Figura 1.2. Figura 1. 2 – Criando um script para a geração de um programa MATLAB©: (a) Abrindo um Script; (b) Janela de programação (editor window). Para criação de um arquivo de função a primeira linha executável do arquivo deve conter: function[argumento_saída]=nome_da_função(argumento_en trada) Exemplo 1.1: Uma função simples para calcular o valor dos pagamentos mensais e o total de um financiamento de um equipamento onde �� = �����∙��������� ��� !"#"�$ %�$∙"&'() pode ser escrita como: Editor window function[pm,pt]=finan(valor,taxa,ano) % finan calcula o pagamento mensal e o total do % financiamento % Argumentos de entrada: % valor :valor do financiamento (R$) % taxa :taxa anual de juros (%) % ano :duração do financiamento (ano) % Argumento de saída: % pm :valor do pagamento mensal (R$) % pt :valor do pagamento total (R$) format bank taxa_am=0.01*taxa/12; pm=valor*taxa_am/(1-1/((1+taxa_am)^(12*ano))); pt=pm*12*ano; Função 1. 1 – finan.m Para executar a função deve-se digitar entre colchetes os argumentos de saída, o nome da função e os argumentos de entrada. Por exemplo, para um financiamento de um equipamento no valor de R$ 650.000,00 com uma taxa anual de juros de 7,5% com 5 anos para o pagamento deseja-se saber o valor dos pagamentos mensais e valor total pago ao final do financiamento. Os argumentos de saída são: valor mensal e total pago. Os argumentos de entrada são: valor do financiamento, taxa anual de juros e tempo de pagamento. Para a execução da função criada deve-se digitar na janela de comando a seguinte linha de comando: Command window >> [mensal total]=finan(650000,7.5,5) mensal = 13024.67 total = 781480.00 [execução da função finan.m] Introdução ao MATLAB© 11 1.7 Criando Gráficos no MATLAB© Diversos tipos de gráficos podem ser gerados utilizando o MATLAB© que podem variar de gráficos padrões com eixos lineares, gráficos com eixo logarítmico, gráficos de barras e escalas, gráficos polares, gráficos 3D entre outros. Para gerar gráficos bidimensionais (2D) utiliza-se o comando plot e pode ser gerado pelo comando: Plot(x,y) onde os argumentos x e y são vetores contendo o mesmo número de elementos. Quando executado o comando plot a janela com a figura gerada abre automaticamente. Por exemplo, se tivermos um vetor x=[1 2 3 4 5 6 7 8 9 10] e um vetor y=[1 2 3 5 7 11 13 17 23 37], podemos gerar um gráfico y versus x da seguinte forma: Command window >> x=[1 2 3 4 5 6 7 8 9 10]; >> y=[1 2 3 5 7 11 13 17 23 37]; >> plot(x,y) [gerando gráfico bidimensional] A Figura 1.3 representa o gráfico gerado pelo comando plot contendo os conjuntos de dados x e y. Figura 1. 3 – Gráfico gerado a partir de dois vetores O comando plot possui argumentos opcionais para traçar curvas com cores e estilo da linha diferente, bem como a cor e o tipo dos marcadores. O comando para adicionar estes argumentos é: Plot(x,y,’especificadores de linha’) Na Tabela 1.7 são apresentados alguns especificadores de linha. Tabela 1. 7 – Especificadores do tipo da linha Estilo de linha Especificador Estilo de linha Especificador Sólido (padrão) - Pontuado : Traço -- Traço-ponto -. Nas Tabelas 1.8 e 1.9 são apresentados especificadores de cor de linha e especificadores de marcador respectivamente. Tabela 1. 8 – Especificadores de cor de linha Cor Especificador Cor Especificador Vermelha r Azul b Verde g Ciano c Magenta m Preto k Amarelo y Branco w Tabela 1. 9 – Especificadores de marcadores de linha Marcador Especificador Marcador Especificador Sinal de mais + Asterisco * Círculo O Ponto . Quadrado s Triângulo > ou < Diamante d Losangos d Além de mudar os estilos de linhas, as cores das linhas e o tipo do marcador podemos também adicionar título do gráfico e título dos eixos. De uma forma geral os comandos são: xlabel(‘texto no formato string’) ylabel(‘texto no formato string’) title(‘texto no formato string’) Um exemplo de como utilizar os comandos citados nesta seção é representado pelas linhas de comando abaixo tendo como resposta a Figura 1.4. Command window >> dia=[1:1:10]; >> celulas=[20 23 25 24 27 30 28 33 36 40]; >> plot(dia,celulas,'--r*') >> xlabel('DIAS') >> ylabel('N° DE BACTÉRIAS [milhões]') >> title('Dinâmica de crescimento de bactérias') [criando gráficos com argumentos de estilo de linha, cor de linha, tipo de marcador e títulos] Figura 1. 4 – Gráfico com comando de modificação de estilo de linha, cor da linha, tipo de marcador e títulos. Pode-se também criar uma matriz de gráficos na mesma janela utilizando-se o comando subplot seguido do comando plot. subplot(m,n,p) Plot(x,y) No comando subplot(m,n,p), m representa o número de linhas da matriz, n representa o número de colunas da matriz e p a posição do gráfico na matriz. 1 2 3 4 5 6 7 8 9 10 0 5 10 15 20 25 30 35 40 1 2 3 4 5 6 7 8 9 10 20 22 24 26 28 30 32 34 36 38 40 DIAS N° DE BA CT ÉR IA S [m ilh õe s] Dinâmica de crescimento de bactérias [MATLAB/SIMULINK©: Aplicações na Engenharia Química] 12 Exemplo 1.2: A matemática pode ser muito romântica. Podemos verificar isto criando uma matriz de gráficos com as seguintes funções: 1) * = ��; 2) �� + *� = 1; 3) * = 2|�|; 4) * = −2|,-./�0|; 5) * = 11 − /|�| − 10� 6) * = arccos/1 − |�|0 − 7 Editor window % Função y=1/x; x1=1:0.01:60; y1=1./x1; % Função x^2+y^2=1 x2=-1:0.01:1; y2=sqrt(1-x2.^2); y21=-sqrt(1-x2.^2); % Função 2*|x| x3=-1:0.01:1; y3=2*abs(x3); % Função y=-2|sin(x)| x4=0:0.01:6.25; y4=-2.*abs(sin(x4)); % Função y=sqrt(1-(|x|-1)^2) x5=-2:0.01:2; y5=sqrt(1-(abs(x5)-1).^2); % Função y=arccos(1-|x|)-pi x6=-2:0.01:2; y6=acos(1-abs(x6))-pi; %criando a matriz de gráficos (5x1) subplot(1,5,1) plot(x1,y1,'LineWidth',4) subplot(1,5,2) plot(x2,y2,x2,y21,'LineWidth',4) subplot(1,5,3) plot(x3,y3,'LineWidth',4) subplot(1,5,4) plot(y4,x4,'LineWidth',4) subplot(1,5,5) plot(x5,y5,x6,y6,'LineWidth',4) Script 1. 1 – Criando uma matriz de gráficos (exemplo 1.2) O resultado da execução deste script não é apresentando para não estragar a surpresa. Podemos também construir gráficos em 3D. Para isto devemos utilizar dois comandos: um comando para criar a malha de valores das variáveis independentes (meshgrid) e um comando para criar o gráfico 3D (mesh ou surf). Exemplo 1.3: Criar o gráfico de um paraboloide hiperbólico cuja função é dada por: 8 = *�− ��. Editor window % Criando a malha das variáveis independentes x=-2:0.1:2; y=-1:0.1:1; [X,Y]=meshgrid(x,y); % Função da f(x,y)=y^2-x^2 Z= Y.^2-X.^2; % Criando matriz de gráficos subplot(2,1,1) surf(X,Y,Z) title('Comando surf: f(x,y)=y^2-x^2') subplot(2,1,2) mesh(X,Y,Z) title('Comando mesh: f(x,y)=y^2-x^2') Script 1. 2 – Criando gráfico 3D (exemplo 1.3) Figura 1. 5 – representação gráfica do exemplo 1.3 Exemplo 1.4: Novamente vamos mostrar que a matemática é romântica, porém agora faremos um gráfico 3D da seguinte função: 9/�, *, 80 = −��8 − ;<= *�8� + ��� + ;� *� + 8� − 1% Editor window % criando a malha das variáveis independetes % note que neste caso x,y e z são independentes x=-3:0.05:3; y=-3:0.05:3; z=-3:0.05:3; [X,Y,Z] = meshgrid(x,y,z); % função (heart) F=(-(X.^2).*(Z.^3)-(9/80).*(Y.^2).*(Z.^3))+ ... ((X.^2)+(9/4).*(Y.^2)+(Z.^2)-1).^3; % gerando gráfico patch(isosurface(X,Y,Z,F,0),... 'FaceColor','w','EdgeColor','r') daspect([1 1 1]) view(3) axis tight equal set(gcf, 'Color','w') Script 1. 3 – Criando gráfico 3D (exemplo 1.4) Mais uma vez o resultado não será apresentado para não estragar a surpresa. 1.8 Programando no MATLAB Quando realizamos a programação de uma rotina computacional estamos dispondo uma sequência de comandos que são executados na mesma ordem em que são dispostos no programa. Às vezes temos uma complexidade na rotina que faz com que os comandos sejam executados -2 0 2 -1 0 1 -4 -2 0 2 Comando surf: f(x,y)=y2-x2 -2 0 2 -1 0 1 -4 -2 0 2 Comando mesh: f(x,y)=y2-x2 Introdução ao MATLAB© 13 mais de uma vez (realizando um loop) além de algumas tomadas de decisões. Este controle de fluxo pode ser realizado através de declarações condicionais e as repetições por meio de laços de repetições (for e while). Isto é possível utilizando os operadores lógicos e relacionais. 1.8.1 Operadores relacionais e operadores lógicos Os operadores lógicos e relacionais não são utilizados sozinhos, mas sim, em conjunto com outros comandos, o que permite a tomada de decisões que controlem o fluxo da rotina computacional. Um operador relacional realiza uma comparação entre duas variáveis do programa determinando se a declaração de comparação é falsa ou verdadeira, 0 e 1 respectivamente (Tabela 1.10). Um operador lógico examina uma declaração que pode ser falsa ou verdadeira e produz uma resposta verdadeira (1) ou falsa (0), Tabela 1.11. Tabela 1. 10 – Operadores relacionais e exemplos de utilização Operador relacional função Exemplo < Menor que >> 5<9 ans = 1 > Maior que >> 5>9 ans = 0 <= Menor ou igual a >> 5>=5 ans = 1 >= Maior ou igual a >> 7<=3 ans = 0 == Igual a >> 3==3 ans = 1 ~= Diferente de >> 8~=3 ans = 1 Tabela 1. 11 - Operadores lógicos e exemplos de utilização Operado r lógico Nome Função Exemplo & AND Retorna o valor falso (0) ou verdadeiro (1) atuando em dois operando. Se os dois operandos forem verdadeiros, o resultado será (1); senão, o resultado será (0). >> % os números 3 e 7 são ambos diferentes de zero (verdadeir os), logo a resposta será 1 >> 3&7 ans = 1 | OR Retorna o valor falso (0) ou verdadeiro (1) atuando em dois operando. Se qualquer um dos operando ou ambos forem verdadeiros, o resultado será (1); senão (os dois forem falsos), o resultado será (0) >> % pelo menos um dos valores (5 e 0) é diferente de zero, logo a receberá 1 >> 5|0 ans = 1 ~ NOT Retorna o valor oposto de um operando. Verdadeiro (1) se o operando for falso, e falso (0) se operando for verdadeiro. >> ~3 ans = 0 ou >> ~0 ans = 1 1.8.2 Declarações condicionais As declarações condicionais permitem selecionar ou executar seções específicas de códigos em uma rotina computacional mudando o fluxo da programação por meio de expressões de controle tais como: if-end, if-else- end e if-elseif-else-end, Figuras 1.5 a 1.7. % Declaração condicional ... if comandos end ... Figura 1. 6 – Estrutura de declaração condicional if-end % Declaração condicional ... if comandos (1) else comandos (2) end ... Figura 1. 7 – Estrutura de declaração condicional if-else-end %Declaração condicional ... if comandos (1) elseif comandos (2) else comandos (3) end ... Figura 1. 8 – Estrutura de declaração condicional if-elseif-else- end Exemplo 1.5: Crie uma rotina para determinar as raízes de uma equação quadrática do tipo: >�� + ?� + @ = 0, onde os coeficientes a, b e c serão as entradas requeridas no programa. Para testar a rotina desenvolvida serão utilize as seguintes equações de segundo grau: 1) �� + 5� + 6 = 0 onde �� = −2 e �� = −3 2) �� + 4� + 4 = 0 onde �� = �� = −2 3) �� + 2� + 5 = 0 onde �� = −1 + 2B e �� = −1 − 2B. [MATLAB/SIMULINK©: Aplicações na Engenharia Química] 14 Editor window % Resolução de equações de Segundo Grau: ax^2+bx+c=0 % Definição das variáveis: % a : coeficiente do termo x^2; % b : coeficiente do termo x; % c : constante da equação; % delta : discriminante da equação; % p_imag : parte imaginária da equação (caso ... % seja raizes complexas); % p_real : parte real da equação (caso seja ... % raízes complexas); % x1 : primeira raiz da equação; % x2 : segunda raiz da equação; % inicio do programa disp('--------------------------------------------'); disp('PROGRAMA PARA SOLUÇÃO DE RAIZES DE ... EQUAÇÕES SEGUNDO GRAU'); disp('--------------------------------------------'); %leitura dos coeficiente a, b e c a=input('Entre com o valor de a: '); b=input('Entre com o valor de b: '); c=input('Entre com o valor de c: '); % cálculo do discriminante delta=b^2-4*a*c; % determinação da raiz (depende do valor do ... % discriminante) %Ambas as raizes são reais if delta > 0 x1=(-b+sqrt(delta))/(2*a); x2=(-b-sqrt(delta))/(2*a); disp('A equação possui duas raizes reais: '); fprintf ('x1= %f\n', x1); fprintf ('x2= %f\n', x2); % Ambas as raizes são iguais elseif delta==0 x1=(-b)/(2*a); disp('A equação possui raizes iguais: '); fprintf('x1=x2= %f\n', x1); % A equação possui raizes complexas else p_real=(-b)/(2*a); p_imag=sqrt(abs(delta))/(2*a); disp('A equação possui raizes complexas: '); fprintf('x1= %f +i %f\n', p_real, p_imag); fprintf('x2= %f -i %f\n', p_real, p_imag); end Script 1. 4 – Utilização da declaração condicional if-elseif- else-end Note que além da aplicação da declaração condicional será utilizado também o comando input. O comando input exibe um marcador na Janela de Comandos e espera o usuário digitar uma resposta A declaração condicional if-elseif-else-end foi utilizada por se tratar da mais complexa (em termos de sintax) dentre as declarações citadas. Uma vez entendido a forma de estruturação da declaração if-elseif-else- end as outras declarações também são entendidas. Ao executar o script desenvolvido as respostas serão: Editor window ----------------------------------------------- PROGRAMA PARA SOLUÇÃO DE RAIZES DE EQUAÇÕES SEGUNDO GRAU ----------------------------------------------- Entre com o valor de a: 1 Entre com o valor de b: 5 Entre com o valor de c: 6 A equação possui duas raizes reais: x1= -2.000000 x2= -3.000000 [resultado da resolução da equação 1] Editor window ----------------------------------------------- PROGRAMA PARA SOLUÇÃO DE RAIZES DE EQUAÇÕES SEGUNDO GRAU -----------------------------------------------Entre com o valor de a: 1 Entre com o valor de b: 4 Entre com o valor de c: 4 A equação possui raizes iguais: x1=x2= -2.000000 [resultado da resolução da equação 2] Editor window ------------------------------------------ PROGRAMA PARA SOLUÇÃO DE RAIZES DE EQUAÇÕES SEGUNDO GRAU ------------------------------------------ Entre com o valor de a: 1 Entre com o valor de b: 2 Entre com o valor de c: 5 A equação possui raizes complexas: x1= -1.000000 +i 2.000000 x2= -1.000000 -i 2.000000 [resultado da resolução da equação 3] 1.8.2 Laços de repetição ou loops Quando se realiza a implementação de uma rotina computacional determinamos uma sequência lógica de execução dos comandos, porém, podemos através de um laço de repetição, alterar a sequência ou fluxo do programa repitindo a execução dos comandos várias vezes consecutivamente. Um exemplo de laço de repetição é o for-end. %Laço de repetição ... for k=f:s:t %loop comando end ... Figura 1. 9 – Estrutura de um laço de repetição for-end Exemplo 1.6: Crie uma rotina utilizando o laço de repetição for-end para realizar as análises estatísticas (média e desvio padrão) do conjunto de dados apresentados na Tabela 1.12. Tabela 1. 12 – Dados para o exemplo 1.6 Massa de cloreto de sódio x (g) 3,0 3,5 2,9 3,1 3,0 3,2 2,8 Editor window % Cálculo da média e do desvio padrão de um % conjunto de dados; % Definição das variáveis: % i : loop index; % n : números de dados de entrada; % des_pad : desvio padrão; % soma_x : somatório dos dados de entrada; % soma_x2 : somatótio do quadrado dos dados de entrada; % x : valor do dado de entrada; % media_x : media dos dados de entrada; disp('--------------------------------------------'); Introdução ao MATLAB© 15 disp('ANÁLISE ESTATÍSICA DE UM CONJUNTO DE DADOS'); disp('--------------------------------------------'); % inicialização das variáveis soma_x e soma_x2; soma_x=0; soma_x2=0; % entrada dos números de dados do conjunto analisado n=input('Entre com o número de dados: '); % validação do número de dados do conjunto. Não se % pode realizar análise estatística com um % conjunto contendo menos de 2 dados. if n<2 disp('ERRO: Conjunto contendo número de dados insuficiente para análise.'); disp(' Entre com dois ou mais dados'); else % inicio do laço de repetição for i=1:n % leitura do dados do conjunto x=input( 'Entre com o valor de x: '); % calculo das somas soma_x=soma_x+x; soma_x2=soma_x2+x^2; end % fim do laço de repetição % inicio dos cálculos estatísticos % cálculo da média media_x=soma_x/n; %cálculo do desvio padrão des_pad=sqrt((n*soma_x2-soma_x^2)/(n*(n-1))); %respostas disp('--------------------------------------------'); fprintf('A média do conjunto de dados é : %f\n', media_x); fprintf('O desvio padrão do conjunto de dados é : %f\n', des_pad); fprintf('0 número de dados do conjunto é : %f\n',n); disp('--------------------------------------------'); end Script 1. 5 – Utilização do laço de repetição for-end Executando o script acima para o seguinte conjunto de dados [3.0, 3.5, 2.9, 3,1, 3.0, 3.2, 2.8] temos como resposta: Editor window ----------------------------------------------------- ANÁLISE ESTATÍSICA DE UM CONJUNTO DE DADOS ----------------------------------------------------- Entre com o número de dados: 7 Entre com o valor de x: 3.0 Entre com o valor de x: 3.5 Entre com o valor de x: 2.9 Entre com o valor de x: 3.1 Entre com o valor de x: 3.0 Entre com o valor de x: 3.2 Entre com o valor de x: 2.8 ----------------------------------------------------- A média do conjunto de dados é : 3.071429 O desvio padrão do conjunto de dados é : 0.228869 0 número de dados do conjunto é : 7.000000 ----------------------------------------------------- [resultado da análise estatística utilizando laço de repetição for-end] [MATLAB/SIMULINK©: Aplicações na Engenharia Química] 16 CAPÍTULO 2 17 CAPÍTULO 2 SIMULINK© 2.1 Introdução O SIMULINK© é um pacote de bibliotecas para modelar, simular e analisar modelos dinâmicos e utiliza uma interface gráfica com o usuário para a construção dos modelos a partir de um diagrama em blocos, por meio de operações de clique-e-arraste do mouse. Desta forma a criação de modelos é fácil e ágil. Ele inclui bibliotecas de blocos contendo fontes, visualizadores, componentes lineares, não lineares e conectores, com a opção de criação ou personalização de blocos. Suporta modelos lineares e não-lineares e sistemas contínuos e discretos. Muitas outras ferramentas do MATLAB© podem ser usadas junto com o SIMULINK©, e é por isso que o MATLAB© e o SIMULINK© são integrados. Você pode simular, analisar e revisar seus modelos em qualquer ambiente. Para acessar o SIMULINK© abra o MATLAB© e na barra principal clique no botão: Simulink Library, Figura 2.1. Figura 2. 1– Botão para acessar o Simulink® Ao clicar no botão da barra principal do MATLAB© abrirá a tela principal do SIMULINK©, Figura 2.2. Figura 2. 2 – Tela principal do SIMULINK© Na tela principal do SIMULINK© clique no botão New Model (destacado na Figura 2.2) para abrir a janela para criar o modelo, Figura 2.3. Figura 2. 3 – Janela do Simulink® destinada à criação do modelo de blocos 2.2 Criando um modelo no SIMULINK© No simulink® tem-se a opção de resolver sistemas lineares e não-lineares, modelados continuamente, discretamente ou uma mescla dos dois tempos de amostragem. Após definir o modelo de estudo, pode-se realizar a simulação do modelo “brincando” com suas condições operacionais, realizando assim uma análise de causa e efeito das variáveis do processo. Os resultados obtidos na simulação podem ser enviados para o workspace do MATLAB® para serem utilizados posteriormente. Para iniciarmos a utilização do SIMULINK© vamos construir um modelo simples. O modelo representa a integral de uma onda senoidal. Para a criação do modelo deve-se primeiramente abrir um novo arquivo no SIMULINK© conforme indicado na Figura 2.3. Dentro da janela destinada [MATLAB/SIMULINK©: Aplicações na Engenharia Química] 18 à criação do modelo iremos arrastar os seguintes blocos das bibliotecas (do Simulink library browser), Figuras 2.4 a 2.7. Figura 2. 4 – Localização do bloco Sine Wave (SimulinkSources Sine Wave) Figura 2. 5 – Localização do bloco Scope (SimulinkSinks Scope) Figura 2. 6 – Localização do bloco Integrator (SimulinkContinuous Integrator) Figura 2. 7 – Localização do bloco Mux (Simulink Signals Routing Mux) Copie todos os blocos acima descritos para a janela de criação do modelo. A janela contendo os blocos deverá ficar conforme Figura 2.8: Figura 2. 8 – Janela com os blocos (Sine Wave, Integrator, Mux e Scope) Todos os blocos do SIMULINK© apresentam um símbolo que indica um ou mais sinais de entrada e um símbolo que indica um ou mais sinais de saída. O símbolo é representado pelo sinal “>” presente no bloco. Caso o símbolo se apresente totalmente aberto, , indica que naquela posição deverá ser conectado um sinal de entrada. Caso o símbolo se apresente totalmente fechado, , indica que naquela posição deverá ser conectado um sinal de saída. Para a conexão dos blocos, basta segurar o botãoesquerdo do mouse pressionado e puxar a linha até atingir a meta desejada. Por exemplo, para conectar o bloco Sine Wave no bloco Mux deve-se posicionar o mouse na saída do bloco Sine Wave e arrastar até o bloco Mux. Conforme Figura 2.9. Figura 2. 9 – Link dos blocos do SIMULINK© Realizando o mesmo procedimento para todos os blocos obtemos o modelo pronto para simular e analisar os resultados. A figura 2.10 abaixo representa o modelo pronto. Figura 2. 10 – Modelo de blocos do SIMULINK© completo Note que o sinal que entra no bloco Integrator é derivado do sinal que sai do bloco Sine Wave. Esta é uma característica interessante do SIMULINK©. Você pode utilizar quantas vezes necessitar o sinal fazendo uma ligação diretamente na linha. Esta ligação será representada como se fosse um “nó” na linha. Realizada a montagem do modelo pode-se fazer a simulação do mesmo clicando no botão Start do menu do SIMULINK©, Figura 2.11. Sine Wave Scope Integrator 1 s Sine Wave Scope Integrator 1 s Sine Wave Scope Integrator 1 s SIMULINK© 19 Figura 2. 11 – Iniciando a simulação no SIMULINK© Após a execução da simulação deve-se dar um duplo clique no bloco Scope para que o gráfico com os resultados apareça. Note que a simulação foi realizada em uma grandeza de “10 unidades de tempo”. Para mudar a unidade de tempo de simulação deve-se adicionar o valor da unidade no espaço destinado ao tempo de simulação conforme Figura 2.12. Figura 2. 12 – Mudança do tempo de simulação Neste caso mudou-se a simulação de “10 unidades de tempo” para “20 unidades de tempo”. Os resultados obtidos são apresentados na figura 2.13a e 2.13b. Figura 2. 13 – Resultados da simulação da integral de um sinal: (a) tempo de simulação de 10 unidades de tempo, (b) tempo de simulação 20 unidades de tempo. Os resultados obtidos na simulação podem como dito anteriormente, ser visualizados instantaneamente através do bloco Scope ou gravados em uma variável no Workspace do MATLAB© e salvos para posterior utilização. Antes de ilustrar a exportação dos dados para o Workspace do MATLAB©, será adicionado um bloco para calcular também a derivada do sinal Sine Wave, utilizando o bloco Derivate da Continuous Library, Figura 2.14. Figura 2. 14 – Localização do bloco Derivate Para exportar os dados para o Workspace deverá ser utilizado o bloco To Workspace da Sinks Library, Figura 2.15: Figura 2. 15 – Localização do bloco To Workspace O bloco deverá ser colocado após o bloco Mux, desta forma, os resultados provenientes do sinal, da derivada do sinal e da integral do sinal serão exportados para o Workspace do MATLAB©. Como os sinais são provenientes do bloco Mux, será criada uma matriz 3×n. Pode-se também adicionar um bloco To Workspace para cada um dos resultados (sinal, derivada e integral), obtendo variáveis diferentes no Workspace. O modelo final deverá ser representado conforme Figura 2.16. Figura 2. 16 – Modelo de blocos final do SIMULINK© [MATLAB/SIMULINK©: Aplicações na Engenharia Química] 20 O bloco To Workspace requer uma configuração prévia para a sua utilização. Clicando duas vezes no bloco To Workspace abrirá a tela de configuração, Figura 2.17. Será necessário configurar apenas dois parâmetros o Variable name e o Save Format. O padrão é Variable name: simout e Save Format: Structure. Esses parâmetros deverão ser modificados para: Variable name: nome qualquer (neste caso vamos utilizar Resultados) e Save Format: Array. Figura 2. 17 – Configuração do bloco To Workspace Após a configuração do bloco To Workspace, o modelo representado pela figura 2.16 agora será representado pela Figura 2.18: Figura 2. 18 – Modelo de blocos final do SIMULINK© após configuração do bloco To Workspace Ao executar a simulação será criado no Workspace do MATLAB© a variável tout e a variável Resultado (contendo as três respostas do nosso modelo). A variável tout representa um vetor contendo a variável independente (o tempo de simulação) e a variável Resultado representa uma matriz contendo os resultados do sinal, da derivada do sinal e da integral do sinal. Os resultados são exportados para o Workspace do MATLAB©. A Figura 2.19 representa os dados exportados. Figura 2. 19 – Dados gerados no Workspace do MATLAB© Os resultados podem ser gravados e utilizados para gerar os gráficos diretamente no MATLAB©. Para plotar o gráfico deve-se utilizar o comando plot no prompt do MATLAB©, Figura 2.20. Figura 2. 20 – Gerando um gráfico com os resultados obtidos O gráfico gerado no MATLAB© tem a vantagem de poder ser configurado de acordo com a preferência do usuário. Para alterar as propriedades do gráfico clique no botão de Propriedades do Gráfico, Figura 2.21a. Podemos adicionar nome para a figura e para os eixos, bem como configurar as escalas do gráfico, Figura 2.21b. Figura 2. 21 – Alterando as propriedades de um gráfico: (a) Acessando as propriedades do gráfico; (b) Adicionando Título e nome de eixos Para utilizar o gráfico gerado no MATLAB© basta selecionar Copy Figure no menu da janela. A vantagem desta forma de gerar gráficos é a qualidade do mesmo. Quando SIMULINK© 21 geramos o gráfico pelo bloco Scope do simulink não se pode realizar esta configuração, Figura 2.22. Figura 2. 22 – Copiando o gráfico para a área de transferência do Windows: (a) Procedimento para copiar; (b) Gráfico após transferência para arquivo 2.3 Configurando os blocos os blocos SIMULINK© Todos os blocos do SIMULINK© apresentam uma configuração própria. Então, para tratarmos de configuração de blocos, serão utilizados alguns exemplos. 2.3.1 Configuração das propriedades dos blocos Todos os blocos, ao clicar duas vezes, abrem a janela de configuração de seus parâmetros. Para cada bloco há um tipo de configuração. Vamos analisar as configurações dos blocos utilizados para criar o modelo representado na Figura 2.16 (seção 2.2). Para isso vamos retirar o bloco Mux do modelo e adicionar mais entradas no bloco Scope e comparar a diferença, Figura 2.23. Figura 2. 23 – Modelo SIMULINK© utilizado na configura dos parâmetros dos blocos Configurando o bloco Scope: Clique duas vezes no bloco Scope e aparecerá a tela do gráfico sem nenhuma “curva” plotada. Pressione o icone da função Parameters no menu da janela do Scope. Na janela ‘Scope’ Parameters configure o parâmetro “number of axes” mudando seu valor de 1 para 3 (número de entradas desejadas no momento). O bloco Scope passará a ter 3 entradas, Figura 2.24(b). Quando a simulação for realizada o gráfico resultante será formado por três curvas. As curvas representam os sinais de entrada do bloco, Figura 2.25. Figura 2. 24 – Configuração do bloco Scope: (a) Configuração do número de eixos; (b) bloco em detalhe após configuração do número de eixo Figura 2. 25 – Gráfico gerado após configuração do número de eixos Configurando o bloco Sine Wave: Abra a janela de configuração do bloco Sine Wave clicando duas vezes no bloco. Na janela Source Block Parameters: Sine Wave configure os parâmetros ‘Amplitude’ e ‘Frequency (rad/sec) trocando seus valores de 1 para 5 e 1 para 2 respectivamente. A configuração do bloco e a resposta da simulação com os novos parâmetros são apresentados na Figura 2.26. Figura 2. 26 – Configuração do bloco Sine Wave: (a) Configuração dos parâmetros; (b) Resposta da simulação após a configuração dos parâmetros amplitude e frequency. Configurando o bloco Integrator: No bloco Integrator tem-se a possibilidade de calcular a integral limitada do sinal. Para isto clique duas vezes no bloco referente à integral. Na janela Function Block Parameters: Integrator[MATLAB/SIMULINK©: Aplicações na Engenharia Química] 22 configure os parâmetros: Initial Condition passando de 0 para -1. Selecione o Checkbox “Limit Output" para habilitar a configuração do limite inferior e superior da integral. Após habilitada a configuração deverá ser: “Upper saturation limit” igual a 3 e “Lower saturation limit” igual a -1. Note que, depois de realizada a configuração de limite da integral o bloco Integrator será representado de forma diferente, Figura 2.27. Caso não seja mudado o limite de integração, o bloco permanece com a aparência original. Figura 2. 27 – Configuração do bloco Integrator: (a) Mudança dos parâmetros Initial Condition e Limit Output; (b) nova aparência do bloco Integrator com a mudança dos limites de integração 2.4 Resolvendo equações diferenciais utilizando o SIMULINK© Agora que temos uma ideia básica de como funciona e como configurar alguns blocos do SIMULINK©, abordaremos a parte de maior interesse: como resolver equações diferenciais utilizando o SIMULINK©. A abordagem aqui será de uma forma mais direta. Note que não mais aparecerão as figuras indicando onde encontrar os blocos do SIMULINK©. Exemplo 2.1: Resolver a equação: CDC� = −2� + 12�� −20� + 8,5 em um intervalo de x=0:4 utilizando o SIMULINK©. A condição inicial do problema é y(0)=1. Figura 2. 28 – Modelo SIMULINK© para resolução do exemplo 1 Para a criação da estrutura de blocos representado pela Figura 2.28 será preciso: um bloco de integração (integrator), um bloco de saída de gráfico (scope), um bloco para visualização do valor final da solução (display), um blocos de função definida pelo usuário (fcn), um bloco de tempo (clock) que será utilizado com a variável independente x e um bloco para gravar os dados (To Workspace). A configuração das condições iniciais é feita no menu: simulation configuration parameters (para maiores detalhes veja Capítulo 3). A solução da EDO é apresentada na Figura 2.29. Figura 2. 29 - Solução da EDO do exemplo 1 Exemplo 2.2: Resolver a equação: CDC� = D$���$�� em um intervalo de t=0:10 utilizando o SIMULINK©. A condição inicial do problema é y(0)=2. Para a criação da estrutura de blocos acima, será preciso, Figura 2.30: um bloco de integração (integrator), um bloco de saída de gráfico (scope), um bloco para visualização do valor final da solução (display), um bloco de tempo (clock) que será utilizado como variável independente t e um bloco para gravar os resultados (To Worwspace). A configuração das condições iniciais é feita no menu: simulation configuration parameters. Para maiores detalhes ver seção 2.5. A solução da EDO é apresentada na Figura 2.31. Figura 2. 30 - Modelo SIMULINK© para a resolução do exemplo 2 Figura 2. 31 – Solução da EDO do exemplo 2 0 0.5 1 1.5 2 2.5 3 3.5 4 1 1.5 2 2.5 3 3.5 4 4.5 5 variável independente (x) va ri áv ei d ep en de nt e (y ) 0 2 4 6 8 10 0.5 1 1.5 2 variávei independente (t) va ri áv el d ep en de nt e (y ) CAPÍTULO 3 23 CAPÍTULO 3 SIMULINK©: Bibliotecas e Blocos 3.1 Principais configurações do SIMULINK© O SIMULINK possui algumas configurações que nos permitem alterar: o tempo e o passo de simulação, as opções de resolução e os métodos numéricos utilizados na simulação. Nas Tabelas 3.1 a 3.3 são apresentadas essas configurações. Tabela 3. 1 – Simulation Time (tempo de simulação) Opção descrição Start time início da simulação Stop time término da simulação Tabela 3. 2 – Solver Options (opção de resolução) Opção descrição Variable-step / fixed-step1 utilizar passo variado ou fixo Ode45 (Dormard Prince) método de resolução (Tabela 3.3) Max step size passo máximo Min step size passo mínimo Initial step size passo inicial Relative tolerance tolerância relativa para monitoramento e controle de erro a cada passo utilizado pelas rotinas solver Absolute tolerance tolerância absoluta para monitoramento e controle de erro a cada passo utilizado pelas rotinas solver 1 No caso de resoluções com passo variável é: possível modificar o intervalo de tempo entre as iterações (step) durante a simulação; é possível detectar estados de “error control” e “zero rossing”. No caso de resoluções com passo fixo: não é Tabela 3. 3 – Métodos de resolução presentes no SIMULINK© Método Descrição P as so V ar iá ve l Ode45 Resolução por Runge-Kutta (4,5) non-stiff de ordem média Ode23 Resolução por Runge-Kutta (2,3) non-stiff de ordem baixa Ode113 Resolução por Adams-Bahforth Moulton PECE non-stiff de ordem variável Ode15s Resolução por NDF (Numerical Differentiation Formulas) Ode23s Resolução por Rosenblock de ordem 2 Ode23t Resolução de ordem baixa (regra trapezoidal/interpolação livre) Ode23tb Resolução de TR-BDF2 de ordem baixa P as so F ix o Discrete Resolução discreta Ode5 Resolução por versão discreta de Runge-Kutta (4,5) Ode3 Resolução por versão discreta de Runge-Kutta (2,3) Ode2 Resolução por método de Heun (Euler melhorado) Ode1 Resolução por Euler 3.2 Biblioteca de Blocos As principais bibliotecas são apresentadas nas Tabelas 3.4 a 3.24 divididas e sub-biblitecas. 3.2.1 CONTINUOUS: Blocos de sistemas dinâmicos contínuos Tabela 3. 4 – Biblioteca: Continuous –Time Linear System Bloco SIMULINK Nome Descrição Integrator Gera a integral do sinal de entrada possível modificar o intervalo de tempo entre as iterações (step) durante a simulação; o passo é constante e o valor “auto” é dado pela seguinte fórmula: [Max step size] = ([Stop time] – [Start time])/50; não é possível detectar estados de “error control” e “zero crossing”. [MATLAB/SIMULINK©: Aplicações na Engenharia Química] 24 Continuação Tabela 3.4 Derivative Gera a derivada do sinal de entrada State-Space Implementa sistema linear state-space Transfer Fcn Implementa função de transferência Zero-Pole Implementa função de transferência em termos de zeros e polos Tabela 3. 5 - Biblioteca: Continuous –Time Delays Bloco SIMULINK Nome Descrição Transport Delay Gera um atraso fixo no transporte do sinal Variable Transport Delay Gera um atraso variável no transporte do sinal 3.2.2 DISCONTINUITIES: Blocos que implementam sistemas descontínuos Tabela 3. 6 - Biblioteca: Discontinuities Bloco SIMULINK Nome Descrição Saturation Limita o intervalo de saída do sinal Dead Zone Define uma região de valor zero (0) Rate Limiter Limita a taxa de modificação do sinal de entrada Relay Chaveia a saída para duas constantes Quantizer Discretiza a entrada para um intervalo específico Hit Crossing Detecta ponto de cruzamento 3.2.3 DISCRETE: Blocos de sistemas dinâmicos discretos Tabela 3. 7 - Biblioteca: Discrete –Time Linear Systems Bloco SIMULINK Nome Descrição Unit delay Gera um atraso na transmissão do sinal Discrete- Time Integrator Gera integral discreta do sinal de entrada Continuação Tabela 3.7 Discrete Filter Implementa filtro discreto Discrete Transfer Fcn Implementa função de transferência discreta Discrete Zero-Pole Implementa função de transferência discreta em termos de zeros e pólos Discrete State- Space Implementa sistema linear state-space Tabela 3. 8 - Biblioteca: Discrete – Sample & Hold Delay Bloco SIMULINK Nome Descrição Memory Retornao sinal do instante anterior First-Order Hold Amostra o valor anterior do sinal Zero-Order Hold Segura os sinais por um determinado período de tempo 3.2.4 LOOK-UP TABLES: Blocos de pesquisa em tabela (matriz) Tabela 3. 9 - Biblioteca: Look-up Tables Bloco SIMULINK Nome Descrição Lookup Table Dada uma função f e dois vetores x e y, calcula uma aproximação para uma função Lookup Table (2-D) Semelhante a Lookup Table, para uma função f de duas dimensões Lookup Table (n-D) Semelhante a Lookup Table, para uma função f de n dimensões PreLookup Index Search Dado um vetor, retorna o índice da posição relativa do dado de entrada Interpolati on (n-D) Using PreLookup Semelhante ao PreLookup Index Search para n dimensões Direct Lookup Table (n-D) Busca direta em matriz. Dados i, j e m, retorna m(i,j). Começa a indexação com 0. SIMULINK©: Bibliotecas e Blocos 25 3.2.5 MATH OPERATION: Blocos de operadores matemáticos Tabela 3. 10 – Biblioteca: Math Operation – Math Operation Bloco SIMULINK Nome Descrição Sum Soma Product Produto matricial Dot Product Produto escalar Abs Valor absoluto Sign Sinal MinMax Mínimo/máximo Gain Ganho Slider Gain Ganho (com interface de barra) Math Function Função matemática Rounding Function Função de arredondamento Trigonometric Function Função trigonométrica Algebraic Constraint Restrição algébrica Polynomial Função polinomial Tabela 3. 11 – Biblioteca: Math Operation –Vector Operations Bloco SIMULINK Nome Descrição Assigment Atribuição Matrix Concatenation Concatenação de matrizes Reshape Reformatação de matriz Tabela 3. 12 – Biblioteca: Math Operation – Logic Operations Bloco SIMULINK Nome Descrição Bitwise Operator Operador lógico binário Continuação da Tabela 3.12 Combinatorial Logic Lógica combinatória Logical Operator Operador lógico (OR, AND, etc.) Relational Operator Operador relacional (<,>,<=,>=, etc) Tabela 3. 13 – Biblioteca: Math Operation – Complex Vector Conversion Bloco SIMULINK Nome Descrição Complex to Magnitude- Angle Converte número complexo em ângulo Magnitude- Angle To Complex Converte ângulo em número complexo Complex to Real-Imag Decompõe número complexo em parte real e imaginária Real-Imag to complex Compões parte real e imaginária em número complexo 3.3.6 MODEL VERIFICATION: Blocos para verificação de modelos Tabela 3. 14 – Biblioteca: Model Verification Bloco SIMULINK Nome Descrição Check Static Lower Bound Verifica se um sinal é sempre menor que um valor estático Check Static Upper Bound Verifica se um sinal é sempre maior que um valor estático Check Static Ranger Verifica se um sinal está sempre dentro de uma faixa de amplitude estática Check Static Gap Verifica a diferença entre a amplitude de dois sinais Check Dynamic Lower Bound Verifica se um sinal é sempre menor que outro sinal Check Dynamic Upper Bound Verifica se um sinal é sempre maior que outro sinal Check Dynamic Ranger Verifica se um sinal está sempre dentro de uma faixa de amplitude [MATLAB/SIMULINK©: Aplicações na Engenharia Química] 26 Continuação da Tabela 3.14 Assertion Verifica se um sinal é Zero (0) Check Discrete Gradient Verifica se o gradiente do sinal é sempre menor que um limitante superior 3.3.7 MODEL-WIDE UTILITES: Blocos utilitários Tabela 3. 15 – Biblioteca: Model-Wide Utilites – Linearization of Running Models Bloco SIMULINK Nome Descrição Trigger- Based Linearizatio n Chama a função linmod (modelamento linear) a paritr de um evento (trigger). Timed-Based Linearizatio n Chama a função linmod (modelamento linear) em um determinado instante Tabela 3. 16 – Biblioteca: Model-Wide Utilites – Documentation Bloco SIMULINK Nome Descrição Model Info Traz textos definidos nos campos de propriedade do modelo DOC Cria um texto para documentar o modelo 3.3.8 PORT & SUBSYSTEMS: blocos de portas, conexões e subsistemas. Tabela 3. 17 – Biblioteca: Port & Subsystems Bloco SIMULINK Nome Descrição In1 Entrada de sinal Out1 Saída de sinal Trigger Sinal disparador Function- Call Generator Gerador de chamada de função Atomic Subsystem Subsistema Subsystem Subsistema que contém outro subsistema Triggered Subsystem Subsistema com sinal comparador Continuação da Tabela 3.17 Enable Subsystem Subsistema com sinal habilitador Enabled and Triggered Subsystem Subsistema com sinais disparador e habilitador Function- Call Subsystem Representa um subsistema que pode ser chamado como função por outro bloco For Iterator Subsystem Implementa o comportamento “for” para o subsistema While Iterator Subsystem Implementa o comportamento “while” para o subsistema If Implementa o comportamento “if” para um modelo do SIMULINK Switch Case Implementa o comportamento “case” dentro de um modelo do SIMULINK 3.3.9 SIGNAL ATTRIBUTES: Blocos de atributos de sinais Tabela 3. 18 – Biblioteca: Signal Attributes Bloco SIMULINK Nome Descrição Data Type Conversion Conversão entre dois tipos de dados IC Configura o valor inicial para um sinal Rate Transition Manipula transferência de dados em blocos operando com taxas de transmissão diferentes Probe Retorna atributos do sinal (tipo, dimensão, tempo de amostragem) Signal Specificat ion Verifica se o sinal de entrada possui determinados atributos Width Retorna ao número de canais do sinal de entrada SIMULINK©: Bibliotecas e Blocos 27 3.3.10 SIGNAL ROUTING: Roteamento de sinais Tabela 3. 19 – Biblioteca: Signal Routing Bloco SIMULINK Nome Descrição Bus Creator Agrupa vários sinais em um único bus, e permite nomear os sinais individualmente Bus Selector Recebe sinal de um bus ou multiplexador e separa-os em seus sinais individuais Mux Multiplexador Demux Demultiplexador Merge Mistura de sinais Selector Dado um sinal de entrada com vários canais, seleciona algum para saída Manual Switch Chaveador manual Multiport Switch Chaveador com várias portas Switch Chaveador com duas portras From Recebe sinal de um bloco Goto Goto Tag Visibility Define escopo dos blocos Goto e From Goto Envia um sinal para um bloco From 3.3.11 SINKS: Blocos de saída de resultados Tabela 3. 20 – Biblioteca: Sinks - Model & Subsystems Outputs Bloco SIMULINK Nome Descrição Out1 Saída de sinal Terminator Terminador To File Exporta sinal para um arquivo *.mat To Workspace Exporta sinal para uma variável do workspace Scope Gráfico Continuação da Tabela 3.20 Floating Scope Gráfico flutuante XY Graph Gráfico paramétrico X, Y Display Exibe valores numéricos Tabela 3. 21 – Biblioteca: Simulation Control Bloco SIMULINK NomeDescrição Stop Simulation Interrompe simulação 3.3.12 SOURCES: Blocos de origem de sinais Tabela 3. 22 – Biblioteca: Sources – Model & Subsystems Inputs Bloco SIMULINK Nome Descrição In1 Entrada de sinal Ground “Terra”. Impede avisos sobre portas de entrada desconectadas. Saídas Zero (0) From File Importa sinal de um arquivo *.mat From Workspace Importa sinal de uma variável do workspace Tabela 3. 23 – Biblioteca: Sources – Signal Generator Bloco SIMULINK Nome Descrição Constant Gerador de sinal constante Signal Generator Gerador de sinal de onda* Pulse Generator Gerador de pulso Signal Builder Construtor de sinal. Abre uma janela Signal Builder para construções de sinais Ramp Dados valor inicial e um ângulo de inclinação gera o sinal da semi-reta inclinada Sine Wave Gerador de onda senóide Step Gerador de sinal de impulso Repeating Sequence Gerador de seqüência [MATLAB/SIMULINK©: Aplicações na Engenharia Química] 28 Continuação da Tabela 3.20 Chirp Signal Gerador de sinal senóide com freqüência constante Random Number Gerador de números aleatórios com distribuição normal Uniform Random Number Gerador de números aleatórios com distribuição uniforme Band- Limited White Noise Gerador de sinal de ruído Clock Gerador de sinal d tempo contínuo Digital Clock Gerador de sinal de tempo digital * - sine (senoidal); - square (quadrada); - sawtooh (dentada); - random (aleatória dentada, aleatória) 3.3.13 USER-DEFINED FUNCTIONS: Blocos de funções definidas pelo usuário Tabela 3. 24 – Biblioteca: User-Defined Functions Bloco SIMULINK Nome Descrição Fcn Executa uma expressão genérica do MATLAB. Utiliza-se a variável “u” como parâmetro de entrada MATLAB Fcn Executa uma função MATLAB implementada em um m-file* S-Function Executa uma s- function S-Function Builder Utilitário que auxilia a construção de s- function’s * Arquivo Matlab (exemplo: nomearquivo.m) CAPÍTULO 4 29 CAPÍTULO 4 Aplicações do MATLAB©\SIMULINK© na Engenharia Química 4.1 Problemas envolvendo equações não lineares Exemplo 4.1 (Termodinâmica): A lei dos gases ideais é dada por: �F = .GH, onde p é a pressão absoluta, V o volume, n é o número de moles, R a constante de proporcionalidade dos gases e T é a temperatura absoluta. Apesar desta equação ser muito utilizada por engenheiros químicos, ela apresenta boa precisão somente para intervalos limitados de pressão e temperatura e alguns tipos de gases. Para uma maior acurácia devemos utilizar uma equação de estado alternativa, como por exemplo, a equação de van der Waals: �� + �I$% /K − ?0 =GH, onde K = F .⁄ é o volume molar e a e b são constantes empíricas que dependem do gás estudado. Um projeto de engenharia química requer uma estimativa do volume molar (v) para o CO2 e para o O2 em diferentes temperaturas e pressões de modo que o recipiente de armazenamento possa ser dimensionado. Também é de interesse a observação do comportamento do gás pela lei dos gases ideais. Os dados para o projetos são: R=0,082954 L atm-1 mol-1 K-1, para CO2 a=3,592 e b=0,04267 e para O2 a=1,360 e b=0,03183. a. Use uma função que calcule a raiz da função acima pelo método de Newton com um erro de 0,01 para as pressões 1 e 10 atm e temperaturas de 300 e 500 K. b. Use a função residente fzero do MATLAB©. c. Resolva utilizando o SIMULINK©. Solução: Usando o método de Newton Para a solução do exemplo 4.1 necessitaremos criar uma função que represente o método de Newton (Newton.m) e uma rotina (script 4.1) para a execução do método proposto. Editor window function Xs=Newton(Fun,FunDer,X0,erro,imax) % A função Newton determina a raiz de Fun=0 na % vizinhança do ponto X0 usando o método de Newton % Variáveis de entrada: % Fun : função (string) a ser calculada a raiz % FunDer : derivada (string) da função % X0 : chute inicial % erro : critério de parada (solução aceita % como correta) % imax : máximo de iterações % Variáveis de saída: % Xs : solução for i=1:imax xi=X0-feval(Fun,X0)/feval(FunDer,X0); if abs((xi-X0)/X0)<erro Xs=xi; break end X0=xi; end if i==imax fprintf(‘A solução não foi obtida em %i iterações\n’,imax) end Função 4. 1 –Newton.m (exemplo 4.1) Editor window %% Inicialização matlabrc; % limpa todas as 29ariáveis % do workspace e reseta o % matlab close all; % fecha todas as figuras clc; % limpa a tela de comando tic; % inicializa o “timer” % Entradas para o CO2 Fun1CO2=inline(‘(1-3.592/v^2)*(v-0.04267)- 0.082054*300’); FunDer1CO2=inline(‘1- 3.592/v^2+(2*3.592*0.0426/v^3)’); Fun2CO2=inline(‘(10-3.592/v^2)*(v-0.04267)- 0.082054*300’); FunDer2CO2=inline(‘10- 3.592/v^2+(2*3.592*0.0426/v^3)’); Fun3CO2=inline(‘(1-3.592/v^2)*(v-0.04267)- 0.082054*500’); FunDer3CO2=inline(‘1- 3.592/v^2+(2*3.592*0.0426/v^3)’); Fun4CO2=inline(‘(10-3.592/v^2)*(v-0.04267)- 0.082054*500’); FunDer4CO2=inline(‘10- 3.592/v^2+(2*3.592*0.0426/v^3)’); [MATLAB/SIMULINK©: Aplicações na Engenharia Química] 30 % Entradas para O2 Fun1O2=inline(‘(1-1.360/v^2)*(v-0.03183)- 0.082054*300’); FunDer1O2=inline(‘1- 1.360/v^2+(2*1.360*0.03183/v^3)’); Fun2O2=inline(‘(10-1.360/v^2)*(v-0.03183)- 0.082054*300’); FunDer2O2=inline(‘10- 1.360/v^2+(2*1.360*0.03183/v^3)’); Fun3O2=inline(‘(1-1.360/v^2)*(v-0.03183)- 0.082054*500’); FunDer3O2=inline(‘1- 1.360/v^2+(2*1.360*0.03183/v^3)’); Fun4O2=inline(‘(10-1.360/v^2)*(v-0.03183)- 0.082054*500’); FunDer4O2=inline(‘10- 1.360/v^2+(2*1.360*0.03183/v^3)’); % Cálculo das equações (Gases Ideais) v1lgi=0.082054*300/1; v2lgi=0.082054*300/10; v3lgi=0.082054*500/1; v4lgi=0.082054*500/10; % Cáculo das equações (Newton) v1CO2vdw=Newton(Fun1CO2,FunDer1CO2,50,0.01,100); v2CO2vdw=Newton(Fun2CO2,FunDer2CO2,50,0.01,100); v3CO2vdw=Newton(Fun3CO2,FunDer3CO2,50,0.01,100); v4CO2vdw=Newton(Fun4CO2,FunDer4CO2,50,0.01,100); v1O2vdw=Newton(Fun1O2,FunDer1O2,50,0.01,100); v2O2vdw=Newton(Fun2O2,FunDer2O2,50,0.01,100); v3O2vdw=Newton(Fun3O2,FunDer3O2,50,0.01,100); v4O2vdw=Newton(Fun4O2,FunDer4O2,50,0.01,100); disp(‘LEI DOS GASES IDEIAS’) disp(‘T(K) P(atm) VCO2(L/mol) VO2(L/mol)’) disp(‘---------------------------------------------') fprintf(‘ 300 1 %9.4f %9.4f\n’,v1lgi,v1lgi) fprintf(‘ 300 10 %9.4f %9.4f\n’,v2lgi,v2lgi) fprintf(‘ 500 1 %9.4f %9.4f\n’,v3lgi,v3lgi) fprintf(‘ 500 10 %9.4f %9.4f\n’,v4lgi,v4lgi) disp(‘---------------------------------------------') disp(‘VAN DER WAALS’) disp(‘T(K) P(atm) VCO2(L/mol) VO2(L/mol)’) disp(‘---------------------------------------------') fprintf(‘ 300 1 %9.4f %9.4f\n’,v1CO2vdw,v1O2vdw) fprintf(‘ 300 10 %9.4f %9.4f\n’,v2CO2vdw,v2O2vdw) fprintf(‘ 500 1 %9.4f %9.4f\n’,v3CO2vdw,v3O2vdw) fprintf(‘ 500 10 %9.4f %9.4f\n’,v4CO2vdw,v4O2vdw) disp(‘---------------------------------------------') Script 4. 1 – Solução do exemplo 4.1 utilizando o Método de Newton Command window ---------------------------------------------- LEI DOS GASES IDEIAS T(K) P(atm) VCO2(L/mol) VO2(L/mol) ---------------------------------------------- 300 1 24.6162 24.6162 300 10 2.4616 2.4616 500 1 41.0270 41.0270 500 10 4.1027 4.1027
Compartilhar