Você está na página 1de 8

Universidade Estadual Paulista “Júlio de Mesquita Filho”

Instituto de Química de Araraquara


Introdução ao Scilab - Prof. Elias.

Visão Geral e Comandos Básicos.


O Scilab é um software gratuito para cálculos numéricos, disponível para download em
<www.scilab.org>. A versão atual é a 6.0.1. Uma descrição mais detalhada das capacidades do
Scilab e de comandos básicos pode ser encontrada no material extra enviado anteriormente.
As quatro operações aritméticas fundamentais podem ser utilizadas diretamente. Para isto,
abra o programa (Iniciar → todos os programas → scilab X.X.X → scilab X.X.X). Aparecerá uma
tela semelhante à exibida abaixo:

Esta tela é o chamado console do Scilab. Todos os comandos (instruções) para o programa
são fornecidos através do “prompt” (-->). Por exemplo, tecle 3 + 4 e pressione Enter.
Além das operações básicas citadas, também há uma série de outras, como “exp”
(exponencial com base e), “log” (logaritmo com base e também), “sqrt” (raiz quadrada), etc... O
argumento do operador é fornecido entre parênteses, p. ex.: log(10). Obviamente há recursos mais
simples no computador para realizar este tipo de cálculo, que podem entretanto ser necessários e
rapidamente incorporados a um cálculo mais complexo dentro do Scilab.
Como pode ser visto no material adicional, o Scilab trata todos os dados na forma de
matrizes, e é nisto que ele se destaca das calculadoras (bem como outros programas equivalentes,
como o Matlab® e o Octave). É possível, dessa forma, solucionar problemas bem mais complexos
com os quais que a grande maioria das calculadoras (mesmo científicas) não consegue lidar ou o
fazem com bastante dificuldade.
ATIVIDADE 1: Primeiramente vamos utilizar a equação de Antoine para descrever um conjunto de
dados experimentais de pressão de vapor. Os dados são apresentados na pág. 505 do livro
“Resolvendo Problemas de Engenharia Química com Software Livre Scilab”, do prof. Wu Hong
Kwong e são os seguintes:
Temperatura (ºC) Pvap (mm Hg)
-36,7 1
-19,6 5
-11,5 10
-2,6 20
7,6 40
15,4 60
26,1 100
42,2 200
60,6 400
80,1 760

Primeiramente vamos fornecer estes valores ao Scilab. Mas, ao invés de meramente digitá-
los, vamos atribui-los a vetores identificados. Assim, escreva no prompt de comandos:
--> T_C = [-36.7 -19.6 -11.5 -2.6 7.6 15.4 26.1 42.2 60.6 80.1];
--> Pv_mmhg = [1 5 10 20 40 60 100 200 400 760];
Observe que o separador de decimal é ponto e não vírgula, que deve haver um espaço entre
os valores e que há um ponto-e-vírgula no final da linha. Este ponto-e-vírgula não é necessário,
apenas evita que o comando fornecido seja exibido na tela.
Agora vamos converter as unidades para o SI. Quanto à temperatura basta somar 273,15:
--> T_K = T_C + 273.15
Não coloque ponto-e-vírgula no final desta linha para verificar o resultado. A pressão requer
um produto, pois 1 mmHg = 1,33322368*10-3 bar. Então:
--> Pv_bar = Pv_mmhg* 1.33322368E-03
Temos quatro vetores, dois de pressões de vapor e dois de temperaturas. Façamos um
gráfico T versus Pv:
--> plot(T_K,Pv_bar,'o')
O comando “plot” traça gráficos em duas dimensões na forma “plot(variável x, variável y,
opções). Assim, a temperatura está no eixo horizontal, a pressão de vapor no eixo vertical e a opção
é para desenhar os pontos com o formato do caractere que está entre os apóstrofos.
Agora vamos usar a equação de Antoine para representar matematicamente os dados.
Buscando por parâmetros na webpage do NIST <webbook.nist.gov>, encontramos para o benzeno:

Observe que há quatro diferentes conjuntos de parâmetros, mas nenhum deles abrange a
faixa de temperaturas experimentais. Vamos avaliar qual deles é o melhor. Para isto, precisamos
fornecer ao Scilab a expressão para cálculo da Pv. Se:
B
log 10 ( PV / bar )=A−
T / K+ C
então:

PV / bar=10
[ A−
B
T / K+C ]
Fornecendo os parâmetros da equação:
-->A = 4.72583; B = 1660.652; C = -1.461;
Observe que é possível entrar todos os valores numa mesma linha. Vamos agora fornecer a
equação:
-->Pv_calc = 10^(A – B/(T_K +C))
Não coloque ponto-e-vírgula no final para observar o resultado numérico. Podemos também
comparar graficamente:
-->plot(T_K,Pv_bar,'o',T_K,Pv_calc,'*')
O gráfico está na figura a seguir. Observe que é um bom conjunto de parâmetros,
provavelmente suficiente para os propósitos desejados.
Mas quão bom é esse conjunto de parâmetros? Podemos calcular a soma das diferenças
absolutas:
-->sum(abs(Pv_bar – Pv_calc))
E calcular o erro médio:
-->mean(abs(Pv_bar – Pv_calc))
O erro médio é menor que 1%. Em casa, refaça este exercício com os outros conjuntos de
parâmetros e verifique qual é o melhor.
Opcional: o que fazer se os parâmetros não representam bem os dados experimentais?
Vamos supor agora uma situação em que não há um bom conjunto de parâmetros. Para isto,
sejam os parâmetros:
--> A = 4.6543; B = 1435.264; C=-64.848;
São parâmetros da água. Refazendo o exercício, observamos os seguinte:
Um resultado claramente ruim. Há estratégias de otimização no Scilab, possibilitando a
obtenção de parâmetros melhores. Veja, por exemplo, o comando “datafit”. Aqui usaremos uma
estratégia menos eficiente, porém mais didática.
Primeiramente definimos uma função para cálculo da pressão de vapor com base na equação
de Antoine:
-->function p=pm(b, T_K)
-->p = 10.^(b(1) - b(2)./(b(3)+T_K))
-->endfunction

Observe que os parâmetros são fornecidos como b(n). O método de ajuste desses
parâmetros é iterativo e precisa de um “chute” inicial, que no caso serão os parâmetros já
disponíveis:
--> b0 = [4.6543 1435.264 -64.848];
Agora vamos estabelecer uma outra função para calcular a diferença entre pressões
experimentais e calculadas pelo modelo. Vamos chamá-la de função custo:
-->function Cost=f(b)
-->Cost = sum((Pv_bar - pm(b,T_K)).^2);
-->endfunction

Feitas essas definições, podemos agora executar um comando de ajuste dos parâmetros,
tentando minimizar a diferença entre valores experimentais e calculados. O comando é o “leastsq”,
abreviação de least squares, ou quadrados mínimos:
-->[Cost, b] = leastsq(f, b0')
Não deixe de acrescentar o apóstrofo depois de b0. Em seguida, verificamos visualmente o
resultado:
-->plot(T_K,Pv_bar,’o’,T_K,p,”*”)
ATIVIDADE 2: Vamos tratar um outro problema que já começamos a ver em sala de aula: o estudo
do fator de compressibilidade de um gás. O problema está descrito na pág. 193 (Exemplo 8.1) do
livro “Resolvendo Problemas de Engenharia Química com Software Livre Scilab”, do prof. Wu
Hong Kwong. Segue o enunciado:
“Vamos considerar o caso em que são conhecidas a pressão, P = 56 atm, e a temperatura de
operação, T = 450 K, da amônia na fase gasosa, e deseja-se calcular seu volume molar. Como a
pressão é elevada, o cálculo do volume molar não pode ser feito aplicando-se simplesmente a lei
dos gases ideais, e uma solução é utilizar a equação de van der Waals. Os valores as propriedades
críticas da amônia (Apêndice B de Smith e Van Ness) e da constante dos gases são:
TC = 405,5 K
PC = 111,3 atm
R = 0,08206 atm.litro/gmol.K
A equação de van der Waals é:

( )
P+
a
V2
⋅(V −b)=R⋅T

com:

( )
2 2
27 R ⋅T C
a= ⋅
64 PC
R⋅T C
b=
8⋅PC
A equação de van der Waals não permite a solução explícita em termos de V. O que se faz,
então, é reescrevê-la na forma f(P,V,T) = 0 e depois utilizar alguma técnica que permita obter
valores de V para os quais a igualdade se verifica. Assim:

( )
P+
a
V2
⋅(V −b)−R⋅T =0
Agora precisamos transportar essa equação para o Scilab. Isso pode ser feito diretamente no
console, mas é mais produtivo escrever um conjunto de comandos que possa ser gravado para
reutilização posterior. O Scilab dispõe de um editor simples de textos, o Scinotes. Abra-o clicando
no primeiro botão da barra de ferramentas ou digite scinotes() no prompt de comandos. Deve surgir
a seguinte tela:

No editor de textos digite o código abaixo, com muita atenção para as pontuações utilizadas.
Qualquer vírgula ou ponto trocados resultarão em erro:
// Programa 8.1a
clear
clearglobal
clc

function f=fct(V)
global P T R Tc Pc
a = 27/64*(R^2*Tc^2/Pc);
b = R*Tc/(8*Pc);
f = (P+a/V^2)*(V-b)-R*T;
endfunction

global P T R Tc Pc
P = 56; //atm
T = 450; //K
R = 0.08206; //atm.l/gmol.K
// gas ideal
V_ideal = R*T/P;
// van der Waals
Tc = 405.5; //K
Pc = 111.3; //atm
V0 = 1;
V = fsolve(V0,fct);
disp('Volume Molar')
printf('V ideal = %f l/gmol\n',V_ideal)
printf('V = %f l/gmol\n',V)

Uma vez digitado o código, salve-o em uma pasta adequada e em seguida execute-o
clicando no botão Executar da barra de ferramentas do Scinotes. Você deve obter o resultado
abaixo:

Algumas observações: o código implementado contém a definição de uma função. Funções


são utilizadas quando se deseja executar o mesmo cálculo repetidas vezes, ou quando se deseja
definir uma expressão matemática que requer várias instruções. Também é utilizado o comando
“fsolve” ao final, que “resolve” a equação definida na declaração da função, ou seja, encontra o
valor da variável independente que torna verdadeira a igualdade. O método de resolução da
equação é numérico e iterativo, ou seja, não é uma solução exata (mas bastante precisa) e depende
de uma estimativa inicial para, após algumas iterações, exibir o valor considerado como solução.