Escolar Documentos
Profissional Documentos
Cultura Documentos
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©
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).
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 =
−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
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
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;
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)
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
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
15
[MATLAB/SIMULINK©: Aplicações na Engenharia Química]
16
CAPÍTULO 2
CAPÍTULO 2
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
Sine Wave
Scope
Figura 2. 5 – Localização do bloco Scope (SimulinkSinks Scope)
1
s
Integrator
Sine Wave
Scope
1
Figura 2. 6 – Localização do bloco Integrator s
(SimulinkContinuous Integrator)
Integrator
18
SIMULINK©
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.
20
SIMULINK©
geramos o gráfico pelo bloco Scope do simulink não se pode
realizar esta configuração, Figura 2.22.
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
2.5
1.5
1
0 0.5 1 1.5 2 2.5 3 3.5 4
variável independente (x)
1.5
22
CAPÍTULO 3
CAPÍTULO 3
SIMULINK©: Bibliotecas e Blocos
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
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)
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
+ I $ % /K − ?0 =
devemos utilizar uma equação de estado alternativa, como break
end
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
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);
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));
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
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)
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
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)
= − exp − %e
C} =
C w‚ •
Editor window
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]
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]
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
= + @•, {% − 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
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:
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
H − /2 + R •0H + H = −R •HS ou
T(6)=293;
% construção da matriz a
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
GILAT, A., SUBRAMANIAM, V. Métodos numéricos para engenheiros e cientistas. Editora Bookman.
45