Buscar

Curso Matlab Ver II

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 27 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 27 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 27 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Universidade Federal de Campina Grande 
Centro de Ciências e Tecnologia 
Unidade Acadêmica de Engenharia Química 
Laboratório de Referência em Controle e Automação 
 
 
 
 
 
 
 
 
 
Uso do MATLAB™ na Resolução de Problemas da 
Engenharia Química 
 
 
 
 
 
Romildo Brito 
 
 
 
 
 
Campina Grande, Setembro de 2011 
 
1. Introdução 
Do ponto de vista da Matemática e de forma generalista, os principais problemas de 
engenharia podem ser agrupados da seguinte forma: 
 Equações (ou sistemas) Algébricas 
o Lineares 
o Não lineares 
 Equações (ou sistemas) Diferenciais 
o Ordinárias 
o Parciais 
 Ajuste de Curvas 
o Lineares 
o Não lineares 
 Otimizações 
o Unidimensionais 
o Multdimensionais 
 
Uma vez equacionado o problema de engenharia, e classificado dentre uma das opções citadas 
acima, o passo seguinte é encontrar a solução. Neste instante surge um "pequeno" problema: a 
solução analítica, na maioria das vezes, não pode ser obtida. Para contornar este problema, 
usamos técnicas numéricas. 
Este curso tem como objetivo auxiliar o futuro engenheiro no uso de técnicas numéricas para 
resolução de problemas de engenharia. Para tanto, usaremos o Matlab como ferramenta de 
trabalho. 
O Matlab é um dos softwares mais usados para resolução de problemas de engenharia, em 
especial a classe de problemas relacionados acima. 
A principal vantagem do Matlab é a sua habilidade em manusear matrizes; até por que foi 
desenvolvido inicialmente para este fim (Matlab – Matrix Laboratory). 
Os programas desenvolvids em Matlab são interpretados, ou seja, ao ser executado, cada linha 
do programa será interpretada, de modo que a velocidade de procesamento deixa a desejar. 
Normalmente, um programa desenvolvido em Matlab só "roda" onde o Matlab estiver instalado. 
Diferentemente do Matlab, no Fortran, um programa desenvolvido é compilado, gerando um 
executável, de modo que pode ser executado em qualquer máquina. É possível compilar 
programas desenvolvidos em Matlab, mas este não é o objetivo principal do aplicativo. 
As rotinas que acompanham o Matlab (básicas e toolboxes) são compiladas, o que significa 
que devemos usar exaustivamente estas funções, a fim de ganharmos tempo. Até por que, não dá 
pra concorrer com programas que foram desenvolvidos por uma equipe especialmente montada 
para este fim. 
A principal intenção do parágrafo acima é enfatizar que o engenheiro deve saber programar, 
entretanto, deve usar as ferramentas prontas (e otimizadas) dos softwares disponíveis. Como isto 
é possível? Tentaremos responder esta questão ao longo do curso. 
O help do Matlba é de fundamental importância. Em nenhum momento, este material deve ser 
considerado um substituto do help; apenas um guia para tornar menos árdua a tarefa de se 
familiarizar com o Matlab. 
É importante salientar que este material foi desenvolvido com auxílio da ferramenta Notebook 
do Matlab, a qual permite que o Matlab e o MS Office trabalhem em conjunto. A setença a ser 
executada pelo Matlab estará na cor verde. O resultado obtido pelo Matlab é apresentado na cor 
azul. 
 
 
2. Operações e Comandos Básicos 
Na janela de comando e em arquivos M-file (a ser definido posteriormente) as operações 
elementares são realizadas da mesma forma que em uma calculadora: 
 
2 + 36/456^2 + sqrt(23)*exp(3) 
 
A expressão sqrt significa raiz quadrada, enquanto exp significa ex. No help do Matlab é 
possível encontrar a definição destas e de outras funções, por exemplo, sin(x), cos(x), etc. 
Também é possível atribuir valores à variáveis: 
 
a = 32; b = a^2 + 36 
 
Da forma como foi escrito, apenas o valor de b será mostrado na tela, visto que depois do 
número 32 foi colocado um “;”. Entretanto, o valor de a está armazenado, o que pode ser 
comprovado através do comando who (ou whos): 
 
c = a + b/3; who 
 
Se desejarmos saber o valor de uma variável devemos digitar esta variável sem o “;” no final. 
 
c 
 
A variável ans contém o resultado (answer) do nosso cálculo inicial: 2 + 36/456^2 + 
sqrt(23)*exp(3) . 
Caso se desejese apagar (deletar) uma variável, usamos o comando clear: 
 
clear all 
whos 
 
Defina um vetor x = -1:0.1:1 e então execute cada um dos seguintes comandos: sqrt(x), cos(x), 
x.^2. 
Execute os seguintes comandos e explique o que acontece: 
x = [2 3 4 5] 
y = -1:1:2 
x.^y 
x.*y 
x./y 
 
 
3. Operações com Matrizes 
Uma das grandes vantagens do Matlab, e foi pra isto que ele foi especialmente desenvolvido, é 
a habilidade de trabalhar com matrizes. Uma matriz é definida da seguinte maneira: 
 
A = [1 2 3; 11 12 13; 21 22 23; 41 52 65] 
 
O Matlab distingue entre letras maiúsculas e minúsculas. Ou seja, a é diferente de A; a, até 
este ponto, é um escalar e A uma matriz. 
E se desejarmos apenas os elementos de duas colunas? Usamos a seguinte sintaxe: 
 
a = A(1:2,1:2) 
 
O argumento “:” significa todas as linhas; o argumento 1:2 significa da coluna 1 até a coluna 
2. Da mesma forma, 
 
b = A(3,:) 
 
Definido uma matriz B: 
 
B = [2 5 7]' 
 
Apesar de B ter sido escrito como um vetor linha (1x3) o ' após o colchete significa que haverá 
uma operação de transposição. Por isto B foi mostrado como sendo um vetor coluna (3x1). O 
objetivo foi aproveitar as duas matrizes para mostrar como o Matlab realiza a multiplicação, visto 
que na multiplicação de matrizes o número de colunas da 1ª matriz deve ser igual ao 
número de linhas da 2ª. 
 
C = A*B 
 
A multiplicação elemento por elemento é realizada usando um “.” antes do “*”. Neste caso, as 
matrizes devem ser iguais. O mesmo procedimento deve ser usado para divisão elemento por 
elemento: 
 
BB = [3; 5; 9; 10] 
 
CC = C.*BB 
 
CC1 = CC./BB 
 
Em se tratando de divisão, no caso de matrizes usamos a inversa. Para achar a matriz proceda 
de uma das seguintes maneiras: 
 
ainv = inv(a) 
 
ainv = a^-1 
 
Lembre que a inversa somente existe para matriz quadrada (número de linhas e colunas 
iguais). 
Defina uma matriz A = [1 5 8; 84 81 7; 12 34 71] e examine o conteúdo de A(1, 1), A(1:2,:) 
A(:,1), A(3,:), A(:,2:3). 
Qual o significado das seguintes linhas de comandos? 
x = 1:1:10 
z = rand(10) 
y = [z; x] 
c = rand(4) 
Defina uma matriz 4x4 e use o comando sum para determinar a soma da 1ª coluna e da 2ª 
linha. 
 
 
4. Entrada e Saída 
Para que o Matlab mostre uma mensagem na janela de comando, usamos o comando disp da 
seguinte maneira: 
 
disp(' Este é o 1º exemplo de como mostrar uma mensagem na tela' ) 
 
Se desejarmos "entrar" com um valor e assossiar este valor à uma variável, proceda da 
seguinte forma: 
 
x0 = input('Entre com o valor da estimativa inicial = ') 
 
O valor digitado na janela de comando será atribuído à variavel x0. 
Um dos comandos usados para mostrar o resultado de um cálculo é o fprintf. 
 
a = 25; b = 3.56; c = a/2+b^(1/3) 
 
fprintf('O valor de c = %10.5f', c) 
 
A sintaxe %10.5f significa que a variável c será mostrada com no mínimo 10 dígitos, sendo 5 
após o ponto decimal. 
 
 
5. Gráficos: 2-D e 3-D 
Para plotar gráficos em 2 dimensões podemos usar o comando plot. Definamos um vetor x: 
 
x = [1:0.5:10]; % Vetor x, cujos elementos variam de 1 a 10, em intervalo de 
0.5. 
 
Na linha de comando anterior aparece um símbolo de %, o que significa que depois do “;” 
tudo é comentário. Ou seja, não será interpretado pelo Matlab. 
 
x 
 
Definamos agora o vetor y (de mesmo tamanho que x), 
 
y = x.^2 + 2.*x – 23.8 
 
Observe que y foi definido elemnto por elemento (usando o “.” antes da multiplicação). Ográfico de y versus x pode ser assim construído: 
 
plot(x, y, 'ro') 
 
A aparência do gráfico pode ser melhorada usando os seguintes comandos: 
 
plot(x,y,'ro-'); xlabel('x-axis'); ylabel('y-axis'); grid; title('1º 
Gráfico'); 
 
O argumento 'ro-' da função plot define a cor e a forma da curva. As funções seguintes são 
usadas para definir os títulos dos eixos e da figura. A função grid inclui linhas de grid na figura. 
Também é possível plotar gráficos de funções pré-definidas, conforme será apresentado em 
seguida. 
Defina um vetor x = -1:0.1:1 e então execute cada um dos seguintes comandos: plot(x, cos(x)); 
plot(x, cos(x.^4)). 
Para o mesmo vetor x, construir o gráfico de )cos(21 xxy  e )sin(22 xxy  na mesma figura. 
Rotular os eixos. 
Para gráficos em 3 dimensões, a construçõ pode ser realizadas de várias maneiras: superfície, 
linha de contorno, etc. A seguir, apresentaremos como construir uma superfície, juntamente com 
as linhas de contorno. Será usada como exemplo a função de 
Rosenbrok: 222 )1()(100),( xyxyxf  . 
Usando o comando meshgrid e definindo o intervalo de x e y, formamos uma matriz: 
 
[x y] = meshgrid(-3:0.1:3) 
 
Após escrever a função, f = 100*(x.^2-2).^2 + (1-x).^2, o seu valor em cada ponto da matriz é 
calculado. 
O passo seguinte é usar o comando mesh para construir o gráfico: 
 
mesh(x, y, f) 
 
O uso do comando meshc incluirá as linhas de contorno. 
 
 
6. Comandos de Repetição e de Condição – Programação 
Embora exista inúmeras alternativas para desenvolvimento de um programa, qualquer uma 
pode ser elaborada usando os seguintes comandos: for, while e if. 
O comando for deve ser usado para situações onde o número de repetições está definido. Por 
exemplo, para calcular a soma dos n termos da série ...
11
7
8
5
5
3
2
1 S 
 
n = 5 % Defining n = 5 
 
num(1) = 1; den(1) = 2; term(1) = num(1)/den(1); 
 
for i = 2:n 
 num(i) = num(i-1) + 2; 
 den(i) = den(i-1) + 3; 
 term(i) = num(i)/den(i); 
end 
 
S =sum(term); 
 
fprintf('Sum of the %3.0f elemments = %6.4f\n', n, S) 
 
O comando sum calcula a soma dos elementos do vetor term. 
O comando while deve ser usado quando o número de repetições não é conhecido; mas uma 
condição deve ser estabelecida. Por exemplo, quantos termos serão necessários até a soma da 
série anterior ser maior do que 4? 
 
i = 1; Somadese = 4; 
num(i) = 1; den(i) = 2; term(i) = num(i)/den(i); 
Soma = term(i); 
while Soma <= Somadese 
 i = i + 1; 
 num(i) = num(i-1) + 2; 
 den(i) = den(i-1) + 3; 
 term(i) = num(i)/den(i); 
 Soma = Soma + term(i); 
end 
 
fprintf('A soma dos %3.0f primeiros termos = %10.5f\n', i, Soma) 
 
fprintf('\nSão necessários %2.0f termos para que a soma seja maior do que 
%3.0f', i, Somadese) 
 
O comando if deve ser usado para satisfazer alguma condição. O exemplo abaixo demonstra o 
uso deste comando. 
 
i = 1; Somadese = 4; 
num(i) = 1; den(i) = 2; term(i) = num(i)/den(i); 
Soma = term(i); 
while i <= 100 
 i = i + 1; 
 num(i) = num(i-1) + 2; 
 den(i) = den(i-1) + 3; 
 term(i) = num(i)/den(i); 
 Soma = Soma + term(i); 
 if Soma > Somadese 
break 
 end 
end 
 
fprintf('A soma dos %3.0f primeiros termos = %10.5f\n', i, Soma) 
 
fprintf('\nSão necessários %2.0f termos para que a soma seja maior do que 
%3.0f', i, Somadese) 
 
Assim como o Matlab, tente interpretar o programa linha por linha. 
Dada uma matriz A de dimensão 4x5, usar o comando for para encontrar a soma de cada 
coluna. 
Um procedimento recursivo para determinar a raíz de equações da forma 012  xx é 
,...2,1,0 onde 111 


 rxx rr
Partindo de uma estimativa inicial 20 x usar o comando while 
para determinar uma das raízes da equação de 2º grau. 
Repetir o problema anterior usando um for e um if. 
 
 
7. Arquivos M-file e Function 
Os cálculos realizados na janela de comando são voláteis, ou seja, uma vez que o Matlab seja 
encerrado, tudo que foi realizado será perdido (pode usar ainda a janela history para recuperar o 
que foi digitado). Para contornar este inconveniente, usamos um arquivo do tipo M-file, o qual 
pode ser gravado e armazenado. Por exemplo, para armazenar o programa principal ou modelo 
do seu problema. 
Uma vez gravado, um arquivo M-file pode ser chamado da janela de comando ou por outro 
arquivo M-file. A figura abaixo mostra o conteúdo de um M-file com nome Sum_Serie_I.m. A 
extensão deverá ser sempre .m e o nome do arquivo não pode conter espaço. 
 
Para executar um M-file, na janela de comando digite o nome do aquivo. 
É importante salientar, que ao "chamar" um M-file, este esteja localizado no diretório de 
trabalho do Matlab. 
Escrever um arquivo M-file com objetivo de calcular a soma e a multiplicação de duas 
matrizes quadradas. Use comentários explicar cada passo e use funções de entrada e saída. 
Repetir os exercícios do item anterior usando um M-file. 
Uma function (definida pelo usuário) é um M-file com uma característica especial: o nome do 
arquivo M-file é sempre igual ao nome da function. O uso de function é mais bem explicado com 
um exemplo, o que será realizado nos próximos itens. 
 
 
8. Solução de Equações Não Lineares 
No Matlab, a localização de raízes de funções não lineares pode ser realizada através do 
comando fzero. Considere a função: 
 
102)( 2  xxxf 
 
Existem duas maneiras de definir a função: usando uma função anônima e usando um M-file. 
Usando uma função anônima, inicie definindo a função: 
 
f = @(x) x.^3 + 3.6*x.^2 – 36.4; 
 
Observe que para elevar o x à potência (2 e 3) foi usado um . antes, pois se x for um vetor (e 
será logo em seguida) cada elemento será elevado à potência individualemnte. Definido a função 
desta maneira, como uma função anônima, evita-se a necessidade de escrever um M-file. 
Em seguida, use o comando fzero: 
 
sol = fzero(f, 1) 
 
 
Os argumentos da função fzero são a função (f) cuja raiz se deseja encontrar e a estimativa 
inciail (1). Para encontrar a raiz, a função fzero usa uma combinação do Método da Secante com 
o Método da Bissecção. 
Para plotar o grafico de f, proceda da seguinte forma: 
 
x = -50:5:50; 
 
plot(x, f(x), 'r.-'); xlabel('x'), ylabel('y'); title('Exemplo 
I'); grid; 
 
A função f pode ser dependente de um parâmetro externo, por exemplo, a: 
 
for i = 1:5 
if i >= 3 
a = i^2; 
else 
a = i; 
 end 
f = @(x) a*x^3 + 3.6*x.^2 – 36.4; 
sols = fzero(f, 1) 
end 
 
Conforme descrito anteriormente, o comando for é usado para situações onde se necessita de 
repetir alguma ação n (conhecido) vezes. 
Observe que a função fzero encontra apenas uma raiz da função; geralmente, a raiz que está 
mais próxima da estimativa inicial. Entretanto, a função é um polinômio de 3º grau, o que 
significa que existem três raízes (reais e/ou complexas). A função roots determina de uma única 
vez todas as raízes de um dado polinômio. Primeiro definimos um vetor P contendo os 
coeficientes do polinômio inicial; em seguida, chamamos a função roots. 
 
P = [1 3.6 0 -36.4]; 
 
raizes = roots(P) 
 
Para a maioria dos casos na engenharia, a função que se deseja encontrar o zero é resultande 
de uma sequência de procedimentos. Por exemplo, considere o problema de calcular o ponto de 
bolha de uma solução líquida (comportamento ideal), sendo dadas a pressão e a composição da 
fase líquida. A figura a seguir apresenta os três arquivos M-file usados para resolver o problema: 
Bubl_Point, Parameters_II e Summy. 
 
 
 
O arquivo Bubl_Point é o programa principal; aquele responsável por gerenciar a chamada dos 
outros arquivos, pela entrada de dados e pela saída de resultados.O arquivo Parameters_II contém dados que são constantes durante a execução, no caso, as 
constantes da Equação de Anoine e a pressão do sistema. Onde for digitado o nome deste arquivo 
(Parameters_II), as informações nele contidas estarão disponíveis a partir daquele ponto. 
O arquivo Summy é uma function, a qual é responsável por realizar o cálculo da pressão a 
partir de uma estimativa de temperatura e comparar com a pressão do sistema. 
A função fzero é usada para encontrar o valor exato da temperatura que satisfaça a function 
Summy, ou seja, 0f . 
Na janela de comando digite Bubl_Point para obter o resultado desejado. 
 
Bubl_Point 
 
É fundamental enfatizar o uso de funções embutidas do Matlab, como é o caso de fzero, pois 
são funções compiladas e otimizadas. 
No caso de sistemas, a solução é obtida usando o comando fsolve, o qual usa o Método de 
Newton-Rhapson. Considere o sistema de equações a seguir: 
 
2
1
21
21
2
2
x
x
exx
exx




 
 
Inicialmente, crie um M-file, conforme mostra a figura a seguir. 
Observe que as duas funções foram definidas de modo que o lado direito foi igualdado a zero 
e escritas como elementos de um vetor f. 
Em seguida, na janela de comando, defina o vetor com as estimativas iniciais. 
 
x0 = [-5 -5]; 
 
Em seguida, chame a função fsolve. 
 
 
 
[x] = fsolve(@Myfunc,x0) 
 
É possível definir o que se pretende que seja mostrado ao chamar a função fsolve usando um 
conjunto de opções. 
 
options = optimset('display', 'iter'); 
 
[x f] = fsolve(@Myfunc,x0,options) 
 
A função fsolve pode ser usada para obter os diagramas y-x e T-xy do probema de equilíbrio 
de fases apresentado anteriormente. 
Na situação anterior, a função fzero foi usada para determinar apenas um ponto dos diagramas 
citados, uma vez que esta função encontra a raiz de uma única equação (apesar de podermos ter 
usado um comando for para repetir os cálculos). 
A figura a seguir mostra três arquivos M-file usados para obter os diagramas. No arquivo 
Equil_Curve (programa principal) um vetor x1 é criado com espaçamento (valor) de 0.05 entre os 
elementos. O vetor Test é criado usando o comando linspace que distribui de forma igualitária os 
elementos entre o intervalo desejado (no caso 80.1 e 110.6). 
 
A function fsolve resolve simultâneamente as 21 equações; uma para cada composição de 
líquido (x1 e x2). 
Para facilitar a visualização, os gráficos são plotados na mesma janela. Para tanto, usamos o 
comando subplot. O primeiro argumento deste comando define o número de linhas; o segundo o 
número de colunas e o terceiro o gráfico que estará sendo plotado em sguida. 
A utilização do comando for deve ser continuamente evitada, pois torna o processamento 
muito mais lento. Ou seja, use abundantemente vetores e matrizes. 
Para executar, na janela de comando digite Equil_Curve. 
A rotina fsolve pode ser usada para resolver o sistema de equações algébricas não lineares, 
resultante dos balanços de massa para a figura mostrada a seguir. 
 
435623256
22563256
CHCHHCHCHCHHC
HCHCHHCCHCHHC


 
1 
Eb 
2 
Wa 
5 
Eb 
3 
Eb 
Wa 
4 
Eb 
Wa 
Sty 
Tol 
Met
Hy 
6 
Met 
Hy 
7 
Tol 
8 
Sty 
9 
Wa 
M R S 
 
 
 
9. Solução de Sistemas de Equações Lineares 
Para resolver um sistema algebrico linear, defina o a matriz dos coeficientes; em seguida 
defina o vetor do lado esquerdo da igualdade. 
 
A = [2 2 -1; 5 2 2; 3 1 1]; b = [1 -4 5]'; 
 
Observe que A e b foram definidos na mesma linha, usando ; para separá-los. No caso do 
vetor b, usou-se um ' apóstrofo para transformar o vetor linha em um vetor coluna (transpor b). A 
solução é encontrada da seguinte forma: 
 
x = A\b 
 
Na resolução, o Matlab usa a eliminação gaussina com pivotamento parcial. 
Considere a sequencia de reatores apresentado na figura a seguir. A partir do balanço de 
massa, o objetivo é determinar é concentração na saída de cada reator. 
 
 
A partir do balanço de massa em cada reator, obtém-se o seguinte sistema de equações algébricas 
lineares: 
2001202040
08090
40020130
321
21
21



ccc
cc
cc
 
 
No Matlab, 
 
A = [130 -20 0; 90 -80 0; -40 -20 120]; b = [400 0 200]'; 
Sol = A\b 
 
 
10. Ajuste de Curvas: Interpolação e Regressão 
Para quem trabalha com experimentos, uma necessidade quase sempre presente é o ajuste de 
dados. Se os dados são precisos o suficiente, usamos a interpolação para correlacionar as 
variaveis, dependente e independente. Caso os dados apresentem ruído, como geralmente é o 
caso, usamos regressão para a correlação. 
Considere os dados da tabela a seguir: temperatura versus capacidade calorífica para um gás. 
Inicialmente, usaremos o Matlab para determinar a melhor curva que interpola os dados. 
 
T -40 -20 10 70 100 120 
Cp 1250 1280 1350 1480 1580 1700 
 
O passo inicial é dispor os dados na forma de vetor. 
 
xexp = [-40 -20 10 70 100 120]'; yexp = [1250 1280 1350 1480 1580 1700]'; 
 
A função interp1 do Matlab interpola dados em uma dimensão. O método padrão da função é 
linear. 
Para se ter uma idéia do método a ser usado, é recomendável plotar o gráfico de x versus y. 
 
plot(xexp, yexp, 'o'); xlabel('Temperatura'); ylabel('Capacidade calorífica'); 
 
 
Usando interpolação linear para determinar o valor de Cp para T = 30: 
 
Cpinterp = interp1(xexp, yexp, 30) 
 
 
Para se ter o gráfico com diversos dados interpolados, criamos um vetor para x: 
 
xinterp = [-40:5:120]; 
 
Em seguida, usamos a rotina interp1. 
 
yinterp = interp1(xexp, yexp, xinterp,'spline'); 
 
plot(xexp, yexp, 'o', xinterp, yinterp, '-') 
 
 
Neste caso, usamos o método spline para realizar a interpolação. O Matlab também realiza 
interpolação em duas e três dimensões (interp2 e interp3). 
Usaremos os mesmos dados para determinar a função que melhor correlaciona a variáveis 
(dependente e independente). 
O procedimento se inicia com a definição do tipo de modelo a ser usado para a regressão; 
usaremos, inicialmente, um modelo linear. 
 
Linmodel = fittype('a*x+b'); 
 
Em seguida, definimos o método a ser usado: 
 
options = fitoptions('Method', 'LinearInterpolant'); 
 
Finalmente, realizamos a regressão e plotamos o gráfico para ter uma idéia do ajuste: 
 
Regr = fit(xexp, yexp, Linmodel, options) 
 
 
plot(xexp, yexp, 'o') 
hold on 
plot(Regr, 'm') 
 
 
Para usarmos um polinômio de grau 2, procedemos da mesma maneira. Observe que no 
exemplo a seguir usamos um método diferente para a regressão. 
 
Nonlmodel = fittype('a*x^2 + b*x + c'); 
options = fitoptions('Method', 'NonlinearLeastSquares'); 
Regr = fit(xexp, yexp, Nonlmodel, options) 
plot(x, y, 'o') 
hold on 
plot(Regr, 'm') 
 
 
O Matlab dispõe de uma toolbox com interface gráfica. Na janela de comando do Matlab, 
digite cftool e uma janela de diálogo se abrirá. Após "carregar os dados", defina o modelo a ser 
usado e proceda com a regressão. Use o help para mais informações. 
O Matlab também realiza regressão multivariável e linear múltipla. O exemplo a seguir 
apresenta uma regressão linear múltipla, usando a função regress. 
Dada a tabela a seguir, o objetivo é encontrar uma função linear que melhor ajuste as 
variáveis (dependente e independentes). 
 
x1 0 0 1 2 0 1 2 2 1 
x2 0 2 2 4 4 6 6 2 1 
y 14 21 11 12 23 23 14 6 11 
 
Inicialmente, tentaremos ajustar os dados a uma função do tipo 21 cxbxay  ; ou seja, o 
Matlab retornará os valores a, b e c. 
 
Iniciamos definindo os vetores x1, 2 e y: 
 
x1 = [0 0 1 2 0 1 2 2 1]'; x2 = [0 2 2 4 4 6 6 2 1]'; y = [14 21 11 12 23 23 
14 6 11]'; 
 
Observe que os três vetorespossuem um ' após o colchete, indicando que foram transpostos. 
Em seguida, colocamos os vetores x1 e x2 em uma matriz X: 
 
X1 = [ones(size(x1)) x1 x2]; 
 
O primeiro termo da matriz X (primeira coluna) é constiuída pelo número 1, de modo a 
formar um sistema algébrico linear. 
Finalmente, usamos a função regress para obter o desejado: 
 
b1 = regress(y, X1) 
 
Desta forma, a equação do tipo 21 cxbxay  que melhor representa o experimento é: 
21 3333.26667.66667.141 xxyajust  . 
Para ajustar considerando a interação entre x1 e x2, proceda da seguinte forma: 
 
X2 = [ones(size(x1)) x1 x2 x1.*x2]; 
 
b2 = regress(y, X2) 
 
Desta forma, a equação do tipo 2121 xdxcxbxay  que melhor representa o experimento 
é: 2121 1111.04444.23333.64074.142 xxxxyajust  . 
 
 
11. Otimização 
A grande maioria dos modelos matemáticos é utilizada para descrever o comportamento de 
fenômenos ou sistemas. Por outro lado, a otimização se preocupa em não apenas resolver o 
problema, mas resolver o problema da melhor maneira possível. 
As técnicas de localização de raízes e otimização estão relacionadas pelo fato de que ambas 
envolvem a estimativa e a busca por pontos de funções. A diferença entre as duas técnicas está 
ilustrada na figura abaixo. A localização de raízes procura por pontos onde a função seja anulada, 
enquanto a otimização envolve a busca por pontos onde a função alcance um valor máximo ou 
mínimo. O ponto ótimo é alcançado quando a função inverte o seu sentido. Em termos 
matemáticos, isto ocorre para o valor de x onde a derivada da função assume valor zero, ou seja, 
0)(' xf ; a segunda derivada, 0)('' xf , indica se o ponto é de máximo ou de mínimo: se 
0)('' xf , o ponto é de máximo; se 0)('' xf , o ponto é de mínimo. 
 
0 1 2 3 4 5 6 7 8 9 10
-2
-1.5
-1
-0.5
0
0.5
1
1.5
2
x
S
in
(x
)
Máximo
Mínimo
Máximo
 
 
O Matlab resolve problemas de otimização em uma ou mais dimensões; com ou sem 
restrições. 
Considere encontrar o mínimo da função 252)( 2  xxxf . No Matlab, 
 
f = @(x) x.^2 + 2*x -25; x = [-10:0.5:10]; 
 
plot(x, f(x)); xlabel('x'); ylabel('y'); axis([-10 10 -40 100]) 
 
Neste exemplo simples, o extremo (mínimo) da função pode ser encontrada derivando a 
função e igualando a zero. Entretanto, o objetivo aqui é demonstrar o uso do Matlab na 
localização de extremos. Observe que o mínimo da função ocorre entr 0 e -2. 
Este é um problema unidimensional e sem restrição; ou seja, a função depende apenas de 
uma única variável (x) e esta variável pode mudar livremente. As funções fminunc e fminsearch 
resolvem problemas unidimensionais e multidimensionais sem restrição. A função fminunc usa 
métodos baseados na derivada das funções. A função fminsearch usa o Método Simplex. 
Usando a função fminunc: 
 
xmin = fminunc(f, 0) 
 
 
Usando a função fminsearch: 
 
xmin = fminsearch(f, 0) 
 
Um problema mais elaborado. A tabela a abaixo apresenta os dados de pressão versus 
composição para o sistema metanol(1)-água(2). O objetivo é determinar os parâmetros da 
equação de Margules que melhor representa os dados, considerando que a mistura segue a Lei de 
Raoult Modificada. 
 
P(kPa) x1 y1 
19.953 0.0 0.0 
39.223 0.1686 0.5714 
42.984 0.2167 0.6268 
48.852 0.3039 0.6943 
52.784 0.3681 0.7345 
56.652 0.4461 0.7742 
60.614 0.5282 0.8085 
63.998 0.6044 0.8383 
67.924 0.6804 0.8733 
70.229 0.7255 0.8922 
72.832 0.7776 0.9141 
84.562 1.0 1.0 
 
A Lei de Raoult Modificada apresenta a seguinte forma: 
 
P
xPsaty iii
1 
 
onde γ representa o coeficiente de atividade da fase líquida. 
Uma das expressões para calcular γ é a equação de Margules 
 
])(2[ln
])(2[ln
2211221
2
12
1122112
2
21
xAAAx
xAAAx




 
 
A pressão de vapor Psat é calculada usando a Equação de Antoine: 
 
TC
BALnPsat
i
i
ii  
onde A, B e C são específicas para componente. 
 
Sabendo que a soma das frações nas fases é igual a 1, obtemos aseguinte equação: 
 
222111  xPsatxPsatPcalc  
Esta equação permite calcular o valor da pressão (Pcalc) a partir dos dados de T e x. 
Entretanto, isto somente é possível se dispusermos das constantes de Antoine e das constantes de 
Margules. Considerando que as constantes de Margules estão disponíveis e visto que a tabela 
anterior disponibiliza dados de P, nós podemos definir a seguinte função: 
 
 
i
PPcalcfobj 2)( 
 
A função representa a diferença para cada experimento, entre o valor experimental (P) e o 
valor teórico (Pcalc). Para diminuir esta diferença, os parâmetros a serem variados são as 
constantes de Margule (A12 e A21). E é isto que as rotinas de otimização fazem; minimizam (ou 
maximizam) uma função. 
A figura a seguir apresenta os arquivos M-file usados para resolver este problema. 
 
 
 
O Matlab possui uma toolbox de otimização com interface gráfica, a qual é ativada digitando 
 
optimtool 
 
Vários tipos de problemas podem ser resolvidos usando esta interface gráfica, incluindo 
problemas com restrições, através da função fmincon. 
 
 
12. Equações Diferenciais Ordinárias 
Apenas relembrando, uma derivada representa a tendência do comportamento de uma 
variável. Desta forma, as equações diferenciais são fundamentais para estudar o comportamento 
dos fenômenos que são dependentes do tempo e/ou do espaço. 
Quando uma variável depende apenas do tempo ou do espaço, temos as Equações 
Diferenciais Ordinárias (EDO); quando depende do tempo e do espaço temos uma Equação 
Diferencial Parcial (EDP). As equações diferenciais que dependem do tempo são usadas para 
descrever modelos transientes. 
O Matlab resolve EDO e EDP; entretanto, neste curso apresentaremos apenas a resolução de 
EDO. Várias funções estão disponíveis para resolução de EDO: ode45, ode23, ode113, ode15s, 
etc. Cada uma destas funções usa um método diferente para integração, e o uso depende do tipo 
de cada problema. Neste curso usaremosa a função ode45, a qual faz uso do Método de Runge-
Kutta. 
Integrar a equação diferencial a seguir, desde t=0 até t=4. 
 
1)0( 5.820122 23  yttt
dt
dy 
 
Esta é uma (muito simples) EDO, pois temos apenas uma variável independente, e será 
resolvida usando a função ode45 do Matlab, conforme descrito a seguir. 
Inicialmente definimos a EDO como uma função anônima (logo em seguida usaremos um 
exemplo com M-file) 
 
dydt = @(t, y) -2*t^3 + 12*t^2 – 20*t + 8.5 
 
 
Observe que a EDO foi definida como sendo função de t e de y, de forma generalizada, apesar de 
y não aparecer do lado direito da igualdade. 
Lembrando que uma EDO precisa de um valor inicial, definimos a seguir o valor da variável 
dependente para t=0 
 
y0 = 1; 
 
Caso tenhamos mais de uma variável dependente (no caso de sistemas de EDO), y0 será um 
vetor. 
Precisamos informar ao Matlab o intervalo da integração 
 
tint = [0 4]; 
 
Finalmente, chamamos a função ode45 
 
[t y] = ode45(dydt, tint, y0); 
 
O lado esquerdo da igualdade armazena dois vetores. O vetor t representa a variável 
independente, enquanto o vetor y armazena os valores correspondentes da variável dependente. 
Entretanto, a forma mais interessante de observar o resultado é através do uso de gráficos. 
 
plot(t, y); xlabel('t'); ylabel('y'); grid on; 
 
Um problema mais elaborado. Considere a figura a seguir, onde temos dois reatores do tipo 
CSTR. 
 
Fin
CAin
V1
K1
V2
K2
F1
CA1
F2
CA2
 
 
O objetivo é determinar o comportamento da concentração na saída do 2º reator, depois um 
distúrbio na concentração na entrada do 1º reator. O modelo matemático do processo é 
representado pelas EDO's a seguir: 
 
222211
2
2
1111
1
1
VKCACAFCAF
dt
dCAVVKCACAFCAF
dt
dCAV inin


 
 
A figura a seguir apresenta os arquivos do tipo M-file usados para resolução deste problema. 
A função ode45 do Matlab novamente foi usada para integração das duas equações diferenciais.

Outros materiais