Você está na página 1de 45

[MATLAB/SIMULINK©: Aplicações na Engenharia Química]

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.

2
Sumário

CAPÍTULO 1
Sumário 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

3
[MATLAB/SIMULINK©: Aplicações na Engenharia Química]

4
CAPÍTULO 1

CAPÍTULO 1
Introdução ao MATLAB©

1.1 O que é MATLAB©? área de trabalho (Workspace Window) e a janela de diário


corrente (Current Directory Window).
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 Figura 1. 1 - Janelas do MATLAB quando em execução
matrizes são muito convenientemente implementadas em Estas janelas são descritas com suas funções na
ambientes interativos e fáceis de usar. Além de o MATLAB© Tabela 1.1.
ser uma linguagem robusta para cálculos científicos e
Tabela 1. 1 – Janelas do MATLAB© e suas funções.
apresentar uma interface gráfica de fácil compreensão,
Janela Função
dispõe também de uma biblioteca abrangente de funções
Janela na qual se realiza a
matemáticas e de bibliotecas “toolboxes”. O MATLAB© janela de comandos (Command
entrada de variáveis e comandos
Window)a
possui também um pacote de software chamado e executa programas (scripts).
Janela que apresenta a saída
SIMULINK©. O SIMULINK© foi desenvolvido para janela de figuras (Figure Window) gráfica de comandos.
simular e analisar sistemas dinamicamente. Suporta sistemas Cria e procura erros em arquivos
janela de edição (Editor Window)
lineares e não-lineares modelados em tempo contínuo, contendo programas e funções.
Apresenta informações sobre
tempo discreto ou uma mistura dos dois. Abordaremos este janela de ajuda (Help Window) comandos e funções.
pacote nos Capítulos 3 e 4 deste material. a janela de lançamento (Lauch Pad Possibilita acessar ferramentas e
Window) documentações.
©
1.2 Inicializando o MATLAB janela histórico de comandos Lista os comandos utilizados na
(Command History) janela de comandos.
Lista as variáveis geradas na
O MATLAB© apresenta em sua tela principal várias janela área de trabalho (Workspace
janela de comando e pelos
janelas com propósitos específicos, Figura 1.1. As janelas Window)b programas executados.
mais utilizadas são: a janela de comandos (Command Window), janela de diário corrente (Current Mostra os arquivos presentes no
Directory Window) diretório corrente.
a janela de figuras (Figure Window), a janela de edição (Editor a A janela de comando é a janela do MATLAB© aberta sempre que o programa é iniciado.
Window) e janela de ajuda (Help Window). Além destas quatro Os comandos são digitados ao lado do prompt (>>) e executados quando acionada a tecla
janelas mais utilizadas, quando em execução, o MATLAB© 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
apresenta a janela de lançamento (Lauch Pad Window), a janela comandos basta digitar o comando (clc). A tecla (↑) pode ser utilizada para visualizar os
histórico de comandos (Command History Window), a janela comandos já digitados.
b Para deletar todas a variáveis criadas basta digitar o comando (clear all).

5
[MATLAB/SIMULINK©: Aplicações na Engenharia Química]
>> x=400
1.3 Operações Aritméticas e funções x =
400
matemáticas >> log10(x)
ans =
2.6021
Da mesma forma que uma calculadora, o MATLAB©,
realiza operações aritméticas de forma escalar, Tabela 1.2. Na Tabela 1.3 são fornecidas algumas funções
matemáticas elementares presentes no MATLAB©.
Tabela 1. 2 – Operações aritméticas
Operação Símbolo Exemplo Tabela 1. 3 – Funções matemáticas elementares e exemplos de
utilização
Adição + 8+2
Subtração - 8-2 Comando Função Exemplo
Multiplicação * 8*2 >>sqrt(49)
/ 8/2 sqrt (x) Calcula a raiz quadrada de x ans =
Divisão à direita 7
Exponenciação ^ 5^3 >>exp(1.5)
Calcula o exponencial de x
exp(x) ans =
As operações aritméticas são introduzidas na janela de (ex) 4.4817
comando (command window). Todo comando no MATLAB© >>abs(-40)
é executado com o acionamento da tecla Enter, assim, para abs(x) Calcula o valor absoluto de x ans =
40
executar a operação matemática basta digitá-la na janela de >>log(46)
Calcula o logaritmo natural
comando e acionar Enter para o MATLAB© calcular a log(x)
na base e de x, ln(x)
ans =
expressão e enviar a resposta à janela de comando. Os 3.8286
>> log10(46)
valores podem ser introduzidos diretamente ou atribuídos a Calcula logaritmo na base 10
log10(x) ans =
variáveis. de x 1.6628
>> sin(180)
Command window Calcula o seno de um ângulo
sin(x) ans =
>> 5+6/4
x em radianos -0.8012
ans = >> sind(180)
Calcula o seno de um ângulo
6.5000 sind(x) ans =
>> (9+6)/3+25^(2/5) x em graus 0
ans = >> pi
Retorna o valor da constante
8.6239 pi ans =
π 3.1416
Quando valores numéricos são atribuídos às variáveis
para a realização de operações aritméticas, deve-se levar em Para obter mais informações sobre funções
consideração a característica de o MATLAB© ser “case matemáticas deve-se utilizar o comando help seguido do
sensitive”, isto é, diferenciar caracteres em caixa alta (letras argumento. Exemplo: como calcular o coseno de um ângulo.
maiúsculas) e caracteres em caixa baixa (letras minúsculas). Command window
>> help cos
Command window COS Cosine of argument in radians.
>> x=2.3 COS(X) is the cosine of the elements of X.
x =
2.3000 Pode-se também utilizar o comando lookfor para
>> y=5.6 obter informação de funções. Por exemplo, informações
y =
5.6000
sobre a função coseno.
>> z=(3*x-y)+y^2/x^3 Command window
z =
>> lookfor cosine
3.8775
acos Inverse cosine, result in radians.
acosd Inverse cosine, result in degrees.
Além das operações aritméticas básicas o MATLAB© acosh Inverse hyperbolic cosine.
apresenta diversas funções matemáticas residentes. Para acsc Inverse cosecant, result in radian.
executar uma função residente deve-se adicionar o acscd Inverse cosecant, result in degrees.
acsch Inverse hyperbolic cosecant.
argumento da função entre parênteses. Por exemplo, calcular cos Cosine of argument in radians.
o logaritmo na base 10 de um número x qualquer. Para cosd Cosine of argument in degrees.
realizar o cálculo deve-se inserir o argumento x entre Cosh Hyperbolic cosine.
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 1.4 Armazenamento e manipulação de
forma que podemos realizar cálculos com valores numéricos dados
atribuídos às variáveis podemos utilizar as funções residentes
com variáveis. A forma fundamental de armazenamento do
MATLAB© é arranjo ou matriz. Os dados são organizados
Command window em linhas e/ou colunas. A forma mais simples de
>> log10(100)
ans =
armazenamento é o arranjo de uma linha ou uma coluna
2 (unidimensional), o que corresponde a um único número.
>> log10(100+30^2) Um conjunto de n×m (bidimensional) é uma lista de
ans =
3 números organizados em linhas e colunas, uma matriz ou um

6
Introdução ao MATLAB©
vetor (coluna ou linha). Cada componente em um vetor ou nome_da_variável = [1ª linha de elementos; 2ª linha
de elementos;...; última linha de elementos]
matriz é conhecido como elemento.
No MATLAB© a criação de um vetor ou matriz se dá Os elementos que compõem a matriz podem ser
atribuindo os valores dos elementos dos mesmos a uma numéricos ou expressões matemáticas sendo válido para
variável ou diretamente (quando estes valores são vetores. Lembre-se de que todas as linhas devem conter o
conhecidos). Para realizar a atribuição dos valores deve-se mesmo número de elementos. Alguns exemplos de criação
colocá-los entre colchetes: de matrizes são apresentados a seguir.
nome_da_variável=[número_1 número_2…número_n]
Command window
>> matriz=[3 4 5; 5 8 9; 0 9 8]
Para criar um vetor linha os números devem ser matriz =
digitados utilizando espaço ou vírgula para separar os 3 4 5
5 8 9
elementos e para criar um vetor coluna os números devem 0 9 8
ser digitados utilizando ponto-e-vírgula para separar os [matriz 3×3 com elementos numéricos]
elementos:
Command window
nome_da_variável = [numero_1 numero_2 … numero_n]
(linha) >> %declaração de variáveis
>> a1=5; a2=6; a3=7;
nome_da_variável = [numero_1;numero_2;…;numero_n] >> matriz=[a1 a2 a3; log(a1) log10(a2) exp(-a3);
(coluna) 1 a1*a2 8]
matriz =
Pode-se também criar um vetor linha utilizando uma 5.0000 6.0000 7.0000
1.6094 0.7782 0.0009
sequência de valores igualmente espaçados, onde m é o 1.0000 30.0000 8.0000
primeiro elemento do vetor, k é o incremento entre os [matriz 3×3 com elementos numéricos e expressões matemáticas]
elementos e n é o último elemento do vetor:
nome_da_variável = m:k:n Note que o símbolo (%) define que o que for digitado
representa um comentário e o ponto-e-vírgula na declaração
Uma alternativa para a criação de um vetor é a de a1, a2 e a3 oculta os valores declarados na tela de
utilização do comando linspace: comando.
Nome_da_variável = linspace(var_inicial,var_final,n)
Quando declaramos uma variável no MATLAB©
Exemplos de criação de vetores. estamos criando um vetor ou uma matriz (dependendo da
dimensão). Ao declarar um único elemento estamos criando
Command window um escalar. Quando declaramos elementos em linhas e
>> altura=[1.78 1.90 1.45 1.76 1.85 1.63]
altura =
colunas criamos uma matriz.
1.7800 1.9000 1.4500 1.7600 1.8500
1.6300 A partir do momento em que se cria uma matriz ou
[vetor linha] vetor pode-se fazer a leitura deste elemento individualmente
Command window ou em subgrupos. Ao realizar esta operação estamos
>> idade=[25; 30; 40; 55] endereçando os elementos do vetor ou da matriz e este
idade =
25
endereçamento nada mais é que a posição que este elemento
30 ocupa na matriz ou no vetor. Além de realizar a leitura deste
40 elemento pode-se também reescrever seu valor através deste
55
[vetor coluna]
endereçamento. A seguir são apresentados alguns exemplos
de endereçamento.
Command window
>> R=[1:3:20] Command window
R =
>> A=[12 34 32 56 76 54 78 90]
1 4 7 10 13 16 19
A =
[vetor linha com incremento de 3] 12 34 32 56 76 54 78 90
>> A(3), A(7)
Command window ans =
>> peso=linspace(0,20,6) 32
peso = ans =
0 4 8 12 16 20 78
[vetor linha utilizando linspace (intervalo de 0 a 20 contendo 6 elementos)] [leitura dos elementos 3 e 7 do vetor A]

Command window
Para a criação de um conjunto bidimensional (matriz),
>> A(3)=100; A(7)=100
onde os elementos são dispostos em linhas e colunas, é A =
necessário digitar os elementos da linha separando o 12 34 100 56 76 54 100 90
conjunto que compõe a linha por ponto-e-vírgula: [atribuindo novos valores aos elementos 3 e 7 do vetor A]

7
[MATLAB/SIMULINK©: Aplicações na Engenharia Química]
Command window Como visto anteriormente podemos gerar os dados a
>> A(6)*A(8) serem utilizados diretamente no MATLAB©. Contudo,
ans =
4860 pode-se importar dados de interesse de arquivos nos
[efetuando cálculos com elementos individuais (6 e 8) do vetor A] formatos .txt (arquivo de texto) e .xls ou .xlsx (excel).

Command window Quando os dados forem do tipo numérico (apenas) e


>> B=[1 2 3; 10 30 40; 100 200 300] em formato .txt pode-se utilizar o comando load para a
B = importação dos dados. Isto pode ser realizado de duas
1 2 3 formas (sintaxe):
10 30 40
100 200 300 Command window
>> B(2,2)
>> %sintaxe 1
ans =
>> load nome_do_arquivo.txt
30
>> %sintaxe 2
[leitura do elemento (2,2) da matriz B] >> nome_variavel=load(‘nome_do_arquivo.txt’)
[importando dados numéricos de arquivos .txt]
Command window
>> B(1,1)=0; B(2,2)=0; B(3,3)=0 Note que na utilização da sintaxe 1 os dados serão
B = importados para uma variável que terá o nome do arquivo
0 2 3
10 0 40
.txt e na sintaxe 2 o usuário escolhe o nome da variável na
100 200 0 qual será importado os dados.
[atribuindo novos valores aos elementos da diagonal principal da matriz B]
Quando os dados a serem importados são
Command window heterogêneos (caracteres e números) deve-se utilizar o
>> B(3,1)-B(2,3) comando importdata. Por exemplo: um arquivo no
ans = format .txt que contenha na primeira linha as variáveis:
60
[efetuando cálculos com elementos individuais (3,1) e (2,3) da matriz B]
Temp1 Temp2 Temp3 Temp4 e na segunda linha
30;40;35;28 ao executar o comando importdata tem-se:
Assim como para as funções matemáticas, o Command window
MATLAB© apresenta um conjunto de funções residentes >> importdata('exemplo.txt')
ans =
para criação rápida de alguns vetores e matrizes. Algumas data: [30 40 35 28]
destas funções são descritas na Tabela 1.4. textdata: {'Temp1 Temp2 Temp3 Temp4'}
rowheaders: {'Temp1 Temp2 Temp3 Temp4'}
Tabela 1. 4 - Funções residentes destinadas a criação rápida de [importando dados heterogêneos de arquivos .txt]
vetores e matrizes.
Outra extensão de arquivo que pode ser importada é
Comando Função Exemplo
>> zeros(3,5)
o tipo .xls ou .xlsx (arquivos do excel). Para isto pode-se
Cria uma matriz ans = utilizar o comando xlsread como demonstrado no
zeros(m,n) (m×n) com todos os 0 0 0 0 0 exemplo abaixo.
elementos nulos 0 0 0 0 0
0 0 0 0 0 Command window
Cria uma matriz magic(3) >> %sintaxe 1
ans = >> xlsread(‘nome_do_arquivo.xls’)
quadrada de dimensão
magic(n) 8 1 6 >> %sintaxe 2
n (elementos 3 5 7 >> nome_variavel=xlsread(‘nome_do_arquivo.xls’)
randômicos) 4 9 2 [importando dados numéricos de arquivos .xls ou .xlsx]
Cria uma matriz com >> rand(2,3)
ans =
rand(m,n)
elementos randômicos
0.81 0.12 0.63 1.5 Operações Matemáticas com
de dimensão (m×n) 0.90 0.91 0.09
com valores vetores ou matrizes
distribuidos entre 0 e 1
Cria uma matriz com >> randn(3) As operações matemáticas realizadas com os vetores
ans =
elementos randômicos e/ou matrizes criadas no MATLAB© podem ser
-0.43 2.76 0.72
de dimensão n com 0.34 -1.34 -0.06 representadas em três grupos: operações com escalares,
Randn(n)
média 0 e variância 1 3.57 3.03 0.71 matriz (1×1); operações algébricas lineares com vetores ou
com valores
matrizes e operações elemento por elemento.
distribuídos entre 0 e 1
Cria uma matriz >> ones(2,4)
ones(m,n) (m×n) com todos os
ans = 1.5.1 Soma e subtração de vetores e matrizes
1 1 1 1
elementos igual a 1 1 1 1 1
>> eye(4) As operações de soma e subtração de vetores e
ans = matrizes seguem as regras de álgebra linear e podem ser
Cria uma matriz 1 0 0 0 realizadas apenas com vetores e/ou matrizes de mesma
eye(n)
identidade 0 1 0 0
0 0 1 0 dimensão. Ao realizar uma soma ou subtração de um escalar
0 0 0 1 a um vetor e/ou matriz, este valor escalar será adicionado ou

8
Introdução ao MATLAB©
subtraído de todos os elementos do arranjo. Exemplos de matriz (n×n), [x] é o vetor coluna (n×1) com as incógnitas
operações de adição e subtração de vetores e/ou matrizes: (x1, x2, ... , xn por exemplo) e [b] é um vetor coluna (n×1) de
Command window constantes.
>> vetor_A=[2 4 6] Tendo como exemplo o sistema de equações lineares
vetor_A =
abaixo:
4 − 2 − 3 + 6 = 12
2 4 6

−6 + 7 + 6.5 − 6 = −6.5
>> vetor_B=[2 5 3]
vetor_B =

+ 7.5 + 6.25 + 5.5 = 16


2 5 3

−12 + 22 + 15.5 − = 17
>> vetor_c=vetor_A+vetor_B
vetor_c =
4 9 9
[adição de vetores]
e utilizando o operador divisão à esquerda para resolver o
Command window sistema obtemos:
>> vetor_d=vetor_A-vetor_B
vetor_d = Command window
0 -1 3 >> a=[4 -2 -3 6; -6 7 6.5 -6; 1 7.5 6.25 5.5;
[subtração de vetores (utilizando os vetores anteriores)] -12 22 15.5 -1]
a =
4.0000 -2.0000 -3.0000 6.0000
Command window -6.0000 7.0000 6.5000 -6.0000
>> vetor_e=vetor_A+10 1.0000 7.5000 6.2500 5.5000
vetor_e = -12.0000 22.0000 15.5000 -1.0000
12 14 16 >> b=[12;-6.5;16;17]
>> vetor_f=vetor_B-10 b =
vetor_f = 12.0000
-8 -5 -7 -6.5000
[operações com escalares] 16.0000
17.0000
>> x=a\b
1.5.2 Multiplicação de matrizes e vetores x =
2.0000
4.0000
Para realizar a operação de multiplicação entre -3.0000
matrizes deve-se levar em conta as regras de álgebra linear. 0.5000
Assim, para que se possa fazer uma multiplicação entre as [resolução de sistema de equações lineares na forma (n×n) utilizando divisão à
matrizes MAT1 e MAT2 (por exemplo) de acordo com as esquerda]

regras de álgebra linear o número de colunas de MAT1 deve 1.5.4 Operação por elemento
ser igual a número de linhas de MAT2. Se isto for verdadeiro
a multiplicação pode ser realizada através do comando de As operações de subtração e adição em matrizes e
multiplicação (*). Exemplo de operação de multiplicação de vetores, por definição, já são realizadas elemento por
matrizes: elemento. Se quisermos realizar uma multiplicação, uma
Command window divisão ou uma exponenciação elemento por elemento em
>> MAT1=[1 -4 -8;5 7 0; -1 -6 3] uma matriz ou um vetor deve-se utilizar os comandos
MAT1 = apresentados na Tabela 1.5:
1 -4 -8
5 7 0 Tabela 1. 5 - Funções dedicadas à operação elemento por elemento
-1 -6 3 Operador Função Operador Função
>> MAT2=[1; -9; 4]
MAT2 = .* Multiplicação ./ Divisão à direita
1 .^ Exponenciação .\ Divisão à esquerda
-9 Note que antes de cada operador é adicionado um ponto (.) para realizar operações
4 elemento a elemento de matrizes e vetores.
>> MAT3=MAT1*MAT2
MAT3 = A seguir são apresentados alguns exemplos de
5 operação por elemento em matrizes e vetores.
-58
65 Command window
[efetuando multiplicação de matrizes] >> MAT_A=[3 4 5; 4 8 7]
MAT_A =
3 4 5
1.5.3 Divisão de matrizes e vetores 4 8 7
>> MAT_B=[4 2 2; 1 6 8]
A divisão de matrizes no MATLAB© está diretamente MAT_B =
4 2 2
associada à solução de um sistema de equações lineares. Os 1 6 8
operadores relacionados para a operação de divisão de >> MAT_A.*MAT_B
ans =
matrizes são a divisão à esquerda (\) e a divisão à direita (/). 12 8 10
4 48 56
A divisão à esquerda pode ser utilizada na resolução [multiplicação por elemento]
de um sistema linear de n equações escritas da forma
matricial [a][x]=[b], onde: [a] é a matriz dos coeficientes da

9
[MATLAB/SIMULINK©: Aplicações na Engenharia Química]
Command window matriz. Um arquivo de função pode ser utilizado como
>> MAT_A./MAT_B funções matemáticas e subprogramas. Os arquivos de
ans =
0.7500 2.0000 2.5000 funções são criados e editados através da geração de um
4.0000 1.3333 0.8750 script, Figura 1.2.
[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]
Figura 1. 2 – Criando um script para a geração de um programa
O MATLAB©dispõe de algumas funções para MATLAB©: (a) Abrindo um Script; (b) Janela de programação (editor
window).
realizar operações de matrizes e vetores. Algumas destas
funções são descritas na Tabela 1.6. Para criação de um arquivo de função a primeira linha
Tabela 1. 6 - Funções residentes para operações envolvendo
executável do arquivo deve conter:
matrizes e vetores function[argumento_saída]=nome_da_função(argumento_en
Comando Função Exemplo trada)
Indica o >> size(mat_a)
tamanho do ans = Exemplo 1.1: Uma função simples para calcular o valor dos
2 2
=
vetor ou matriz

size(mat_a) pagamentos mensais e o total de um financiamento de um
(Exemplo:
equipamento onde pode ser
)
tamanho da
!"#" $∙"&'(
$ %
matriz mat_a*)
>> mat_a'
Retorna a
mat_a’ transposta de
ans = escrita como:
2 5
uma matriz
3 9 Editor window
>> norm(mat_a) function[pm,pt]=finan(valor,taxa,ano)
Determina a
norm(mat_a) ans = % finan calcula o pagamento mensal e o total do
norma da matriz
10.90 % financiamento
Realiza o cálculo >> det(mat_a) % Argumentos de entrada:
det(mat_a) do determinante ans = % valor :valor do financiamento (R$)
de uma matriz 3 % taxa :taxa anual de juros (%)
% ano :duração do financiamento (ano)
Realiza a soma >> trace(mat_a)
% Argumento de saída:
dos elementos da ans = % pm :valor do pagamento mensal (R$)
trace(mat_a) diagonal 11 % pt :valor do pagamento total (R$)
principal de uma format bank
matriz taxa_am=0.01*taxa/12;
>> eig(mat_a) pm=valor*taxa_am/(1-1/((1+taxa_am)^(12*ano)));
Retorna os pt=pm*12*ano;
ans =
eig(mat_a) autovalores de Função 1. 1 – finan.m
0.28
uma matriz
10.72
>> inv(mat_a) Para executar a função deve-se digitar entre colchetes
Retorna o valor os argumentos de saída, o nome da função e os argumentos
ans =
inv(mat_a) da matriz inversa
de uma matriz
3.00 -1.00 de entrada. Por exemplo, para um financiamento de um
-1.67 0.66 equipamento no valor de R$ 650.000,00 com uma taxa anual
Retorna o >> length(mat_a) de juros de 7,5% com 5 anos para o pagamento deseja-se
length(mat_a) número de linha ans =
de uma matriz 2 saber o valor dos pagamentos mensais e valor total pago ao
Realiza a soma de >> sum(vet_a) final do financiamento. Os argumentos de saída são: valor
sum(vet_a)
todos os ans = mensal e total pago. Os argumentos de entrada são: valor do
elementos de um 19 financiamento, taxa anual de juros e tempo de pagamento.
vetor Para a execução da função criada deve-se digitar na janela de
*matriz de referência: mat_a=[2 3;5 9]; &vetor de referência: vet_a=[3 4 5 7]
comando a seguinte linha de comando:
1.6 Gerando Arquivo de funções Command window
>> [mensal total]=finan(650000,7.5,5)
mensal =
No MATLAB© um arquivo de função é um programa 13024.67
usado como uma função. Este programa possui argumento total =
de entrada e saída contendo uma ou mais variáveis que 781480.00
podem ser representadas por um escalar, um vetor ou uma [execução da função finan.m]

10
Introdução ao MATLAB©
© Tabela 1. 8 – Especificadores de cor de linha
1.7 Criando Gráficos no MATLAB Cor Especificador Cor Especificador
Vermelha r Azul b
Diversos tipos de gráficos podem ser gerados Verde g Ciano c
utilizando o MATLAB© que podem variar de gráficos Magenta m Preto k
padrões com eixos lineares, gráficos com eixo logarítmico, Amarelo y Branco w
gráficos de barras e escalas, gráficos polares, gráficos 3D Tabela 1. 9 – Especificadores de marcadores de linha
entre outros. Marcador Especificador Marcador Especificador
Sinal de mais + Asterisco *
Para gerar gráficos bidimensionais (2D) utiliza-se o Círculo O Ponto .
comando plot e pode ser gerado pelo comando: Quadrado s Triângulo > ou <
Plot(x,y)
Diamante d Losangos d

onde os argumentos x e y são vetores contendo o mesmo Além de mudar os estilos de linhas, as cores das linhas
número de elementos. Quando executado o comando plot e o tipo do marcador podemos também adicionar título do
a janela com a figura gerada abre automaticamente. Por gráfico e título dos eixos. De uma forma geral os comandos
exemplo, se tivermos um vetor x=[1 2 3 4 5 6 7 8 9 10] e um são:
vetor y=[1 2 3 5 7 11 13 17 23 37], podemos gerar um gráfico xlabel(‘texto no formato string’)
y versus x da seguinte forma: ylabel(‘texto no formato string’)
Command window title(‘texto no formato string’)
>> x=[1 2 3 4 5 6 7 8 9 10];
>> y=[1 2 3 5 7 11 13 17 23 37]; Um exemplo de como utilizar os comandos citados
>> plot(x,y) nesta seção é representado pelas linhas de comando abaixo
[gerando gráfico bidimensional] tendo como resposta a Figura 1.4.
A Figura 1.3 representa o gráfico gerado pelo Command window
comando plot contendo os conjuntos de dados x e y. >> dia=[1:1:10];
>> celulas=[20 23 25 24 27 30 28 33 36 40];
40 >> plot(dia,celulas,'--r*')
>> xlabel('DIAS')
35 >> ylabel('N° DE BACTÉRIAS [milhões]')
>> title('Dinâmica de crescimento de bactérias')
30
[criando gráficos com argumentos de estilo de linha, cor de linha, tipo de
marcador e títulos]
25

20 Dinâmica de crescimento de bactérias


40

15 38

36
10
N° DE BACTÉRIAS [milhões]

34
5
32

0 30
1 2 3 4 5 6 7 8 9 10
28
Figura 1. 3 – Gráfico gerado a partir de dois vetores
26

O comando plot possui argumentos opcionais para 24

traçar curvas com cores e estilo da linha diferente, bem como 22

a cor e o tipo dos marcadores. O comando para adicionar 20


1 2 3 4 5 6 7 8 9 10
estes argumentos é: DIAS

Plot(x,y,’especificadores de linha’) Figura 1. 4 – Gráfico com comando de modificação de estilo de linha,


cor da linha, tipo de marcador e títulos.
Na Tabela 1.7 são apresentados alguns Pode-se também criar uma matriz de gráficos na
especificadores de linha. mesma janela utilizando-se o comando subplot seguido do
Tabela 1. 7 – Especificadores do tipo da linha comando plot.
Estilo de Estilo de subplot(m,n,p)
Especificador Especificador
linha linha
Sólido - Pontuado : Plot(x,y)
(padrão) No comando subplot(m,n,p), m representa o
Traço -- Traço-ponto -.
número de linhas da matriz, n representa o número de
Nas Tabelas 1.8 e 1.9 são apresentados colunas da matriz e p a posição do gráfico na matriz.
especificadores de cor de linha e especificadores de
marcador respectivamente.

11
[MATLAB/SIMULINK©: Aplicações na Engenharia Química]
Exemplo 1.2: A matemática pode ser muito romântica.
Podemos verificar isto criando uma matriz de gráficos com
Comando surf: f(x,y)=y2-x2
as seguintes funções:

1) * = ;
2

+ * = 1;
3) * = 2| |;
2) 0

4) * = −2|,-./ 0|; -2
5) * = 11 − /| | − 10
6) * = arccos/1 − | |0 − 7
-4
1
2
Editor window 0 0
% Função y=1/x; -1 -2
x1=1:0.01:60;
y1=1./x1;
% Função x^2+y^2=1
x2=-1:0.01:1; Comando mesh: f(x,y)=y2-x2
y2=sqrt(1-x2.^2);
y21=-sqrt(1-x2.^2);
% Função 2*|x|
x3=-1:0.01:1; 2
y3=2*abs(x3);
% Função y=-2|sin(x)| 0
x4=0:0.01:6.25;
y4=-2.*abs(sin(x4));
% Função y=sqrt(1-(|x|-1)^2) -2
x5=-2:0.01:2;
y5=sqrt(1-(abs(x5)-1).^2); -4
% Função y=arccos(1-|x|)-pi 1
x6=-2:0.01:2; 2
y6=acos(1-abs(x6))-pi; 0 0
%criando a matriz de gráficos (5x1)
subplot(1,5,1)
-1 -2
plot(x1,y1,'LineWidth',4)
subplot(1,5,2) Figura 1. 5 – representação gráfica do exemplo 1.3
plot(x2,y2,x2,y21,'LineWidth',4)
subplot(1,5,3) Exemplo 1.4: Novamente vamos mostrar que a matemática
plot(x3,y3,'LineWidth',4) é romântica, porém agora faremos um gráfico 3D da
subplot(1,5,4) seguinte função:

9/ , *, 80 = − 8 − <= * 8 + + * + 8 − 1%
; ;
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)
Editor window
O resultado da execução deste script não é % criando a malha das variáveis independetes
apresentando para não estragar a surpresa. % note que neste caso x,y e z são independentes
x=-3:0.05:3;
Podemos também construir gráficos em 3D. Para isto y=-3:0.05:3;
z=-3:0.05:3;
devemos utilizar dois comandos: um comando para criar a [X,Y,Z] = meshgrid(x,y,z);
malha de valores das variáveis independentes (meshgrid) e % função (heart)
um comando para criar o gráfico 3D (mesh ou surf). F=(-(X.^2).*(Z.^3)-(9/80).*(Y.^2).*(Z.^3))+ ...
((X.^2)+(9/4).*(Y.^2)+(Z.^2)-1).^3;

cuja função é dada por: 8 = * − .


Exemplo 1.3: Criar o gráfico de um paraboloide hiperbólico % gerando gráfico
patch(isosurface(X,Y,Z,F,0),...
'FaceColor','w','EdgeColor','r')
daspect([1 1 1])
Editor window view(3)
% Criando a malha das variáveis independentes axis tight equal
x=-2:0.1:2; set(gcf, 'Color','w')
y=-1:0.1:1;
Script 1. 3 – Criando gráfico 3D (exemplo 1.4)
[X,Y]=meshgrid(x,y);
% Função da f(x,y)=y^2-x^2 Mais uma vez o resultado não será apresentado para
Z= Y.^2-X.^2;
% Criando matriz de gráficos não estragar a surpresa.
subplot(2,1,1)
surf(X,Y,Z)
title('Comando surf: f(x,y)=y^2-x^2')
1.8 Programando no MATLAB
subplot(2,1,2)
mesh(X,Y,Z) Quando realizamos a programação de uma rotina
title('Comando mesh: f(x,y)=y^2-x^2')
computacional estamos dispondo uma sequência de
Script 1. 2 – Criando gráfico 3D (exemplo 1.3)
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

12
Introdução ao MATLAB©
mais de uma vez (realizando um loop) além de algumas 1.8.2 Declarações condicionais
tomadas de decisões. Este controle de fluxo pode ser
realizado através de declarações condicionais e as repetições As declarações condicionais permitem selecionar ou
por meio de laços de repetições (for e while). Isto é executar seções específicas de códigos em uma rotina
possível utilizando os operadores lógicos e relacionais. computacional mudando o fluxo da programação por meio
1.8.1 Operadores relacionais e operadores lógicos de expressões de controle tais como: if-end, if-else-
end e if-elseif-else-end, Figuras 1.5 a 1.7.
Os operadores lógicos e relacionais não são utilizados
% Declaração condicional
sozinhos, mas sim, em conjunto com outros comandos, o ...
que permite a tomada de decisões que controlem o fluxo da if
rotina computacional. Um operador relacional realiza uma comandos
end
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
>> 5<9 Figura 1. 6 – Estrutura de declaração condicional if-end
< Menor que ans =
1 % Declaração
>> 5>9 condicional
ans = ...
> Maior que
0 if
>> 5>=5 comandos (1)
ans = else
<= Menor ou igual a
1 comandos (2)
>> 7<=3 end
ans = ...
>= Maior ou igual a
0
>> 3==3
== Igual a ans =
1
>> 8~=3
ans =
Figura 1. 7 – Estrutura de declaração condicional if-else-end
~= Diferente de
1 %Declaração
condicional
Tabela 1. 11 - Operadores lógicos e exemplos de utilização ...
Operado if
Nome Função Exemplo comandos (1)
r lógico
>> % os elseif
Retorna o valor falso (0)
números 3 e comandos (2)
ou verdadeiro (1) else
atuando em dois 7 são ambos
diferentes comandos (3)
operando. Se os dois end
de zero
operandos forem (verdadeir ...
& AND verdadeiros, o resultado os), logo a
será (1); senão, o resposta
resultado será (0). será 1
>> 3&7
ans =
Figura 1. 8 – Estrutura de declaração condicional if-elseif-else-
1
>> % pelo end
Retorna o valor falso (0)

uma equação quadrática do tipo: > + ? + @ = 0, onde


ou verdadeiro (1) menos um
dos valores Exemplo 1.5: Crie uma rotina para determinar as raízes de
atuando em dois
(5 e 0) é
operando. Se qualquer
diferente os coeficientes a, b e c serão as entradas requeridas no
um dos operando ou de zero,
| OR
ambos forem logo a programa. Para testar a rotina desenvolvida serão utilize as
verdadeiros, o resultado receberá 1 seguintes equações de segundo grau:
+ 5 + 6 = 0 onde = −2 e = −3
será (1); senão (os dois >> 5|0
forem falsos), o resultado ans = 1)
+ 4 + 4 = 0 onde = = −2
será (0) 1
Retorna o valor oposto >> ~3 2)
+ 2 + 5 = 0 onde = −1 + 2B e = −1 − 2B.
de um operando. ans =
0
~ NOT
Verdadeiro (1) se o
ou
3)
operando for falso, e
>> ~0
falso (0) se operando for ans =
verdadeiro. 1

13
[MATLAB/SIMULINK©: Aplicações na Engenharia Química]
Editor window Editor window
% Resolução de equações de Segundo Grau: ax^2+bx+c=0 -----------------------------------------------
% Definição das variáveis: PROGRAMA PARA SOLUÇÃO DE RAIZES DE EQUAÇÕES SEGUNDO
% a : coeficiente do termo x^2; GRAU
% b : coeficiente do termo x; -----------------------------------------------
% c : constante da equação; Entre com o valor de a: 1
% delta : discriminante da equação; Entre com o valor de b: 4
% p_imag : parte imaginária da equação (caso ... Entre com o valor de c: 4
% seja raizes complexas); A equação possui raizes iguais:
% p_real : parte real da equação (caso seja ... x1=x2= -2.000000
% raízes complexas); [resultado da resolução da equação 2]
% x1 : primeira raiz da equação;
% x2 : segunda raiz da equação; Editor window
% inicio do programa ------------------------------------------
disp('--------------------------------------------'); PROGRAMA PARA SOLUÇÃO DE RAIZES DE EQUAÇÕES SEGUNDO
disp('PROGRAMA PARA SOLUÇÃO DE RAIZES DE ... GRAU
EQUAÇÕES SEGUNDO GRAU'); ------------------------------------------
disp('--------------------------------------------'); Entre com o valor de a: 1
%leitura dos coeficiente a, b e c Entre com o valor de b: 2
a=input('Entre com o valor de a: '); Entre com o valor de c: 5
b=input('Entre com o valor de b: '); A equação possui raizes complexas:
c=input('Entre com o valor de c: '); x1= -1.000000 +i 2.000000
% cálculo do discriminante x2= -1.000000 -i 2.000000
delta=b^2-4*a*c; [resultado da resolução da equação 3]
% determinação da raiz (depende do valor do ...
% discriminante) 1.8.2 Laços de repetição ou loops
%Ambas as raizes são reais
if delta > 0
x1=(-b+sqrt(delta))/(2*a); Quando se realiza a implementação de uma rotina
x2=(-b-sqrt(delta))/(2*a); computacional determinamos uma sequência lógica de
disp('A equação possui duas raizes reais: ');
fprintf ('x1= %f\n', x1); execução dos comandos, porém, podemos através de um
fprintf ('x2= %f\n', x2); laço de repetição, alterar a sequência ou fluxo do programa
% Ambas as raizes são iguais
elseif delta==0
repitindo a execução dos comandos várias vezes
x1=(-b)/(2*a); consecutivamente. Um exemplo de laço de repetição é o
disp('A equação possui raizes iguais: '); for-end.
fprintf('x1=x2= %f\n', x1);
% A equação possui raizes complexas
else %Laço de repetição
p_real=(-b)/(2*a); ...
p_imag=sqrt(abs(delta))/(2*a); for k=f:s:t %loop
disp('A equação possui raizes complexas: '); comando
fprintf('x1= %f +i %f\n', p_real, p_imag); end
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 Figura 1. 9 – Estrutura de um laço de repetição for-end
foi utilizada por se tratar da mais complexa (em termos de
Exemplo 1.6: Crie uma rotina utilizando o laço de repetição
sintax) dentre as declarações citadas. Uma vez entendido a
for-end para realizar as análises estatísticas (média e desvio
forma de estruturação da declaração if-elseif-else-
padrão) do conjunto de dados apresentados na Tabela 1.12.
end as outras declarações também são entendidas. Ao
executar o script desenvolvido as respostas serão: Tabela 1. 12 – Dados para o exemplo 1.6
Massa de cloreto de sódio
Editor window
x (g) 3,0 3,5 2,9 3,1 3,0 3,2 2,8
-----------------------------------------------
PROGRAMA PARA SOLUÇÃO DE RAIZES DE EQUAÇÕES SEGUNDO Editor window
GRAU
% Cálculo da média e do desvio padrão de um
-----------------------------------------------
% conjunto de dados;
Entre com o valor de a: 1
% Definição das variáveis:
Entre com o valor de b: 5
% i : loop index;
Entre com o valor de c: 6
% n : números de dados de entrada;
A equação possui duas raizes reais:
% des_pad : desvio padrão;
x1= -2.000000
% soma_x : somatório dos dados de entrada;
x2= -3.000000
% soma_x2 : somatótio do quadrado dos dados de
[resultado da resolução da equação 1] entrada;
% x : valor do dado de entrada;
% media_x : media dos dados de entrada;
disp('--------------------------------------------');

14
Introdução ao MATLAB©
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]

15
[MATLAB/SIMULINK©: Aplicações na Engenharia Química]

16
CAPÍTULO 2

CAPÍTULO 2
SIMULINK©

Na tela principal do SIMULINK© clique no botão


2.1 Introdução New Model (destacado na Figura 2.2) para abrir a janela
para criar o modelo, Figura 2.3.
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 Figura 2. 3 – Janela do Simulink® destinada à criação do modelo de
barra principal clique no botão: Simulink Library, Figura blocos
2.1.
2.2 Criando um modelo no
SIMULINK©
No simulink® tem-se a opção de resolver sistemas
Figura 2. 1– Botão para acessar o Simulink® lineares e não-lineares, modelados continuamente,
discretamente ou uma mescla dos dois tempos de
Ao clicar no botão da barra principal do MATLAB© amostragem. Após definir o modelo de estudo, pode-se
abrirá a tela principal do SIMULINK©, Figura 2.2. 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
Figura 2. 2 – Tela principal do SIMULINK©

17
[MATLAB/SIMULINK©: Aplicações na Engenharia Química]
à criação do modelo iremos arrastar os seguintes blocos das Copie todos os blocos acima descritos para a janela de
bibliotecas (do Simulink library browser), Figuras 2.4 a 2.7. criação do modelo. A janela contendo os blocos deverá ficar
conforme Figura 2.8:

Sine Wave
Scope
1
s
Integrator

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 é
Figura 2. 4 – Localização do bloco Sine Wave (SimulinkSources representado pelo sinal “>” presente no bloco. Caso o
Sine Wave) 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ão
esquerdo 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.

Sine Wave
Scope
Figura 2. 5 – Localização do bloco Scope (SimulinkSinks Scope)
1
s
Integrator

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.

Sine Wave
Scope
1
Figura 2. 6 – Localização do bloco Integrator s
(SimulinkContinuous Integrator)
Integrator

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.
Figura 2. 7 – Localização do bloco Mux (Simulink Signals Routing 
Mux)

18
SIMULINK©

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
Figura 2. 14 – Localização do bloco Derivate
de “10 unidades de tempo”. Para mudar a unidade de tempo
de simulação deve-se adicionar o valor da unidade no espaço Para exportar os dados para o Workspace deverá ser
destinado ao tempo de simulação conforme Figura 2.12. utilizado o bloco To Workspace da Sinks Library, Figura 2.15:

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. 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. 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 Figura 2. 16 – Modelo de blocos final do SIMULINK©
Continuous Library, Figura 2.14.

19
[MATLAB/SIMULINK©: Aplicações na Engenharia Química]
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. 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. 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. 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. 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 Figura 2. 21 – Alterando as propriedades de um gráfico: (a) Acessando as
exportados para o Workspace do MATLAB©. A Figura 2.19 propriedades do gráfico; (b) Adicionando Título e nome de eixos
representa os dados exportados.
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

20
SIMULINK©
geramos o gráfico pelo bloco Scope do simulink não se pode
realizar esta configuração, Figura 2.22.

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. 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 Figura 2. 25 – Gráfico gerado após configuração do número de eixos
a diferença, Figura 2.23. 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. 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 Figura 2. 26 – Configuração do bloco Sine Wave: (a) Configuração dos
simulação for realizada o gráfico resultante será formado por parâmetros; (b) Resposta da simulação após a configuração dos
três curvas. As curvas representam os sinais de entrada do parâmetros amplitude e frequency.
bloco, Figura 2.25. 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

21
[MATLAB/SIMULINK©: Aplicações na Engenharia Química]
configure os parâmetros: Initial Condition passando de 0 para veja Capítulo 3). A solução da EDO é apresentada na Figura
-1. Selecione o Checkbox “Limit Output" para habilitar a 2.29.
configuração do limite inferior e superior da integral. Após 5
habilitada a configuração deverá ser: “Upper saturation limit”
4.5
igual a 3 e “Lower saturation limit” igual a -1. Note que, depois
de realizada a configuração de limite da integral o bloco 4

variávei dependente (y)


Integrator será representado de forma diferente, Figura 2.27.
3.5
Caso não seja mudado o limite de integração, o bloco
permanece com a aparência original. 3

2.5

1.5

1
0 0.5 1 1.5 2 2.5 3 3.5 4
variável independente (x)

Figura 2. 29 - Solução da EDO do exemplo 1

Exemplo 2.2: Resolver a equação: C = $


CD D$
em um
Figura 2. 27 – Configuração do bloco Integrator: (a) Mudança dos intervalo de t=0:10 utilizando o SIMULINK©. A condição
parâmetros Initial Condition e Limit Output; (b) nova aparência do inicial do problema é y(0)=2.
bloco Integrator com a mudança dos limites de integração
Para a criação da estrutura de blocos acima, será
preciso, Figura 2.30: um bloco de integração (integrator), um
2.4 Resolvendo equações diferenciais bloco de saída de gráfico (scope), um bloco para visualização
utilizando o SIMULINK© do valor final da solução (display), um bloco de tempo (clock)
que será utilizado como variável independente t e um bloco
Agora que temos uma ideia básica de como funciona para gravar os resultados (To Worwspace). A configuração das
e como configurar alguns blocos do SIMULINK©, condições iniciais é feita no menu: simulation  configuration
abordaremos a parte de maior interesse: como resolver
parameters. Para maiores detalhes ver seção 2.5. A solução da
equações diferenciais utilizando o SIMULINK©. A EDO é apresentada na Figura 2.31.
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: C = −2 + 12 −


CD

20 + 8,5 em um intervalo de x=0:4 utilizando o


SIMULINK©. A condição inicial do problema é y(0)=1.

Figura 2. 30 - Modelo SIMULINK© para a resolução do exemplo 2


2
variável dependente (y)

1.5

Figura 2. 28 – Modelo SIMULINK© para resolução do exemplo 1


Para a criação da estrutura de blocos representado 1
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 0.5
0 2 4 6 8 10
variávei independente (t)
tempo (clock) que será utilizado com a variável independente
x e um bloco para gravar os dados (To Workspace). A Figura 2. 31 – Solução da EDO do exemplo 2
configuração das condições iniciais é feita no menu:
simulation  configuration parameters (para maiores detalhes

22
CAPÍTULO 3

CAPÍTULO 3
SIMULINK©: Bibliotecas e Blocos

3.1 Principais configurações do Tabela 3. 3 – Métodos de resolução presentes no SIMULINK©


Método Descrição
SIMULINK© Ode45 Resolução por Runge-Kutta (4,5) non-stiff de
ordem média
O SIMULINK possui algumas configurações que nos Ode23 Resolução por Runge-Kutta (2,3) non-stiff de
Passo Variável

permitem alterar: o tempo e o passo de simulação, as opções ordem baixa


Ode113 Resolução por Adams-Bahforth Moulton
de resolução e os métodos numéricos utilizados na PECE non-stiff de ordem variável
simulação. Nas Tabelas 3.1 a 3.3 são apresentadas essas Ode15s Resolução por NDF (Numerical
configurações. Differentiation Formulas)
Ode23s Resolução por Rosenblock de ordem 2
Tabela 3. 1 – Simulation Time (tempo de simulação)
Ode23t Resolução de ordem baixa (regra
Opção descrição trapezoidal/interpolação livre)
Start time início da simulação Ode23tb Resolução de TR-BDF2 de ordem baixa
Stop time término da simulação Discrete Resolução discreta
Ode5 Resolução por versão discreta de Runge-Kutta
Passo Fixo

Tabela 3. 2 – Solver Options (opção de resolução) (4,5)


Opção descrição Ode3 Resolução por versão discreta de Runge-Kutta
Variable-step / fixed-step1 utilizar passo variado ou (2,3)
fixo Ode2 Resolução por método de Heun (Euler
Ode45 (Dormard Prince) método de resolução melhorado)
(Tabela 3.3) Ode1 Resolução por Euler
Max step size passo máximo
Min step size passo mínimo 3.2 Biblioteca de Blocos
Initial step size passo inicial
Relative tolerance tolerância relativa para As principais bibliotecas são apresentadas nas Tabelas 3.4
monitoramento e controle a 3.24 divididas e sub-biblitecas.
de erro a cada passo
utilizado pelas rotinas solver 3.2.1 CONTINUOUS: Blocos de sistemas
Absolute tolerance tolerância absoluta para dinâmicos contínuos
monitoramento e controle
Tabela 3. 4 – Biblioteca: Continuous –Time Linear System
de erro a cada passo
utilizado pelas rotinas solver Bloco SIMULINK Nome Descrição
Gera a integral do
Integrator
sinal de entrada

possível modificar o intervalo de tempo entre as iterações (step) durante a


1 No caso de resoluções com passo variável é: possível modificar o intervalo de simulação; o passo é constante e o valor “auto” é dado pela seguinte fórmula: [Max
tempo entre as iterações (step) durante a simulação; é possível detectar estados de step size] = ([Stop time] – [Start time])/50; não é possível detectar estados de
“error control” e “zero rossing”. No caso de resoluções com passo fixo: não é “error control” e “zero crossing”.

23
[MATLAB/SIMULINK©: Aplicações na Engenharia Química]
Continuação Tabela 3.4 Continuação Tabela 3.7
Gera a derivada do Discrete Implementa filtro
Derivative Filter
sinal de entrada discreto
Discrete Implementa função
State-Space
Implementa sistema Transfer de transferência
linear state-space Fcn discreta
Transfer Implementa função Implementa função
Fcn de transferência Discrete de transferência
Zero-Pole discreta em termos
Implementa função de zeros e pólos
de transferência em Discrete
Zero-Pole Implementa sistema
termos de zeros e State-
polos Space linear state-space

Tabela 3. 5 - Biblioteca: Continuous –Time Delays Tabela 3. 8 - Biblioteca: Discrete – Sample & Hold Delay
Bloco SIMULINK Nome Descrição Bloco SIMULINK Nome Descrição
Gera um atraso fixo
Transport Retorna o sinal do
no transporte do Memory
Delay instante anterior
sinal
Variable Gera um atraso First-Order Amostra o valor
Transport variável no Hold anterior do sinal
Delay transporte do sinal
Segura os sinais por
3.2.2 DISCONTINUITIES: Blocos que Zero-Order
um determinado
implementam sistemas descontínuos Hold
período de tempo
Tabela 3. 6 - Biblioteca: Discontinuities 3.2.4 LOOK-UP TABLES: Blocos de pesquisa em
Bloco SIMULINK Nome Descrição
tabela (matriz)
Saturation
Limita o intervalo de
saída do sinal Tabela 3. 9 - Biblioteca: Look-up Tables
Bloco SIMULINK Nome Descrição
Define uma região de Dada uma função f e
Dead Zone
valor zero (0) dois vetores x e y,
Lookup
Table calcula uma
Limita a taxa de aproximação para
Rate
Limiter modificação do sinal uma função
de entrada Semelhante a
Chaveia a saída para Lookup Lookup Table, para
Relay Table (2-D) uma função f de duas
duas constantes
dimensões
Discretiza a entrada Semelhante a
Quantizer para um intervalo Lookup Lookup Table, para
específico Table (n-D) uma função f de n
dimensões
Hit Detecta ponto de Dado um vetor,
Crossing cruzamento PreLookup
Index
retorna o índice da
Search posição relativa do
3.2.3 DISCRETE: Blocos de sistemas dinâmicos dado de entrada
discretos Interpolati Semelhante ao
on (n-D) PreLookup Index
Using Search para n
Tabela 3. 7 - Biblioteca: Discrete –Time Linear Systems
PreLookup dimensões
Bloco SIMULINK Nome Descrição
Busca direta em
Gera um atraso na Direct matriz. Dados i, j e
Unit delay Lookup
transmissão do sinal m, retorna m(i,j).
Table (n-D) Começa a indexação
Discrete- Gera integral com 0.
Time discreta do sinal de
Integrator entrada

24
SIMULINK©: Bibliotecas e Blocos
3.2.5 MATH OPERATION: Blocos de operadores Continuação da Tabela 3.12
matemáticos Combinatorial
Lógica combinatória
Logic
Tabela 3. 10 – Biblioteca: Math Operation – Math Operation
Bloco SIMULINK Nome Descrição Logical Operador lógico
Operator (OR, AND, etc.)
Sum Soma
Relational Operador relacional
Operator (<,>,<=,>=, etc)
Product Produto matricial
Tabela 3. 13 – Biblioteca: Math Operation – Complex Vector
Conversion
Dot Product Produto escalar Bloco SIMULINK Nome Descrição
Complex to Converte número
Magnitude- complexo em
Abs Valor absoluto Angle ângulo
Magnitude- Converte ângulo
Angle em número
Sign Sinal To Complex complexo
Decompõe
Complex to número complexo
MinMax Mínimo/máximo Real-Imag em parte real e
imaginária
Compões parte
Gain Ganho Real-Imag to real e imaginária
complex em número
complexo
Ganho (com
Slider Gain
interface de barra) 3.3.6 MODEL VERIFICATION: Blocos para
verificação de modelos
Math Function
Função
matemática Tabela 3. 14 – Biblioteca: Model Verification
Bloco SIMULINK Nome Descrição
Rounding Função de
Verifica se um sinal
Function arredondamento Check
Static
é sempre menor
Lower Bound que um valor
Trigonometric Função estático
Function trigonométrica Verifica se um sinal
Check
é sempre maior
Algebraic Static
Restrição algébrica Upper Bound que um valor
Constraint
estático
Verifica se um sinal
Polynomial Função polinomial Check
está sempre dentro
Static
Ranger de uma faixa de
Tabela 3. 11 – Biblioteca: Math Operation –Vector Operations amplitude estática
Bloco SIMULINK Nome Descrição Check Verifica a diferença
Static entre a amplitude
Gap de dois sinais
Assigment Atribuição
Check Verifica se um sinal
Dynamic é sempre menor
Matrix Concatenação de Lower Bound que outro sinal
Concatenation matrizes Check Verifica se um sinal
Dynamic é sempre maior
Reformatação de Upper Bound que outro sinal
Reshape
matriz Verifica se um sinal
Check
está sempre dentro
Dynamic
Tabela 3. 12 – Biblioteca: Math Operation – Logic Operations de uma faixa de
Ranger
Bloco SIMULINK Nome Descrição amplitude
Bitwise Operador lógico
Operator binário

25
[MATLAB/SIMULINK©: Aplicações na Engenharia Química]
Continuação da Tabela 3.14 Continuação da Tabela 3.17
Verifica se um sinal Enable Subsistema com
Assertion
é Zero (0) Subsystem sinal habilitador
Verifica se o
Check gradiente do sinal é Enabled and Subsistema com
Discrete sempre menor que Triggered sinais disparador e
Gradient Subsystem habilitador
um limitante
superior Representa um
Function- subsistema que pode
3.3.7 MODEL-WIDE UTILITES: Blocos Call ser chamado como
utilitários Subsystem função por outro
bloco
Tabela 3. 15 – Biblioteca: Model-Wide Utilites – Linearization of Implementa o
Running Models For
comportamento
Iterator
Bloco SIMULINK Nome Descrição
Subsystem “for” para o
Chama a função subsistema
Trigger- linmod Implementa o
While
Based (modelamento comportamento
Iterator
Linearizatio linear) a paritr de “while” para o
Subsystem
n um evento subsistema
(trigger). Implementa o
Chama a função comportamento “if”
If
linmod para um modelo do
Timed-Based
(modelamento SIMULINK
Linearizatio
n linear) em um Implementa o
determinado comportamento
Switch
instante “case” dentro de um
Case
modelo do
Tabela 3. 16 – Biblioteca: Model-Wide Utilites – Documentation
SIMULINK
Bloco SIMULINK Nome Descrição
Traz textos 3.3.9 SIGNAL ATTRIBUTES: Blocos de atributos
definidos nos de sinais
Model Info campos de
propriedade do Tabela 3. 18 – Biblioteca: Signal Attributes
modelo
Bloco SIMULINK Nome Descrição
Cria um texto para
DOC documentar o Data Type Conversão entre
modelo Conversion dois tipos de dados
Configura o valor
3.3.8 PORT & SUBSYSTEMS: blocos de portas, IC
inicial para um sinal
conexões e subsistemas.
Manipula
Tabela 3. 17 – Biblioteca: Port & Subsystems transferência de
Rate dados em blocos
Bloco SIMULINK Nome Descrição Transition operando com taxas
In1 Entrada de sinal de transmissão
diferentes
Out1 Saída de sinal Retorna atributos do
sinal (tipo,
Trigger Sinal disparador Probe
dimensão, tempo de
Function- amostragem)
Gerador de chamada Verifica se o sinal de
Call Signal
Generator de função entrada possui
Specificat
Atomic ion determinados
Subsystem Subsistema atributos
Retorna ao número
Subsistema que Width de canais do sinal de
Subsystem contém outro
entrada
subsistema
Triggered Subsistema com
Subsystem sinal comparador

26
SIMULINK©: Bibliotecas e Blocos
3.3.10 SIGNAL ROUTING: Roteamento de sinais Continuação da Tabela 3.20

Tabela 3. 19 – Biblioteca: Signal Routing Floating


Scope
Gráfico flutuante
Bloco SIMULINK Nome Descrição
Agrupa vários sinais
em um único bus, e XY Graph
Gráfico paramétrico
Bus X, Y
Creator permite nomear os
sinais Exibe valores
individualmente Display
numéricos
Recebe sinal de um
Bus bus ou multiplexador Tabela 3. 21 – Biblioteca: Simulation Control
Selector e separa-os em seus Bloco SIMULINK Nome Descrição
sinais individuais
Stop Interrompe
Simulation simulação
Mux Multiplexador
3.3.12 SOURCES: Blocos de origem de sinais
Demux Demultiplexador
Tabela 3. 22 – Biblioteca: Sources – Model & Subsystems Inputs
Bloco SIMULINK Nome Descrição
Merge Mistura de sinais In1 Entrada de sinal
Dado um sinal de “Terra”. Impede
entrada com vários avisos sobre portas
Selector Ground de entrada
canais, seleciona
algum para saída desconectadas.
Saídas Zero (0)
Manual
Switch Chaveador manual Importa sinal de um
From File
arquivo *.mat
Multiport Chaveador com Importa sinal de uma
Switch várias portas From
Workspace variável do
workspace
Switch
Chaveador com duas Tabela 3. 23 – Biblioteca: Sources – Signal Generator
portras
Bloco SIMULINK Nome Descrição
Recebe sinal de um Gerador de sinal
From Constant
bloco Goto constante
Gerador de sinal de
Goto Tag Define escopo dos Signal
Generator onda*
Visibility blocos Goto e From
Envia um sinal para Pulse
Goto Gerador de pulso
um bloco From Generator

3.3.11 SINKS: Blocos de saída de resultados Construtor de sinal.


Signal Abre uma janela
Tabela 3. 20 – Biblioteca: Sinks - Model & Subsystems Outputs Builder Signal Builder para
Bloco SIMULINK Nome Descrição construções de sinais
Dados valor inicial e
Out1 Saída de sinal um ângulo de
Ramp inclinação gera o
Terminator Terminador sinal da semi-reta
inclinada
Exporta sinal para
To File Gerador de onda
um arquivo *.mat Sine Wave
senóide
Exporta sinal para
To
Workspace uma variável do Gerador de sinal de
Step
workspace impulso

Scope Gráfico Repeating Gerador de


Sequence seqüência

27
[MATLAB/SIMULINK©: Aplicações na Engenharia Química]
Continuação da Tabela 3.20
Gerador de sinal
Chirp
Signal senóide com
freqüência constante
Gerador de números
Random
Number aleatórios com
distribuição normal
Gerador de números
Uniform
aleatórios com
Random
Number distribuição
uniforme
Band-
Gerador de sinal de
Limited
White Noise ruído

Clock
Gerador de sinal d
tempo contínuo
Digital Gerador de sinal de
Clock 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
Executa uma
expressão genérica
do MATLAB.
Fcn
Utiliza-se a variável
“u” como parâmetro
de entrada
Executa uma função
MATLAB Fcn
MATLAB
implementada em
um m-file*
Executa uma s-
S-Function
function
Utilitário que auxilia
S-Function
Builder a construção de s-
function’s
* Arquivo Matlab (exemplo: nomearquivo.m)

28
CAPÍTULO 4

CAPÍTULO 4
Aplicações do MATLAB©\SIMULINK© na Engenharia
Química

Editor window
4.1 Problemas envolvendo equações function Xs=Newton(Fun,FunDer,X0,erro,imax)
não lineares % 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:
Exemplo 4.1 (Termodinâmica): % Fun : função (string) a ser calculada a raiz

A lei dos gases ideais é dada por: F = .GH, onde p é a


% FunDer : derivada (string) da função
% X0 : chute inicial
% erro : critério de parada (solução aceita
pressão absoluta, V o volume, n é o número de moles, R a % como correta)
% imax : máximo de iterações
constante de proporcionalidade dos gases e T é a % Variáveis de saída:
temperatura absoluta. Apesar desta equação ser muito % Xs : solução
utilizada por engenheiros químicos, ela apresenta boa for i=1:imax
xi=X0-feval(Fun,X0)/feval(FunDer,X0);
precisão somente para intervalos limitados de pressão e if abs((xi-X0)/X0)<erro
temperatura e alguns tipos de gases. Para uma maior acurácia Xs=xi;

+ I $ % /K − ?0 =
devemos utilizar uma equação de estado alternativa, como break
end

GH, onde K = F⁄. é o volume molar e a e b são constantes


por exemplo, a equação de van der Waals: X0=xi;
end
if i==imax
empíricas que dependem do gás estudado. Um projeto de fprintf(‘A solução não foi obtida em %i
iterações\n’,imax)
engenharia química requer uma estimativa do volume molar end
(v) para o CO2 e para o O2 em diferentes temperaturas e Função 4. 1 –Newton.m (exemplo 4.1)
pressões de modo que o recipiente de armazenamento possa
Editor window
ser dimensionado. Também é de interesse a observação do %% Inicialização
comportamento do gás pela lei dos gases ideais. Os dados matlabrc; % limpa todas as 29ariáveis
para o projetos são: R=0,082954 L atm-1 mol-1 K-1, para CO2 % do workspace e reseta o
% matlab
a=3,592 e b=0,04267 e para O2 a=1,360 e b=0,03183. close all; % fecha todas as figuras
clc; % limpa a tela de comando
a. Use uma função que calcule a raiz da função acima tic; % inicializa o “timer”
pelo método de Newton com um erro de 0,01 para as % Entradas para o CO2
pressões 1 e 10 atm e temperaturas de 300 e 500 K. Fun1CO2=inline(‘(1-3.592/v^2)*(v-0.04267)-
0.082054*300’);
b. Use a função residente fzero do MATLAB©. FunDer1CO2=inline(‘1-
3.592/v^2+(2*3.592*0.0426/v^3)’);
Fun2CO2=inline(‘(10-3.592/v^2)*(v-0.04267)-
c. Resolva utilizando o SIMULINK©. 0.082054*300’);
FunDer2CO2=inline(‘10-
Solução: Usando o método de Newton 3.592/v^2+(2*3.592*0.0426/v^3)’);
Fun3CO2=inline(‘(1-3.592/v^2)*(v-0.04267)-
Para a solução do exemplo 4.1 necessitaremos criar 0.082054*500’);
uma função que represente o método de Newton FunDer3CO2=inline(‘1-
(Newton.m) e uma rotina (script 4.1) para a execução do 3.592/v^2+(2*3.592*0.0426/v^3)’);
Fun4CO2=inline(‘(10-3.592/v^2)*(v-0.04267)-
método proposto. 0.082054*500’);
FunDer4CO2=inline(‘10-
3.592/v^2+(2*3.592*0.0426/v^3)’);

29
[MATLAB/SIMULINK©: Aplicações na Engenharia Química]
% Entradas para O2 Editor window
Fun1O2=inline(‘(1-1.360/v^2)*(v-0.03183)- %% Inicialização
0.082054*300’); matlabrc; % limpa todas as variávei
FunDer1O2=inline(‘1- % do workspace e reseta o
1.360/v^2+(2*1.360*0.03183/v^3)’); % matlab
Fun2O2=inline(‘(10-1.360/v^2)*(v-0.03183)- close all; % fecha todas as figuras
0.082054*300’); clc; % limpa a tela de comando
FunDer2O2=inline(‘10- tic; % inicializa o "timer"
1.360/v^2+(2*1.360*0.03183/v^3)’); % Entradas para CO2
Fun3O2=inline(‘(1-1.360/v^2)*(v-0.03183)- Fun1CO2=inline('(1-3.592/v^2)*(v-0.04267)-
0.082054*500’); 0.082054*300');
FunDer3O2=inline(‘1- Fun2CO2=inline('(10-3.592/v^2)*(v-0.04267)-
1.360/v^2+(2*1.360*0.03183/v^3)’); 0.082054*300');
Fun4O2=inline(‘(10-1.360/v^2)*(v-0.03183)- Fun3CO2=inline('(1-3.592/v^2)*(v-0.04267)-
0.082054*500’); 0.082054*500');
FunDer4O2=inline(‘10- Fun4CO2=inline('(10-3.592/v^2)*(v-0.04267)-
1.360/v^2+(2*1.360*0.03183/v^3)’); 0.082054*500');
% Cálculo das equações (Gases Ideais) % Entradas para O2
v1lgi=0.082054*300/1; Fun1O2=inline('(1-1.360/v^2)*(v-0.03183)-
v2lgi=0.082054*300/10; 0.082054*300');
v3lgi=0.082054*500/1; Fun2O2=inline('(10-1.360/v^2)*(v-0.03183)-
v4lgi=0.082054*500/10; 0.082054*300');
% Cáculo das equações (Newton) Fun3O2=inline('(1-1.360/v^2)*(v-0.03183)-
v1CO2vdw=Newton(Fun1CO2,FunDer1CO2,50,0.01,100); 0.082054*500');
v2CO2vdw=Newton(Fun2CO2,FunDer2CO2,50,0.01,100); Fun4O2=inline('(10-1.360/v^2)*(v-0.03183)-
v3CO2vdw=Newton(Fun3CO2,FunDer3CO2,50,0.01,100); 0.082054*500');
v4CO2vdw=Newton(Fun4CO2,FunDer4CO2,50,0.01,100); % Cálculo das equações (Gases Ideais)
v1O2vdw=Newton(Fun1O2,FunDer1O2,50,0.01,100); v1lgi=0.082054*300/1;
v2O2vdw=Newton(Fun2O2,FunDer2O2,50,0.01,100); v2lgi=0.082054*300/10;
v3O2vdw=Newton(Fun3O2,FunDer3O2,50,0.01,100); v3lgi=0.082054*500/1;
v4O2vdw=Newton(Fun4O2,FunDer4O2,50,0.01,100); v4lgi=0.082054*500/10;
disp(‘LEI DOS GASES IDEIAS’) % Cáculo das equações (Newton)
disp(‘T(K) P(atm) VCO2(L/mol) VO2(L/mol)’) v1CO2vdw=fzero(Fun1CO2,50);
disp(‘---------------------------------------------') v2CO2vdw=fzero(Fun2CO2,50);
fprintf(‘ 300 1 %9.4f %9.4f\n’,v1lgi,v1lgi) v3CO2vdw=fzero(Fun3CO2,50);
fprintf(‘ 300 10 %9.4f %9.4f\n’,v2lgi,v2lgi) v4CO2vdw=fzero(Fun4CO2,50);
fprintf(‘ 500 1 %9.4f %9.4f\n’,v3lgi,v3lgi) v1O2vdw=fzero(Fun1O2,50);
fprintf(‘ 500 10 %9.4f %9.4f\n’,v4lgi,v4lgi) v2O2vdw=fzero(Fun2O2,50);
disp(‘---------------------------------------------') v3O2vdw=fzero(Fun3O2,50);
disp(‘VAN DER WAALS’) v4O2vdw=fzero(Fun4O2,50);
disp(‘T(K) P(atm) VCO2(L/mol) VO2(L/mol)’) disp('---------------------------------------------')
disp(‘---------------------------------------------') disp('LEI DOS GASES IDEIAS')
fprintf(‘ 300 1 %9.4f disp('T(K) P(atm) VCO2(L/mol) VO2(L/mol)')
%9.4f\n’,v1CO2vdw,v1O2vdw) disp('---------------------------------------------')
fprintf(‘ 300 10 %9.4f fprintf(' 300 1 %9.4f %9.4f\n',v1lgi,v1lgi)
%9.4f\n’,v2CO2vdw,v2O2vdw) fprintf(' 300 10 %9.4f %9.4f\n',v2lgi,v2lgi)
fprintf(‘ 500 1 %9.4f fprintf(' 500 1 %9.4f %9.4f\n',v3lgi,v3lgi)
%9.4f\n’,v3CO2vdw,v3O2vdw) fprintf(' 500 10 %9.4f %9.4f\n',v4lgi,v4lgi)
fprintf(‘ 500 10 %9.4f disp('---------------------------------------------')
%9.4f\n’,v4CO2vdw,v4O2vdw) disp('VAN DER WAALS')
disp(‘---------------------------------------------') disp('T(K) P(atm) VCO2(L/mol) VO2(L/mol)')
Script 4. 1 – Solução do exemplo 4.1 utilizando o Método de Newton disp('---------------------------------------------')
fprintf(' 300 1 %9.4f
Command window %9.4f\n',v1CO2vdw,v1O2vdw)
---------------------------------------------- fprintf(' 300 10 %9.4f
LEI DOS GASES IDEIAS %9.4f\n',v2CO2vdw,v2O2vdw)
T(K) P(atm) VCO2(L/mol) VO2(L/mol) fprintf(' 500 1 %9.4f
---------------------------------------------- %9.4f\n',v3CO2vdw,v3O2vdw)
300 1 24.6162 24.6162 fprintf(' 500 10 %9.4f
300 10 2.4616 2.4616 %9.4f\n',v4CO2vdw,v4O2vdw)
500 1 41.0270 41.0270 disp('---------------------------------------------')
500 10 4.1027 4.1027 Script 4. 2 – Solução do exemplo 4.1 utilizando a função residente
---------------------------------------------- fzero
VAN DER WAALS
T(K) P(atm) VCO2(L/mol) VO2(L/mol) Command window
---------------------------------------------- ----------------------------------------------
300 1 24.8047 24.7032 LEI DOS GASES IDEIAS
300 10 2.6367 2.5461 T(K) P(atm) VCO2(L/mol) VO2(L/mol)
500 1 41.1570 41.0919 ----------------------------------------------
500 10 4.2293 4.1674 300 1 24.6162 24.6162
---------------------------------------------- 300 10 2.4616 2.4616
[Resultado da solução do exemplo 4.1 usando método de Newton] 500 1 41.0270 41.0270
500 10 4.1027 4.1027
Solução: Usando a função fzero ----------------------------------------------
VAN DER WAALS
Para a utilização da função residente fzero na T(K) P(atm) VCO2(L/mol) VO2(L/mol)
solução do exemplo 4.1 deve-se utilizar o script 4.2. ----------------------------------------------
300 1 24.8034 24.7030
300 10 2.6382 2.5462

30
Aplicações do MATLAB©\SIMULINK© na Engenharia Química
500 1 41.1569 41.0919 % a,b : intervalo de pontos onde esta contido
500 10 4.2294 4.1669 % a raiz da função
---------------------------------------------- % Erro : critério de parada
[Resultado da solução do exemplo 4.1 usando a função fzero] % imax : número máximo de iterações
% argumentos de saída:
Solução: Usando SIMULINLK % xs : solução da equação
for i=1:imax
Para a construção do modelo de blocos que FXb=feval(Fun,Xb);
Xi=Xb-FXb*(Xa-Xb)/(feval(Fun,Xa)-FXb);
representa a solução do exemplo 4.1 serão necessários os if abs((Xi-Xb)/Xb)<erro
seguintes blocos: Mux, Demux, Fcn, Algebric Constraint xs=Xi;
break
e Display. end
Xa=Xb;
Xb=Xi;
end
if i==imax
fprintf('A solução não foi obtida em %i
iterações.\n. MUDE O NUMERO DE ITERAÇÕES.',imax)
xs=('Não há resposta');
end
Função 4. 2 – MetodoSecante.m (exemplo 4.2)
Editor window
function F=FunTemperatura(x)
F=18405-pi*0.1*25*(10*(x-298)+0.8*5.67e-8*(x^4-
298^4));
Função 4. 3 – FunTemperatura.m (exemplo 4.2)
Para calcular a solução deve-se digitar na janela de
comando:
[Diagrama de blocos do SIMULINK© para solução do exemplo 4.1] Command window
Ts=MetodoSecante('FunTemperatura',0,1000,0.001,100)
Exemplo 4.2 (Transferência de calor): Ts =
422.9529
Uma tubulação de comprimento L=25 m e diâmetro [Resultado da solução do exemplo 4.2 usando método da Secante]
d=10 cm conduzindo vapor perde calor para o ambiente e

radiação. Se o fluxo total de calor por unidade de tempo MN


para as superfícies das vizinhanças por convecção e por Solução: Usando a função fzero
Para a solução do exemplo 4.2 utilizando a função
que deixa a tubulação for medido, então a temperatura residente fzero é necessário a execução da rotina

equação: M = 7OPQR/HS − H 0 + TUSV WHS − HIXY Z[.


superficial TS do tubo pode ser determinada pela seguinte implementada no script 4.3.
Editor window
Onde: ε=0,8 (emissividade da superfície do tubo) e %% Inicialização
matlabrc; % limpa todas as variávei
σSB = 5,67×10-8 W⋅m-2⋅K-4 (constante de Stefan- % do workspace e reseta o
Boltzmann). Se tivermos um fluxo de calor deixando a % matlab
close all; % fecha todas as figuras
tubulação igual à Q =18405 W e sendo h=10 W m-2 e clc; % limpa a tela de comando
Tar=Tviz=298 K, determine a temperatura da superfície da tic; % inicializa o "timer"
% função da temperatura
tubulação, TS. FunTemperatura=inline('18405-pi*0.1*25*(10*(x-
298)+0.8*5.67e-8*(x^4-298^4))');
a. Use uma função que calcule a raiz da função acima % executando fzero
pelo método da secante com um erro de 0,001 e Ts=fzero('FunTemperatura',[0,1000]);
intervalo [0,1000]. disp('---------------------------------------------')
disp('Temperatura da superfície')
b. Use a função residente fzero do MATLAB© com disp('---------------------------------------------')
fprintf(' Ts= %9.4f\n',Ts)
intervalo [0,1000]. disp('---------------------------------------------')
c. Use o SIMULINK© Script 4. 3 – Solução do exemplo 4.2 utilizando a função residente
fzero
Solução: Usando o método da secante
Command window
Na solução do exemplo 4.2, utilizando o método da ----------------------------------------------
secante, deve-se utilizar as funções MetodoSecante.m e Temperatura da superfície
FunTemperatura.m. ----------------------------------------------
Ts= 422.9531
Editor window ----------------------------------------------
function xs=MetodoSecante(Fun,Xa,Xb,erro,imax) [Resultado da solução do exemplo 4.2 usando utilizando função residente fzero]
% MétodoSecante determina a raiz da Fun=0 usando o
% médodo da Secante argumentos de entrada:
% Fun : nome da função que calcula Fun para
% um determinado x

31
[MATLAB/SIMULINK©: Aplicações na Engenharia Química]
Solução: Usando SIMULINLK ab(j,:)=ab(k,:);
ab(k,:)=abTemp;
break
Na construção do modelo de blocos para a solução end
do exemplo 4.2 serão necessários os seguintes blocos: Fcn, end
Algebric Constraint e Display. end
%Término da pivotação
for i=j+1:R
ab(i,j:C)=ab(i,j:C)-
ab(i,j)/ab(j,j)*ab(j,j:C);
end
end
x=zeros(R,1);
x(R)=ab(R,C)/ab(R,R);
for i=R-1:-1:1
x(i)=(ab(i,C)-ab(i,i+1:R)*x(i+1:R))/ab(i,i);
[diagrama de blocos do SIMULINK© para solução do exemplo 4.2] end
Função 4. 4 –GaussPivot.m (exemplo 4.3)
4.2 Problemas envolvendo sistemas Editor window
de equações lineares %% Inicialização
matlabrc; % limpa todas as variávei
% do workspace e reseta o
Exemplo 4.3 (Balanceamento de reações) % matlab
close all; % fecha todas as figuras
clc; % limpa a tela de comando
No Balanceando da reação química:
\ ] + >\ + ?^ _ ⇆ @\^ ] + O^ \_
tic; % inicializa o "timer"
% matriz dos coeficientes
A=[-4 0 1 1;0 0 1 0;0 -2 4 3;0 -1 0 4];
% vetor resposta
por meio da conservação do número de átomos de cada B=[2;4;0;0];
elemento entre reagentes e produtos obteve-se o seguinte %execução da função GaussPivot
SOL=GaussPivot(A,B);

−4 0 1 1 > 2
sistema linear: disp('---------------------------------------------')

0 0 1 0 ? 4
disp('Resultado do balanceamento')

a bc d = a b
0 −2 4 3 @
disp('---------------------------------------------')

0
fprintf(' a = %9.4f\n',SOL(1))

0 −1 0 4 O 0
fprintf(' b = %9.4f\n',SOL(2))
fprintf(' c = %9.4f\n',SOL(3))
fprintf(' d = %9.4f\n',SOL(4))
disp('---------------------------------------------')
Resolva o sistema para calcular os coeficientes
Script 4. 4 – Solução do exemplo 4.3 utilizando o método de Gauss com
estequiométricos a, b, c e d (que correspondem ao pivotamento
balanceamento) usando:
Command window
a. Uma função pelo método da eliminação de Gauss ----------------------------------------------
com pivotiamento Resultado do balanceamento
a = 1.3000
b. A divisão à esquerda do MATLAB© b = 12.8000
c = 4.0000
c. Usando o SIMULINK© (bloco Fatoração QR) d = 3.2000
----------------------------------------------
Solução: Usando o método da eliminação de Gauss [Resultado da solução do exemplo 4.3 usando método de da eliminação de Gauss
com pivomento]
com pivotação
Para resolver o exemplo 4.3 utilizando o método de Solução: Usando divisão à esquerda
eliminação de Gauss é necessário utilizar a função Para a solução do exemplo 4.3 utilizando o (\) é
GaussPivot.m e a rotina de execução apresentada no necessário a execução da rotina representada pelo script 4.5.
script 4.4. Editor window
%% Inicialização
Editor window matlabrc; % limpa todas as variáveis
function x=GaussPivot(a,b) % do workspace e reseta o
% Gauss resolve um sistema de equações lineares % matlab
% [a][x]=[b] usando o método da eliminação de Gauss close all; % fecha todas as figuras
% com pivotação. clc; % limpa a tela de comando
% Argumentos de entrada: tic; % inicializa o "timer"
% a : Matriz de coeficientes % matriz dos coeficientes
% b : Vetor coluna de constantes A=[-4 0 1 1;0 0 1 0;0 -2 4 3;0 -1 0 4];
% Argumentos de saída: % vetor resposta
% x : Vetor coluna com a solução B=[2;4;0;0];
ab=[a,b]; %execução da função divisão à esquerda
[R,C]=size(ab); SOL=A\B;
for j=1:R-1 disp('---------------------------------------------')
% Início da pivotação disp('Resultado do balanceamento')
if ab(j,j)==0 disp('---------------------------------------------')
for k=j+1:R fprintf(' a = %9.4f\n',SOL(1))
if ab(k,j)~=0 fprintf(' b = %9.4f\n',SOL(2))
abTemp=ab(j,:);

32
Aplicações do MATLAB©\SIMULINK© na Engenharia Química
fprintf(' c = %9.4f\n',SOL(3)) que podem ser escritas da forma:
6 0 −1 0 0 e 50
fprintf(' d = %9.4f\n',SOL(4))

j m
j−3 3 0 0 0 m ie l j 0 m
disp('---------------------------------------------'

i l i l
i 0 −1 9 0 0 l ie l = i160l
Script 4. 5 - Solução do exemplo 4.3 utilizando método divisão à

i 0 −1 −8 11 −2l ie l i 0 l
esquerda

h−3 −1 0 0 4 k heg k h 0 k
Command window
----------------------------------------------
Resultado do balanceamento
a = 1.3000 Resolva o sistema para calcular as concentrações C1, C2, C3,
b = 12.8000 C4 e C5 usando:
c = 4.0000
d = 3.2000
----------------------------------------------
a. Uma função pelo método da decomposição LU
[Resultado da solução do exemplo 4.3 utilizando comando operação à esquerda] b. A função residente lu do MATLAB©
Solução: Usando SIMULINLK (fatoração QR) c. Usando o SIMULINK© (bloco decomposição LU)
Para resolver o exemplo 4.3 utilizando o Simulink Solução: Usando o método de decomposição LU
serão necessários os seguintes blocos: Constant, QR Solver
e Display. Para a solução do exemplo 4.4 serão necessárias as
funções LUDC.m, SubstituiProgres.m,
SubstituiRegres.m e a rotina representada pelo script
4.6.
Editor window
function [L,U]=LUDC(A)
% A função LUDC decompõe uma matriz em uma matriz
% triangular inferior L e uma matriz triangular
% superior U, utilizando o método de Crout para que
% A=LU;
% Variáveis de entrada:
% A : Matriz dos coeficientes
% Variáveis de saída:
[diagrama de blocos do SIMULINK© para solução do exemplo 4.3] % L : matriz triangular inferior
% U : matriz triangular superior
[R,C]=size(A);
Exemplo 4.4 (Reatores Químicos): for i=1:R
L(i,1)=A(i,1);
U(i,i)=1;
A conservação de massa é um dos princípios mais end
importante na Engenharia Química. O conjunto de reatores for j=2:R
representados abaixo caracteriza um processo envolvendo U(1,j)=A(1,j)/L(1,1);
end
substâncias conservativas (isto é, substâncias que não for i=2:R
aumentam nem diminuem por causa das reações químicas). for j=2:i
L(i,j)=A(i,j)-L(i,1:j-1)*U(1:j-1,j);
end
for j=i+1:R
U(i,j)=(A(i,j)-L(i,1:i-1)*U(1:i-1,j))/L(i,i);
end
end
Função 4. 5 – LUDC.m (exemplo 4.4)
A função LUDC apresentada acima apenas decompõe
a matriz dos coeficientes em uma matriz triangular inferior
(L) e uma matriz triangular superior (U). Para a solução do
sistema tem-se que utilizar métodos auxiliares. Neste caso
será utilizada a substituição progressiva e regressiva.
Editor window
function y=SubstituiProgres(a,b)
% A função SubstituiProgres resolve um sistema de
% equações lineares da forma
Podemos realizar um balanço de massa no processo e % Ax=b usando a substituição progressiva;
% Variáveis de entrada:
identificar as concentrações (g m-3) de cada reator obtendo- % a : Matriz triangular inferior
se, no estado estacionário, o seguinte sistema de equações % b : vetor coluna de constantes
% Variáveis de saída:
lineares:
6e − e = 50
% y : vetor coluna com a solução

−3e + 3e = 0
n=length(b);

−e + 9e = 160
y(1,1)=b(1)/a(1,1);
for i=2:n

−e − 8e + 11e − 2eg = 0
y(i,1)=(b(i)-a(i,1:i-1)*y(1:i-1,1))./a(i,i);

−3e − e + 4eg = 0
end
Função 4. 6 – SubstituiProgres.m (exemplo 4.4)

33
[MATLAB/SIMULINK©: Aplicações na Engenharia Química]
Editor window y=L\(P*b);
function y=SubstituiRegres(A,b) % Resolução do sistema
% A função SubstituiRegres resolve um sistema de C=U\y;
% equações lineares da forma Ax=b usando a substituição n=length(C);
% progressiva; for i=1:n
% Variáveis de entrada: fprintf('Reator %i = %7.3f (g/m^3)\n',i,C(i))
% A : Matriz triangular superior end
% b : vetor coluna de constantes disp('--------------------------------------')
% Variáveis de saída: Script 4. 7 - solução do exemplo 4.4 usando a função residente lu
% y : vetor coluna com a solução
n=length(b); Command window
y(n,1)=b(n)/A(n,n); --------------------------------------
for i=n-1:-1:1 CALCULO DAS CONCENTRAÇÕES NOS REATORES
y(i,1)=(b(i)-A(i,i+1:n)*y(i+1:n,1))./A(i,i); --------------------------------------
end Reator 1 = 11.509 (g/m^3)
Função 4. 7 – SubstituiRegres.m (exemplo 4.4) Reator 2 = 11.509 (g/m^3)
Reator 3 = 19.057 (g/m^3)
Editor window Reator 4 = 16.998 (g/m^3)
%% Inicialização Reator 5 = 11.509 (g/m^3)
matlabrc; % limpa todas as variáveis --------------------------------------
% do workspace e reseta o [Resultado da solução do exemplo 4.4 usando função residente lu]
% matlab
close all; % fecha todas as figuras
clc; % limpa a tela de comando
Solução: Usando SIMULINLK (LU solver)
tic; % inicializa o "timer"
disp('---------------------------------------------') Para a criar o modelo de blocos relacionado a
disp('CALCULO DAS CONCENTRAÇÕES NOS REATORES') resolução do exemplo 4.4 serão necessários os blocos:
disp('---------------------------------------------')
% matriz dos coeficientes
Constant, LU Solver e Display.
A=[6 0 -1 0 0;-3 3 0 0 0; 0 -1 9 0 0; 0 -1 -8 11 -2;-
3 -1 0 0 4];
% vetor resposta
b=[50;0;160;0;0];
% Decomposição da matriz A em triangular inferior e
% triangular superior
[L,U]=LUDC(A);
% Resolução do sistema
y=SubstituiProgres(L,b);
C=SubstituiRegres(U,y);
n=length(C);
for i=1:n [diagrama de blocos do SIMULINK© para solução do exemplo 4.4]
fprintf('Reator %i = %7.3f (g/m^3)\n',i,C(i))
end
disp('---------------------------------------------')
4.3 Problemas envolvendo ajuste de
Script 4. 6 – Solução do exemplo 4.4 utilizando decomposição LU curvas e interpolação
Command window
-------------------------------------- Exemplo 4.5 (Saturação de soluções):
CALCULO DAS CONCENTRAÇÕES NOS REATORES
-------------------------------------- A saturação do oxigênio dissolvido na água em função da
Reator 1 = 11.509 (g/m^3)
Reator 2 = 11.509 (g/m^3) temperatura e da concentração de cloreto é apresentada na
Reator 3 = 19.057 (g/m^3) Tabela 4.1. Estime o nível do oxigênio dissolvido para a
Reator 4 = 16.998 (g/m^3) temperatura de 27,5 °C com as concentrações de cloreto
Reator 5 = 11.509 (g/m^3)
-------------------------------------- iguais a 0, 10 e 20 (g L-1).
[solução do exemplo 4.4 usando método da decomposição LU com método de Tabela 4. 1 – Concentração de oxigênio dissolvido em função da
Crout]
temperatura e da concentração de cloreto
Oxigênio dissolvido (mg⋅L-1) em função da concentração
Solução: Usando função a lu de cloreto (g⋅ L-1)
Editor window
T c=0,0 c=10,0 C= 20,0
%% Inicialização (°C) (g L-1) (g L-1) (g L-1)
matlabrc; % limpa todas as variávei
% do workspace e reseta o 0,0 14,60 12,90 11,40
% matlab 5,0 12,80 11,30 10,3
close all; % fecha todas as figuras 10,0 11,30 10,10 8,96
clc; % limpa a tela de comando 15,0 10,10 9,03 8,08
tic; % inicializa o "timer" 20,0 9,09 8,17 7,35
disp('--------------------------------------') 25,0 8,26 7,46 6,73
disp('CALCULO DAS CONCENTRAÇÕES NOS REATORES') 30,0 7,56 6,85 6,20
disp('--------------------------------------')
% matriz dos coeficientes a. Usando um polinômio de Lagrange para interpolação;
A=[6 0 -1 0 0;-3 3 0 0 0; 0 -1 9 0 0; 0 -1 -8 11 -2;-
3 -1 0 0 4];
% vetor resposta b. Usando a função residente do MATLAB© interp1 com
b=[50;0;160;0;0]; opção spline;
% Decomposição da matriz A
[L,U,P]=lu(A);

34
Aplicações do MATLAB©\SIMULINK© na Engenharia Química
c. Usando o SIMULINK© (Bloco Lookup Table Dynamic) Solução: Usando a função residente interp1 com a
opção spline
Solução: Usando polinômio de Lagrande
Para a resolver o exemplo 4.5 utilizando a função
Na resolução do exemplo 4.5 deverão ser utilizadas a residente interp1 com opção spline deve-se executar a
função Lagrange.m, e rotina descrita no script 4.8. rotina do script 4.9.
Editor window Editor window
function Yint=Lagrange(x,y,Xint) %% Inicialização
% Realiza a interpolação usando um polinômio de matlabrc; % limpa todas as variávei
% Lagrange % do workspace e reseta o
% Argumentos de entrada: % matlab
% x : vetor com as coordenadas x dos dados; close all; % fecha todas as figuras
% y : vetor com as coordenadas y dos dados; clc; % limpa a tela de comando
% Xint : coordenada x do ponto a ser tic; % inicializa o "timer"
% interpolado; % Variáveis de entrada:
%Argumentos de saída: % temperatura a ser interpolada
% Yint : valor interpolado correspondente ao Tint=27.5;
% ponto Xint % cria o vetor da variável independente temperatura
n=length(x); T=0:5:30;
for i=1:n % vetor saturação em f(c=0)
L(i)=1; c0=[14.60 12.80 11.30 10.10 9.09 8.26 7.56];
for j=1:n %vetor saturação em f(c=10)
if j~=i c10=[12.90 11.30 10.10 9.03 8.17 7.46 6.85];
L(i)=L(i)*(Xint-x(j))/(x(i)-x(j)); %vetor saturação em f(c=20)
end c20=[11.40 10.3 8.96 8.08 7.35 6.73 6.20];
end %Interpolação para concentração de cloreto 0 g\L
end ci0=interp1(T,c0,Tint,'spline');
Yint=sum(y.*L); %Interpolação para concentração de cloreto 10 g\L
Função 4. 8 – Lagrange.m (exemplo 4.5) ci10=interp1(T,c10,Tint,'spline');
%Interpolação para concentração de cloreto 20 g\L
Editor window ci20=interp1(T,c20,Tint,'spline');
%% Inicialização disp('---------------------------------------------')
matlabrc; % limpa todas as variávei disp(' Oxigênio dissolvido (g/L)')
% do workspace e reseta o disp('---------------------------------------------')
% matlab disp(' T (°C) c=0 (g/L) c=10 (g/L) c=20
close all; % fecha todas as figuras (g/L)')
clc; % limpa a tela de comando disp('---------------------------------------------')
tic; % inicializa o "timer" fprintf(' %6.2f %6.2f %6.2f
% Variáveis de entrada: %6.2f\n',Tint,ci0,ci10,ci20)
% temperatura a ser interpolada disp('---------------------------------------------')
Tint=27.5; Script 4. 9 – Solução do exemplo 4.5 utilizando a função residente
% cria o vetor da variável independente temperatura interp1
T=0:5:30;
% vetor saturação em f(c=0) Command window
c0=[14.60 12.80 11.30 10.10 9.09 8.26 7.56]; ----------------------------------------------------
%vetor saturação em f(c=10) Oxigênio dissolvido (g/L)
c10=[12.90 11.30 10.10 9.03 8.17 7.46 6.85]; ----------------------------------------------------
%vetor saturação em f(c=20) T (°C) c=0 (g/L) c=10 (g/L) c=20 (g/L)
c20=[11.40 10.3 8.96 8.08 7.35 6.73 6.20]; ----------------------------------------------------
%Interpolação para concentração de cloreto 0 g\L 27.50 7.91 7.13 6.49
ci0=Lagrange(T,c0,Tint); ----------------------------------------------------
%Interpolação para concentração de cloreto 10 g\L [Resultado da solução do exemplo 4.5 usando função residente interp1]
ci10=Lagrange(T,c10,Tint);
%Interpolação para concentração de cloreto 20 g\L Solução: Usando SIMULINLK (Lookup Table
ci20=Lagrange(T,c20,Tint);
disp('---------------------------------------------') Dynamic)
disp(' Oxigênio dissolvido (g/L)')
disp('---------------------------------------------')
disp(' T (°C) c=0 (g/L) c=10 (g/L) c=20
(g/L)')
disp('---------------------------------------------')
fprintf(' %6.2f %6.2f %6.2f
%6.2f\n',Tint,ci0,ci10,ci20)
disp('---------------------------------------------')
Script 4. 8 – Solução do exemplo 4.5 utilizando método de interpolação
por polinômio de Lagrange
Command window
----------------------------------------------------
Oxigênio dissolvido (g/L)
----------------------------------------------------
T (°C) c=0 (g/L) c=10 (g/L) c=20 (g/L)
----------------------------------------------------
27.50 7.91 7.13 6.49
----------------------------------------------------
[Resultado da solução do exemplo 4.5 usando polinômio de Lagrande]
[diagrama de blocos SIMULINK© para a solução do exemplo 4.5]

35
[MATLAB/SIMULINK©: Aplicações na Engenharia Química]
Para a construção do modelo de blocos a ser utilizado if nx~=ny
disp('ERRO: Número elemento de x diferente de y')
na solução do exemplo 4.5 serão necessários os seguintes else
blocos: Constant, Lookup Table Dynamic e Display. Sumx=sum(x);
Sumy=sum(y);
Exemplo 4.6 (Polímeros): Sumxy=sum(x.*y);
Sumxx=sum(x.^2);
a1=(nx*Sumxy-Sumx*Sumy)/(nx*Sumxx-Sumx^2);
Para a determinação do peso molecular de um polímero a2=(Sumxx*Sumy-Sumxy*Sumx)/(nx*Sumxx-Sumx^2);

relação: nop = q I . Onde: [η] é a viscosidade intrínseca do


pode-se utilizar informações da sua viscosidade pela seguinte end
Função 4. 9 – MinQuad.m (exemplo 4.6)
polímero, Mv peso molecular médio e K e a constantes Editor window
específicas do polímero. A viscosidade intrínseca é função %% Inicialização
do tempo de escoamento do polímero em um viscosímetro matlabrc; % limpa todas as variávei
% do workspace e reseta o
capilar. Podemos determiná-la realizando uma extrapolação
!
%
× @ . Onde: c é a
% matlab
!
para diluição infinita do gráfico r
close all; % fecha todas as figuras
s
clc; % limpa a tela de comando
tic; % inicializa o "timer"
concentração da solução de polímero, t é o tempo de % concentração em diluição infinita
escoamento da solução de polímero e t0 é o tempo de cinf=0;
% cosntantes do polímero
escoamento do solvente puro. O gráfico é linear e a K=3.9e-4;
intersecção com o eixo y é a viscosidade intrínseca [η]. A a=0.58;
Tabela 4.2 representa os dados de tempo de escoamento em % concentração
x=[0.04 0.06 0.08 0.10 0.12 0.14 0.16 0.2];
função da concentração de poliestireno em metil etil cetona % tempo de escoamento
a 25 °C sendo K=3,9×10-4 e a=0,58. Sabendo-se que o t=[89 95 104 114 126 139 155 191];
!
%
× @ é uma reta podemos realizar uma
% tempo de escoamento em função da concentração de
!
gráfico r
% poliestireno em metil etil cetona
s
regressão linear com a função * = > + > , onde: * =
y=(t./t(1)-1)./x;
% ajuste por Mínimos Quadrados Linear
!
%
=@ e > e >
[a1,a2]=MinQuad(x,y);
!r
% resultados

s
, os parâmetros a serem disp('---------------------------------------------')
fprintf('Reta ajustada por Mínimos Quadrados: y=%6.3f
determinados. x + %6.3f\n ',a1,a2)
disp('---------------------------------------------')
Tabela 4. 2 – Tempo de escoamento da solução de poliestireno em % diluição infinita
função da concentração de polímero n =a1*cinf+a2;
Concentração de Polímeros (g⋅L-1) Tempo de escoamento (s) fprintf('Quando c-->0 (diluição infinita) temos: n =
0,00* 83 %10.3f\n ',n)
% peso molecular
0,04 89 Mv=(n/K)^(1/a);
0,06 95 fprintf('Peso molecular do Polímero : Mv=
0,08 104 %10.3f\n ',Mv)
0,10 114 disp('---------------------------------------------')
0,12 126 Script 4. 10 – Solução do exemplo 4.6 pelo método dos mínimos
0,14 139 quadrados
0,16 155
0,20 191 Command window
-----------------------------------------------------
Para o problema, determine o peso molecular da amostra de Reta ajustada por Mínimos Quadrados: y=34.853 x + -
0.936
poliestireno: -----------------------------------------------------
Quando c-->0 (diluição infinita) temos: n = -0.936
a. Usando o método dos mínimos quadrados; Peso molecular do Polímero : Mv= 435454.811
-----------------------------------------------------
b. Usando função residente polyfit; [Resultado da solução do exemplo 4.6 utilizando mínimos quadrados]
Solução: Usando o método dos mínimos quadrados
Solução: Usando função polyfit
Serão utilizados na solução do exemplo 4.6 a função
MinQuad.m e a rotina do script 4.10. Para a solução do exemplo 4.6 utilizando a função
residente polyfit é necessário a execução da rotina
Editor window
apresentada no script 4.11.
function [a1,a2]=MinQuad(x,y)
% A função MinQuad calcula os coeficientes a1 e a2 da Editor window
% equação linear %% Inicialização
% y=a1x+a2 pelo método dos mínimos quadrados matlabrc; % limpa todas as variávei
% Argumentos de entrada: % do workspace e reseta o
% x : vetor com as variáveis independentes % matlab
% y : vetor com as variáveis dependentes close all; % fecha todas as figuras
% Argumentos de saída: clc; % limpa a tela de comando
% a1 : coeficiente a1 tic; % inicializa o "timer"
% a2 : coeficiente a2 % concentração em diluição infinita
nx=length(x); cinf=0;
ny=length(y); % cosntantes do polímero

36
Aplicações do MATLAB©\SIMULINK© na Engenharia Química
K=3.9e-4; Determine o fluxo de calor em x=0 e em x=L e Determine
a=0.58;
% concentração a quantidade de calor (em W) perdida entre x=0 e x=L. O
x=[0.04 0.06 0.08 0.10 0.12 0.14 0.16 0.2]; fluxo de calor por unidade de tempo em Watts é igual ao
% tempo de escoamento fluxo de calor multiplicado pela área da seção transversal.
t=[89 95 104 114 126 139 155 191];
% tempo de escoamento em função da concentração de a. Usando o método da diferença finita progressiva e
% poliestireno em metil etil cetona
y=(t./t(1)-1)./x; regressiva (para x=0 e x=L) respectivamente
% ajuste pela função residente polyfit
coef=polyfit(x,y,1); b. Use a função residente diff
a1=coef(1);
a2=coef(2); Solução: Usando o método da diferença finita
% resultados progressiva, regressiva e central
disp('---------------------------------------------')
fprintf('Reta ajustada por Mínimos Quadrados: y=%6.3f Para a solução do exemplo 4.7 serão utilizadas a
x + %6.3f\n ',a1,a2)
disp('---------------------------------------------') função dif_finita.m e a rotina implementada no script
% diluição infinita 4.12.
n =a1*cinf+a2;
fprintf('Quando c-->0 (diluição infinita) temos: n = Editor window
%10.3f\n ',n) function dx=dif_finita(x,y)
% peso molecular % Função para calcular a derivada de uma função a
Mv=(n/K)^(1/a); % partir de um conjunto de dados. As derivadas no
fprintf('Peso molecular do Polímero : Mv= % primeiro e no último ponto são calculadas utilizando
%10.3f\n ',Mv) % o método da diferença finita progressiva e
disp('---------------------------------------------') % regressiva respectivamente e a deriva dos demais
Script 4. 11 – Solução do exemplo 4.6 utilizando a função residente % pontos pelo método da diferença finita central.
polyfit % Argumentos de entrada:
% x : vetor com os valores das variáveis
Command window % independentes
----------------------------------------------------- % y : vetor com os valores das variáveis
Reta ajustada por Mínimos Quadrados: y=34.853 x + - % dependentes
0.936 % Argumentos de saída:
----------------------------------------------------- % dx : vetor com o valor das derivadas em
Quando c-->0 (diluição infinita) temos: n = -0.936 % cada ponto
Peso molecular do Polímero : Mv= 435454.811 n=length(x);
----------------------------------------------------- % primeiro ponto
[Resultado da solução do exemplo 4.6 utilizando a função residente polyfit] dx(1)=(y(2)-y(1))/(x(2)-x(1));
% pontos centrais
for i=2:n-1
4.4 Problemas envolvendo end
dx(i)=(y(i+1)-y(i-1))/(x(i+1)-x(i-1));

diferenciação numérica % último ponto


dx(n)=(y(n)-y(n-1))/(x(n)-x(n-1));
end
Exemplo 4.7 (Transferência de calor): Função 4. 10 – dif_finita.m (exemplo 4.7)

Uma aleta de formato cilíndrico Para a execução da função devemos entrar com os
usada para dissipar calor de valores das temperaturas em função do comprimento da
uma superfície de um material T S aleta. Onde a variável independente é o comprimento (x) e a
x
para o ambiente apresentou a T b
variável dependente é a temperatura (T). Lembrando que o
distribuição de temperatura ao T
L
a
fluxo de calor deve ser em (W m-2), logo devemos
longo do comprimento da aleta transformar as unidades de comprimento de cm para m.
apresentada na Tabela 4.3. A Editor window
aleta tem um comprimento L=10 cm, área de seção %% Inicialização
matlabrc; % limpa todas as variávei

W m-2. O fluxo de calor (W m-2) é dado por: u = −v C .


Cw
transversal AT=1,6×10-5 m2 e condutividade térmica k=240 % do workspace e reseta o
% matlab
close all; % fecha todas as figuras
clc; % limpa a tela de comando
Tabela 4. 3 – Distribuição de temperatura em uma aleta cilíndrica tic; % inicializa o "timer"
em função de seu comprimento % vetor comprimento da aleta em (m)
x (cm) T (K) x=0:0.01:0.1;
0 473,0 % vetor tempertura (K)
1 446,3 T=[473 466.3 422.6 401.2 382 364.3 348 332.7 318.1
304 290.1];
2 422,6
% constantes do processo
3 401,2 % condutividade térmica (W/m/K)
4 382,0 k=240;
5 364,3 % área da seção transversal
6 348,0 AT=1.6e-5;
7 332,7 % cálculo das derivadas
8 318,1 dTdx=dif_finita(x,T);
9 304,0 % fluxo de calor (x=0..L)
10 290,1 qx=-k*dTdx;
n=length(qx);

37
[MATLAB/SIMULINK©: Aplicações na Engenharia Química]
disp('---------------------------------------------') Command window
for i=1:n Fluxo de calor em x= 0.00 (m): 160800.000 (W/m^2)
fprintf('Fluxo de calor em x= %3.2f (m): %9.3f Fluxo de calor em x= 0.01 (m): 1048800.000 (W/m^2)
(W/m^2)\n',x(i),qx(i)) Fluxo de calor em x= 0.02 (m): 513600.000 (W/m^2)
end Fluxo de calor em x= 0.03 (m): 460800.000 (W/m^2)
% quantidade de calor dissipado Fluxo de calor em x= 0.04 (m): 424800.000 (W/m^2)
qx_w=sum(-k*AT*dTdx); Fluxo de calor em x= 0.05 (m): 391200.000 (W/m^2)
disp('---------------------------------------------') Fluxo de calor em x= 0.06 (m): 367200.000 (W/m^2)
fprintf('Quantidade de calor dissipado: %9.3f Fluxo de calor em x= 0.07 (m): 350400.000 (W/m^2)
(W)\n',qx_w) Fluxo de calor em x= 0.08 (m): 338400.000 (W/m^2)
disp('---------------------------------------------') Fluxo de calor em x= 0.09 (m): 333600.000 (W/m^2)
Script 4. 12 – Solução do exemplo 4.7 utilizando método das -----------------------------------------------------
diferenças finitas Quantidade de calor dissipado: 70.234 (W)
[Resultado da solução do exemplo 4.7 utilizando a função residente diff]
Command window
-----------------------------------------------------
Fluxo de calor em x= 0.00 (m): 160800.000 (W/m^2)
Fluxo de calor em x= 0.01 (m): 604800.000 (W/m^2)
4.5 Problema envolvendo integração
Fluxo de calor em x= 0.02 (m): 781200.000 (W/m^2)
Fluxo de calor em x= 0.03 (m): 487200.000 (W/m^2)
numérica
Fluxo de calor em x= 0.04 (m): 442800.000 (W/m^2) Exemplo 4.8 (Termodinâmica):
Fluxo de calor em x= 0.05 (m): 408000.000 (W/m^2)
Fluxo de calor em x= 0.06 (m): 379200.000 (W/m^2)

pode ser calculada pela relação: ∆^ = y@∆H . Porém, esta


Fluxo de calor em x= 0.07 (m): 358800.000 (W/m^2) A variação de entalpia de um material (com massa constante)
Fluxo de calor em x= 0.08 (m): 344400.000 (W/m^2)
Fluxo de calor em x= 0.09 (m): 336000.000 (W/m^2)
Fluxo de calor em x= 0.10 (m): 333600.000 (W/m^2)
relação somente é válida para intervalos de temperatura
----------------------------------------------------- pequenos onde a capacidade calorífica pode ser considerada
Quantidade de calor dissipado: 74.189 (W) constante. Quando temos uma grande variação de
-----------------------------------------------------
[Resultado da solução do exemplo 4.7 utilizando diferenças finitas]
temperatura, a capacidade calorífica não é constante, isto é,

relação: ∆^ = y zw $ @/H0 OH . Um determinado material


w
c=f(T) e a variação da entalpia pode ser calculada pela
Solução: Usando função residente diff
Para a solução do exemplo 4.7 por meio da função apresenta a seguinte relação de capacidade específica e
residente diff é necessário a execução da rotina temperatura: c(T)=0,132+1,56×10-4T+2,64×10-7T2
implementada no script 4.13. (cal g °C ). Determine a quantidade de calor necessária
- 1 -1

para elevar 2,7 kg deste material de -100 a 200 °C.


Editor window
%% Inicialização (a) Utilizando o método trapezoidal composto
matlabrc; % limpa todas as variávei
% do workspace e reseta o
(b) Utilizando a função residente trapz
% matlab
close all; % fecha todas as figuras Solução: Usando o método trapezoidal
clc; % limpa a tela de comando
tic; % inicializa o "timer" Para a solução do exemplo 4.8 utilizando o método
% vetor comprimento da aleta em (m) trapezoidal composto serão necessárias as funções
x=0:0.01:0.1; trapezoidal.m e cpT.m e a rotina descrita no script 4.14.
% vetor tempertura (K)
T=[473 466.3 422.6 401.2 382 364.3 348 332.7 318.1 Editor window
304 290.1]; function IntNum=trapezoidal(FcnInt,a,b,N)
% constantes do processo % A função Romb integra numericamente usando o método
% condutividade térmica (W/m/K) % Trapezoidal composto
k=240; % Variáveis de entrada:
% área da seção transversal % FcnInt : função a ser integrada
AT=1.6e-5; % a : limite inferior de integração
% cálculo das derivadas % b : limite superior de integração
dx=diff(x,1); % N : número de subintervalos
dT=diff(T,1); % Variáveis de saída:
dTdx=dT./dx; % IntNum : Valor da integral
% fluxo de calor (x=0..L) % determinação do passo de integração
qx=-k*dTdx; h=(b-a)/N;
n=length(qx); % determinação dos limites de integração
disp('---------------------------------------------') x=a:h:b;
for i=1:n for i=1:N+1
fprintf('Fluxo de calor em x= %3.2f (m): %9.3f F(i)=feval(FcnInt,x(i));
(W/m^2)\n',x(i),qx(i)) end
end IntNum=h*(F(1)+F(N+1))/2+h*sum(F(2:N));
% quantidade de calor dissipado end
qx_w=sum(-k*AT*dTdx);
disp('---------------------------------------------') Função 4. 11 – trapezoidal.m (exemplo 4.8)
fprintf('Quantidade de calor dissipado: %9.3f Editor window
(W)\n',qx_w)
disp('---------------------------------------------') function func=cpT(T)
% função a ser integrada
Script 4. 13 – Solução do exemplo 4.7 utilizando função residente diff func=0.132+1.56e-4*T+2.64e-7*T^2;
end
Função 4. 12 – cpT.m (exemplo 4.8)

38
Aplicações do MATLAB©\SIMULINK© na Engenharia Química
Editor window
Exemplo 4.9:
%% Inicialização
matlabrc; % limpa todas as variávei
% do workspace e reseta o Um termopar é utilizado para medir a temperatura de gases
% matlab

termopar é dado por: { = − zwX ~ Q€/w w 0‚ƒ„ Ww † w † Z[ OH ,


w | }
close all; % fecha todas as figuras em tubulações. O efeito temporal na junção esférica do
clc; % limpa a tela de comando
tic; % inicializa o "timer" • • •… ‡ˆ‰
% temperatura inicial (°C)
Ti=-100;
onde T é a temperatura na junção do termopar no tempo, ρ
% temperatura final (°C) é a densidade do material na junção, V é o volume da junção
Tf=200; esférica, C é a capacidade térmica da junção, AS é a área
% massa do material (g)
m=2.700;
superficial da junção, h é o coeficiente de troca de calor por
% número de intervalos convecção, T∞ é a temperatura do gás, ε é a emissividade do
n=10;
disp('---------------------------------------------') material na junção, σSB é a constante de Stefan-Boltzmann e
disp('VARIAÇÃO DE ENTALPIA') Tviz é a temperatura da tubulação. Determine, o tempo t para
disp('---------------------------------------------') que a temperatura na junção do termopar seja T=490 K
%Cálculo da integral pelo método trapzoidal
cdT=trapezoidal('cpT',Ti,Tf,n); sendo: Ti=298 K, ε=0,9, ρSB=5,67×10-8 W m-2 K-4,
dH=m*cdT;
fprintf('dH = %11.3f (kcal)\n',dH)
dje=5 mm, ρ=8500 kg m-3, C=400 J kg-1 K-1, T∞=473 K,
disp('---------------------------------------------') h=400 W m-2 K-1 e Tviz=673 K.
Script 4. 14 – Solução do exemplo 4.8 utilizando método de integração
trapezoidal
a. Utilizando o método de Integração de Romberg
Composto
Editor window
----------------------------------------------------- Solução: Usando o método de integração de
VARIAÇÃO DE ENTALPIA Rosemberg
-----------------------------------------------------
dH = 115.408 (kcal) A solução do exemplo 4.9 requer a execução das
-----------------------------------------------------
[Resultado da solução do exemplo 4.8 pelo método de integração trapezoidal]
funções Romberg.m, trapezoidal.m (exemplo 4.8) e
ef_tempo.m e da rotina apresentada no script 4.16.
Solução: Usando função residente trapz Editor window
function INR=Romberg(FcnInt,a,b,Ni,Nr)
Na solução do exemplo 4.8 utilizando a função % A função Romb integra numericamente usando o método
residente trapz será necessária a execução do script 4.15. % de Integração de Romberg Variáveis de entrada:
% FcnInt : função a ser integrada (string)
Editor window % a : limite inferior de integração
%% Inicialização % b : limite superior de integração
matlabrc; % limpa todas as variávei % Ni : número inicial de subintervalos
% do workspace e reseta o % Nr : número de níveis da integração de
% matlab % Romberg
close all; % fecha todas as figuras % Variáveis de saída:
clc; % limpa a tela de comando % INR : matriz com os valores estimados da
tic; % inicializa o "timer" % integração numérica de Romberg
% temperatura inicial (°C) % Cria a primeira coluna com o método trapezoidal
Ti=-100; % composto
% temperatura final (°C) for i=1:Nr+1
Tf=200; Nsint=Ni*2^(i-1);
% massa do material (g) INR(i,1)=trapezoidal(FcnInt,a,b,Nsint);
m=2.700; end
% número de intervalos % Calcula os valores dos níveis de Rombeg
n=10; for j=2:Nr+1
disp('---------------------------------------------') for i=1:(Nr-j+2)
disp('VARIAÇÃO DE ENTALPIA') INR(i,j)=(4^(j-1)*INR(i+1,j-1)-INR(i,j-
disp('---------------------------------------------') 1))/(4^(j-1)-1);
%Cálculo da integral pela função residente trapz end
Temp=Ti:50:Tf; end
n=length(Temp); Função 4. 13 – Romberg.m (exemplo 4.9)
for i=1:n
c(i)=cpT(Temp(i)); Editor window
end function func=ef_tempo(T)
cdT=trapz(Temp,c); global d C V As hc e ceb Too Tviz
dH=m*cdT; func=-(d*V*C)/(As*(hc*(T-Too)+e*ceb*(T^4-Tviz^4)));
fprintf('dH = %11.3f (kcal)\n',dH) end
disp('---------------------------------------------') Função 4. 14 – ef_tempo.m (exemplo 4.9)
Script 4. 15 – Solução do exemplo 4.8 utilizando função residente trapz
Editor window
Editor window %% Inicialização
----------------------------------------------------- matlabrc; % limpa todas as variávei
VARIAÇÃO DE ENTALPIA % do workspace e reseta o
----------------------------------------------------- % matlab
dH = 115.466 (kcal) close all; % fecha todas as figuras
----------------------------------------------------- clc; % limpa a tela de comando
[Resposta da solução do exemplo 4.8 utilizando função trapz] tic; % inicializa o "timer"

39
[MATLAB/SIMULINK©: Aplicações na Engenharia Química]
% definição das variáveis de forma global % de 4ª Ordem.
global d C V As hc e ceb Too Tviz % Argumentos de entrada :
% dados de entrada % EDO1 : equação diferncial dC/dt
d=8500; % EDO2 : equação diferencia dT/dt
Dje=5e-3; % a e b : intervalo de integração
V=(pi*Dje^3)/6; % h : incremento do método
As=pi*Dje^2; % x0 e y0 : valores iniciais das
C=400; % variáveis dependentes
hc=400; % Argumentos de saída:
e=0.9; % t : vetor da variável
ceb=5.67e-8; % independente do sistema
Too=473; % x e y : vetor da variáveis
Tviz=693; % dependentes do sistema
Ti=298; % inicialização do método
Tf=490; t(1)=a;
Ni=1; x(1)=x0;
Nr=4; y(1)=y0;
disp('---------------------------------------------') n=(b-a)/h;
disp('EFEITO TEMPORAL') for i=1:n
disp('---------------------------------------------') t(i+1)=t(i)+h;
%Método de Romberg tm=t(i)+h/2;
t=Romberg('ef_tempo',Ti,Tf,Ni,Nr); % calculo das consntantes de Runge-Kutta K
fprintf('tempo = %11.3f (s)\n',t(1,length(t))) Kx1=feval(EDO1,t(i),x(i),y(i));
disp('---------------------------------------------') Ky1=feval(EDO2,t(i),x(i),y(i));
Script 4. 16 – Solução do exemplo 4.9 utilizando método de Romberg Kx2=feval(EDO1,tm,x(i)+Kx1*h/2,y(i)+Ky1*h/2);
composto Ky2=feval(EDO2,tm,x(i)+Kx1*h/2,y(i)+Ky1*h/2);
Kx3=feval(EDO1,tm,x(i)+Kx2*h/2,y(i)+Ky2*h/2);
Command window Ky3=feval(EDO2,tm,x(i)+Kx2*h/2,y(i)+Ky2*h/2);
----------------------------------------------------- Kx4=feval(EDO1,t(i+1),x(i)+Kx3*h,y(i)+Ky3*h);
EFEITO TEMPORAL Ky4=feval(EDO2,t(i+1),x(i)+Kx3*h,y(i)+Ky3*h);
----------------------------------------------------- x(i+1)=x(i)+(Kx1+2*Kx2+2*Kx3+Kx4)*h/6;
tempo = 25.678 (s) y(i+1)=x(i)+(Ky1+2*Ky2+2*Ky3+Ky4)*h/6;
----------------------------------------------------- end
[Resultado da solução do exemplo 4.9 utilizando método de integração de Função 4. 15 – RungeKutta.m (exemplo 4.10)
Romberg]
Editor window
function dcdt=ReatBatEDOc(t,x,y)
4.6 Problemas envolvendo Equações dcdt=-exp(-10/(y+273))*x;
end
diferenciais Ordinárias: PVI Função 4. 16 – ReatBatEDOc.m (exemplo 4.10)

Exemplo 4.10 (Reatores): Editor window


function dTdt=ReatBatEDOt(t,x,y)
dTdt=1000*exp(-10/(y+273))*x-10*(y-20);
Um reator batelada não isotérmico pode ser descrito pelo end
seguinte sistema de equações diferenciais Ordinárias: Função 4. 17 – ReatBatEDOt.m (exemplo 4.10)

= − exp − %e
C} =
C w‚ •
Editor window

= 1000 exp − % e − 10/H − 200


Cw =
%% Inicialização
matlabrc; % limpa todas as variávei
C w‚ • % do workspace e reseta o
% matlab
Onde: C é a concentração do reagente e T a temperatura do close all; % fecha todas as figuras
reator. Inicialmente, o reator encontra-se a 15 °C e possui clc; % limpa a tela de comando
tic; % inicializa o "timer"
uma concentração do reagente C de 1,0 mol L-1. Determine % intervalo de integração
a concentração e a temperatura em função do tempo para xi=0;
xf=10;
um intervalo de 10 min. % passo de integração
h=0.1;
a. Usando o método deRunge-Kutta de 4ª Ordem % condições iniciais
C0=1;
b. Usando a função residente ode45 T0=15;
% Execução do método de Runge-Kutta de 4ª Ordem
c. Usando o SIMULINK© (Bloco integrator) [t,C,T]=RungeKutta('ReatBatEDOc','ReatBatEDOt',xi,xf,
h,C0,T0);
Solução: Usando o método de Runge-Kutta de 4ª % Resultado na forma de gráfico
Ordem figure(1)
subplot(1,2,1)
Para a solução do exemplo 4.10 utilizando o método plot(t,C)
de Runge-Kutta 4ª Ordem serão necessárias as funções xlabel('tempo [s]')
ylabel('Concentração de C [mol/L]')
RungeKutta.m, ReatBatEDOc.m e ReatBatEDOt.m e subplot(1,2,2)
a execução da rotina apresentada no script 4.17. plot(t,T)
xlabel('tempo [s]')
Editor window ylabel('Temperatura [°C]')
function [t,x,y]=RungeKutta(EDO1,EDO2,a,b,h,x0,y0) Script 4. 17 – Solução do exemplo 4.10 pelo método de Runge-Kutta de
% A função RK4_sis resolve um sistema de Equações 4ª Ordem
% Diferenciais Ordinnaria pelo método de Runge-Kutta

40
Aplicações do MATLAB©\SIMULINK© na Engenharia Química
1 70 Solução: Usando SIMULINLK (integrator)
60
0.8 Para criar o modelo de blocos que representa a
Concentração de C [mol/L]

50 solução do exemplo 4.10 os seguintes blocos deverão ser

Temperatura [°C]
0.6 40 utilizados: From, Goto, Mux, Fcn, Integrator e To File.
30
Além do modelo de blocos é necessário a execução da rotina
0.4
implementada no script 4.19.
20
0.2
10

0 0
0 2 4 6 8 10 0 2 4 6 8 10
tempo [s] tempo [s]
[Resposta da solução do exemplo 4.10 utilizando o método de Runge-Kutta de 4ª
Ordem]

Solução: Usando a função redidente ode45


Na solução do exemplo 4.10 utilizando a função
residente ode45 deverão ser utilizadas a função ReatBat.m
e a rotina implementada no script 4.18. [diagrama de blocos SIMULINK© para solução do exemplo 4.10]

Editor window Editor window


function dyn=ReatBat(t,y) %% Inicialização
dyn=[-exp(-10/(y(2)+273))*y(1); %C matlabrc; % limpa todas as variávei
1000*exp(-10/(y(2)+273))*y(1)-10*(y(2)-20);];%T % do workspace e reseta o
end % matlab
Função 4. 18 – ReatBat.m (exemplo 4.10) close all; % fecha todas as figuras
clc; % limpa a tela de comando
Editor window tic; % inicializa o "timer"
matlabrc; % limpa todas as variávei % condições iniciais
% do workspace e reseta o C0 = 1.0;
% matlab T0 = 15.0;
close all; % fecha todas as figuras % simulação
clc; % limpa a tela de comando sim('exemplo4_10',10)
tic; % inicializa o "timer" % leitura dos resultados
% condicoes iniciais load('Reator')
Y0 = [1; 15]; CT=CT';
% intervalo de integração % Resultado na forma de gráfico
tspan=[0 10]; figure(1)
% execução da função ode45 subplot(1,2,1)
[t,Y] = ode45('ReatBat',tspan,Y0); plot(CT(:,1),CT(:,2))
% Resultado na forma de gráfico grid on
figure(1) xlabel('tempo [s]')
subplot(1,2,1) ylabel('Concentração de C [mol/L]')
plot(t,Y(:,1)) subplot(1,2,2)
grid on plot(CT(:,1),CT(:,3))
xlabel('tempo [s]') grid on
ylabel('Concentração de C [mol/L]') xlabel('tempo [s]')
subplot(1,2,2) ylabel('Temperatura [°C]')
plot(t,Y(:,2)) Script 4. 19 – Solução do exemplo 4.10 utilizando o SIMULINK
grid on
xlabel('tempo [s]') 1 100
ylabel('Temperatura [°C]') 90
Script 4. 18 – Solução do exemplo 4.10 utilizando função residente 0.8
Concentração de C [mol/L]

80
ode45
Temperatura [°C]

70
1 100 0.6
60
90
50
0.8 80 0.4
Concentração de C [mol/L]

40
70
Temperatura [°C]

0.6 0.2 30
60
20
50
0.4 0 10
0 2 4 6 8 10 0 2 4 6 8 10
40
tempo [s] tempo [s]
0.2 30 [Resposta para a solução do exemplo 4.10 utilizando o SIMULINK©]
20
Exemplo 4.11 (Processos):
0 10
0 2 4 6 8 10 0 2 4 6 8 10
tempo [s] tempo [s] Um tanque cilíndrico é utilizado para armazenamento de
[Resposta da resolução do exemplo 4.10 utilizando a função residente ode45] propilenoglicol. A entrada de propilenoglicol se dá no topo
do tanque e a saída por um tubo na base. A vazão mássica
de propilenoglicol na entrada varia com o tempo da seguinte

41
forma: yN Ž = yN + yN @•, {%; e a taxa de saída depende

[MATLAB/SIMULINK©: Aplicações na Engenharia Química]
g=9.81;
% limite de integração

yN ‘ = ’“” 12•R . Assim, a taxa de variação do nível do


do nível de propilenoglicol dentro do tanque expressa por: ti=0;
tf=150;
% passo de integração
h=0.01;

seguinte modelo matemático: ’“ w C = yN + yN @•, {% −


propilenoglicol, h, no tanque pode ser representa pelo
C€ • % condição inicial

’“” 12•R . Sendo: AT=3 m2, Ap=0,05 m2, m1=50 kg s-1,


h0=3;
% execução do Método de Euler
[t,h]=EDOEuler('NivelTanque',ti,tf,h,h0);
m2=25 kg s-1, ρ=1036 kg m-3 e g=9,81 m s-1. % Resultado em forma de gráfico
figure(1)
plot(t,h)
Inicialmente o tanque apresenta o nível em 3 m. Determine grid on
a variação do nível do propilenoglicol no tanque para um xlabel('tempo [s]')
domínio de tempo de 0≤t≤130 s. ylabel('Nível [m]')
Script 4. 20 – Solução do exemplo 4.11 utilizando método de Euler
Para a solução do problema acima deve-se reescrever o 3
modelo matemático que representa a variação do nível do
propilenoglicol no tanque da seguinte forma: 2.5

= + @•, {% − 12•R.
C€ –N –N$ • |~˜
C |~— |~— |~—
2

Nível [m]
1.5
a. Usando o método de Euler com passo igual h=0,01;
1
b. Usando a função residente ode23;
0.5
Solução: Usando o método de Euler
Na solução do exemplo 4.11 serão necessárias as 0
0 20 40 60 80 100 120 140 160
tempo [s]
funções EDOEuler.m, NivelTanque.m e a execução da [Resposta da solução do exemplo 4.11 utilizando o método de Euler]
rotina apresentada no script 4.20.
Solução: Usando a função residente ode23
Editor window
function [x,y]=EDOEuler(EDO,a,b,h,y0) Para a solução do exemplo 4.11 por meio da função
% A função EDOEuler resolve uma EDO de primeira ordem residente ode23 é necessário a execução da rotina descrita
% com valor inicial usando o método de explícito de
% Euler no script 4.21.
% Argumentos de entrada:
% EDO : Equação diferencial dh/dt; Editor window
% a e b : intervalo da variável independente; %% Inicialização
% y0 : valor inicial da variável dependente; matlabrc; % limpa todas as variávei
% Argumentos de saída: % do workspace e reseta o
% x : vetor da variável independente; % matlab
% y : vetor da variável dependente; close all; % fecha todas as figuras
x(1)=a; clc; % limpa a tela de comando
y(1)=y0; tic; % inicializa o "timer"
n=(b-a)/h; % declaração das variávei na forma global
for i=1:n global m1 m2 AT Ap rho g
x(i+1)=x(i)+h; m1=50;
y(i+1)=y(i)+feval(EDO,x(i),y(i))*h; m2=25;
end AT=3;
Ap=0.05;
Função 4. 19 – EDOEuler.m (exemplo 4.11)
rho=1036;
Editor window g=9.81;
function dhdt=NivelTanque(x,y) % passo de integração
global m1 m2 AT Ap rho g h=0.01;
dhdt=m1/(rho*AT)+(m2/(rho*AT))*cos((pi/12)*x)- % limite de integração
ti=0;
Ap/AT*sqrt(2*g*y);
tf=150;
end
tspan=ti:h:tf;
Função 4. 20 – NivelTanque.m (exemplo 4.11) % condição inicial
h0=3;
Editor window
% execução da função residente ode23
%% Inicialização [t,h]=ode23('NivelTanque',tspan,h0);
matlabrc; % limpa todas as variávei % Resultado em forma de gráfico
% do workspace e reseta o figure(1)
% matlab plot(t,h)
close all; % fecha todas as figuras grid on
clc; % limpa a tela de comando xlabel('tempo [s]')
tic; % inicializa o "timer" ylabel('Nível [m]')
% declaração das variávei na forma global
global m1 m2 AT Ap rho g
Script 4. 21 – Solução do exemplo 4.11 utilizando função residente
m1=50; ode23
m2=25;
AT=3;
Ap=0.05;
rho=1036;

42
Aplicações do MATLAB©\SIMULINK© na Engenharia Química
3
Quando i=4:
2.5 H − /2 + R •0H + Hg = −R •HS ;
Quando i=5:
H − /2 + R •0Hg + Hž = −R •HS ou
Nível [m] 2

H − /2 + R •0Hg = −/R •HS + Hž 0


1.5

1
As temperaturas T1 e T6 são conhecidas da condição de
0.5 contorno, isto é, T1=473 K e T6=298 K. As equações acima
discretizada formam um sistema de equações lineares
0
0 50 100 150 algébricas. Escrevendo-as na forma matricial [A][T]=[C],
tempo [s]
temos:
−/2 + R •0 1 0 0
m H
[Resposta da solução do exemplo 4.11 utilizando o a função residente ode23]

j
i 1 −/2 + R •0 1 0 l aH b
i l H
4.7 Problemas envolvendo Equações
i 0 1 −/2 + R •0 1 l
h 0 0 1 −/2 + R •0k Hg
diferenciais Ordinárias: PVC
−/R •HS + H 0
j m
i −R •HS l
=i l
Exemplo 4.12 (Transferência de calor):
i −R •H S l
A variação de temperatura (Tx), considerando regime h−/R •HS + Hž 0k
permanente, em uma aleta de formato cilíndrico quando
Solução: Usando a divisão à esquerda no sistema
apenas a troca de calor por convecção é analisada pode ser
linear discretizado pelo método das diferenças finitas
representado pelo seguinte modelo matemático:

− /H − H‘ 0 = 0, 0≤x≤L com condições de contorno:


C$w €™ š
Para a solução do exemplo 4.12, discretizado pelo
C $ ›~™ método das diferenças finitas, deverá ser executada a rotina
T(0)=Ta e T(L)=Tb. apresentada no script 4.22.
Onde: hc é o coeficiente de transferência de calor por Editor window
%% Inicialização
convecção, P é o perímetro da área da secção transversal da matlabrc; % limpa todas as variávei
aleta, k é a condutividade térmica do material da aleta, Ac é a % do workspace e reseta o
área da seção transversal da aleta e TS é a temperatura % matlab
close all; % fecha todas as figuras
ambiente. Sendo: hc=40 W m-2 K-1, P=0,016 m2, k=240 W clc; % limpa a tela de comando
m-1 K-1, Ac=1,6×10-5 m2, L=0,1 m, T(0)=473 K e tic; % inicializa o "timer"
% Solução de EDO linear de segunda ordem com valor de
T(0,1)=293 K. Determine a distribuição da temperatura ao % contorno usando o método de diferenças finitas.
longo da aleta usando o método da diferença finita. % dados de entrada
hc=40;
O modelo que representa a variação de temperatura ao longo k=240;
da aleta descrito acima é uma EDO linear de segunda ordem P=0.016;
Ac=1.6e-5;
que, pelo método da diferença finita, pode ser discretizada Ts=293;
como: L=0.1;

C$w
% número de intervalos do domínio da solução
A derivada segunda C $ , discretizada pela diferença central: n=5;

− •/HX − HS 0 = 0. Onde: • =
% passo de integração
wˆœ wˆ ‚wˆ €™ š h=L/5;
€$ ›~™
. % determinação dos pontos de discretização
x=0:h:0.1;
A equação discretizada pode ser reescrita como: % cálculo de fi

HX − /2 + R •0HX + HX‚ = −R •HS .


fi=hc*P/(k*Ac);
% determinação dos elementos "a" da diagonal
% principal (adp)da matriz A
adp=-(2+h^2*fi);
Utilizando um domínio de solução com 5 intervalos (6 % determinação dos elementos "h^2*fi*Ts" do vetor de
pontos, isto é, i=6) igualmente espaçados temos para os % constantes (cfiTs) C
pontos centrais i=2,…,5: cfiTs=-h^2*fi*Ts;
% condições de contorno
Quando i=2: T(1)=473;

H − /2 + R •0H + H = −R •HS ou
T(6)=293;
% construção da matriz a

−/2 + R •0H + H = −/R •HS + H 0;


A=eye(4,4)*adp;
for i=2:4
A(i,i-1)=1;
A(i-1,i)=1;
Quando i=3:
H − /2 + R •0H + H = −R •HS ;
end
% construção do vetor C
C=[cfiTs-T(1);cfiTs;cfiTs;cfiTs-T(6)];
% resolução do sistema de equações usando divisão à

43
[MATLAB/SIMULINK©: Aplicações na Engenharia Química]
% esquerda
T(2:5)=A\C;
disp('--------------------------------------------');
disp('DINÂMICA DA TEMPERATURA EM UMA ALETA CILÍNDRICA
T(x)')
disp('--------------------------------------------');
for i=1:6
fprintf('T(%3.2f) = %6.3f\n',x(i),T(i))
end
disp('--------------------------------------------');
%resultado em forma de gráfico
figure(1)
plot(x,T,'*')
grid on
xlabel('x [m]');
ylabel('Temperatura [K]')
Script 4. 22 – Solução do exemplo 4.12 utilizando métodos das
diferenças finitas
Command window
-----------------------------------------------------
DINÂMICA DA TEMPERATURA EM UMA ALETA CILÍNDRICA T(x)
-----------------------------------------------------
T(0.00) = 473.000
T(0.02) = 424.412
T(0.04) = 384.584
T(0.06) = 350.862
T(0.08) = 320.998
T(0.10) = 293.000
-----------------------------------------------------
[Resposta da solução do exemplo 4.12 discretizado pelo método das diferenças
finitas]

480
460
440
420
Temperatura [K]

400
380
360
340
320
300

280
0 0.02 0.04 0.06 0.08 0.1
x [m]
[Resposta gráfica para a solução do exemplo 4.12 utilizando o método das
diferenças finitas]

44
Referências Bibliográficas

Referências Bibliográficas

CHAPRA, S. C. Métodos numéricos para engenharia. Editora McGraw-Hill.

CHAPMAN, S. J. Programação em matlab para engenheiros. Editora Cengage Learning.

GILAT, A. Matlab com aplicações em engenharia. Editora Bookman.

GILAT, A., SUBRAMANIAM, V. Métodos numéricos para engenheiros e cientistas. Editora Bookman.

MATSUMOTO, E. Y. Simulink 7.2 – Guia Prático. Editora Érica.

45

Você também pode gostar