Primeira Lei da Termodinâmica: Resolvendo problemas via integração numérica
Contents
Primeira Lei da Termodinâmica: Resolvendo problemas via integração numérica#
Como percebido nos exemplos anteriores, dependendo da equação de estado utilizada, pode ser necessário a resolução de integrais complicadas. Por este motivo, muitos problemas em termodinâmica são resolvidos por integração numérica dentro do intervalo de valores desejados. A linguagem Python contem uma série de bibliotecas e métodos computacionais que permitem a resolução de uma integral definida numericamente sem previamente resolvê-la manualmente. Este método será ilustrado repetindo o cálculo do trabalho realizado nos Exemplos 3-4, mas desta vez utilizando um método de integração numérica.
Os seguintes módulos precisam ser carregados para resolução dos exercícios:
#bibliotecas necessárias para resolução de exercícios
import numpy as np
from scipy.optimize import curve_fit
from scipy.integrate import quad
from scipy.integrate import simps
from scipy.integrate import trapz
import matplotlib.pyplot as plt
Exemplo 1: Cálculo do trabalho em uma expansão reversível de um gás considerando diferentes equações de estado#
Considere a compressão reverssível de 1,0 mol de um gás ideal, de 22,4 L para 1,0L mantendo T constante a 0ºC. Calcule o trabalho realizado neste processo considerando que o gás obedece a: a) equação de van der Waals, b) a equação do virial, e c) a equação de Redlich-Kowng.
Solução#
O trabalho reversível é o trabalho teórico máximo que o sistema pode realizar. Este trabalho é teórico pois considera que o trabalho é feito em n etapas infinitesimais. O valor do trabalho dependerá do sistema e da equação de estado que descreve este sistema. Por este motivo, em primeiro lugar é preciso encontrar um expressão para o trabalho p-V de um gás ideal. No trabalho reversível podemos considerar que a pressão de oposição se iguala a pressão do sistema, sendo esta calculada pela equação de estado.
A biblioteca SciPy possibilita o uso da função quad, baseada na biblioteca Fortran QUADPACK, para calcular integrais definidas no intervalo de “a” até “b”. Para utilizar esta função é preciso definir a função matemática, segundo a sintaxe do Python, e posteriormente proceder com integração numérica.
Sintaxe a ser usada: resultado, erro = quad(função,valor inicial, valor final)
#a) Trabalho considerando a eq. de van der Waals
# Primeiro definimos a função segundo a sintaxe do Python
#Note que será resolvida a integral de -pdV.
R = 8.314 # m^3 Pa / K mol
a = 0.1380 # m^3 Pa / mol^2
b = 0.0319e-3 # m^3 / mol
V1 = 22.4e-3 # m^3
V2 = 1e-3 # m^3
T = 273 # K
def p(V):
return -(R*T/(V-b) - a/(V**2))
# Integração numérica da função p(V)
Wquad, err = quad(p, V1, V2) # Wqad é o objeto que armazenará o resultado, e o objeto err armazenará o erro da integração numérica
print('Trabalho (J/ mol)= ' + format(Wquad , '6.3f'))
print('erro da integração = ' + format(err, '6.3e'))
Trabalho (J/ mol)= 6995.214
erro da integração = 1.491e-08
Neste caso ocorre uma pequena diferença entre os valores calculados usando o resultado analítico e o método de integração numérica, mas o erro é aceitável.
#b) Trabalho considerando a eq. do virial
# Primeiro definimos a função segundo a sintaxe do Python
B = -22.0e-6 # m**3 / mol
C = 1100e-12 # m**6 / mol**2
def p(V):
return -R*T/V *(1 + B/V + C/V**2)
# Agora é calculado a integral (Wquad), o erro associado a integração numérica (err), da função definida anteriormente
# nos intervalos de V1 a V2
Wquad, err = quad(p, V1, V2)
# Verifique que o resultado é basicamente o mesmo do obtido anteriormente.
print('Trabalho (J/ mol)= ' + format(Wquad , '6.3f'))
print('erro da integração = ' + format(err, '6.3e'))
Trabalho (J/ mol)= 7010.245
erro da integração = 1.700e-08
#c) Trabalho considerando a eq. de Redlich-Kwong
# Primeiro definimos a função segundo a sintaxe do Python
a = 17.16*101.3e-3 # m**6 K^0,5 Pa / mol^2
b = 0.0221e-3 # m**3 / mol
def p(V):
return -(R*T/(V-b) - a/(V*(V+b)*T**0.5))
Wquad, err = quad(p, V1, V2)
print('Trabalho (J/ mol)= ' + format(Wquad , '6.3f'))
print('erro da integração = ' + format(err, '6.3e'))
Trabalho (J/ mol)= 7005.820
erro da integração = 1.699e-08
Os métodos de integração numérica simplificam o resolução de integrais complicadas e podem levar a resultados comparativamente iguais ao do método analítico. Como pode ser observado, não foi preciso integrar analiticamente a função desejada, definir a equação resultante no script e, finalmente, fazer a substituição dos valores nas variáveis da equação. O que levou a uma grande simplificação na resolução do exercício. No entanto, métodos de integração numérica introduzem um erro no resultado da integração e devem ser escolhidos de acordo com o problema matemático a ser resolvido.
Todos os exemplos anteriores que envolvem o polinômio da capacidade calorífica e obtenção do polinômio da capacidade calorífica poderiam ser resolvidos por integração numérica. No entanto, é importante conhecer as duas formas de resolução dos problemas para que seja escolhido o método mais adequado de acordo com o problema abordado.
Sugestão de exercício:#
Resolva os exemplos 8 e 9 do capítulo anterior usando o método de integração numérica e compare os resultados obtidos com a solução analítica do problema.
Exemplo 2: Cálculo do trabalho em uma expansão reversível de um gás a partir de dados experimentais#
Um gás sofre uma expansão de 1,0 L, 5,00 atm e 500 K até o estado final de 0,5 atm, 4,0 L e 108 K. Durante a expansão o seguintes dados p-V foram medidos:
p(atm) |
5,000 |
2,5404 |
1,5713 |
1,0825 |
0,7983 |
0,5000 |
Vm(L/mol) |
1,00 |
1,50 |
2,00 |
2,50 |
3,00 |
4,00 |
Solução#
Assim como no Exemplo 1, o cálculo do trabalho é feito pela resolução da integral
Logo, o trabalho é a área sob a curva do gráfico de p contra V. A biblioteca SciPy possibilita o uso da Regra do Trapézio e da Regra de Simpson para integração numérica sem que haja necessidade do ajuste de uma função polinomial posterior ao cálculo da integral. Para utilizar esta função é preciso definir o intervalo de valores desejados na forma de um vetor, e posteriormente proceder com integração numérica.
Sintaxe a ser usada: resultado = simps(y, x) ou resultado = trapz(y, x)
p = np.array([5,2.5,1.5,1.0,0.8,0.5])*101.3e3 # Pa
Vm = np.array([1,1.5,2,2.5,3,4])*1e-3 #m³/mol
Ws = -simps(p, Vm) # integração usando a regra de Simpson
Wt = -trapz(p, Vm) # integração usando a regra de Trapézio
print('Trabalho calculado pela regra de Simpson (J/mol) = ' + format(Ws, '6.3e'))
print('Trabalho calculado pela regra de Trapézio (J/mol) = ' + format(Wt, '6.3e'))
Trabalho calculado pela regra de Simpson (J/mol) = -4.556e+02
Trabalho calculado pela regra de Trapézio (J/mol) = -4.660e+02
Perceba que os resultados são similares e a resolução do problema se torna muito simples com estas duas metodologias. A escolha do método de integração numérica dependerá dos dados fornecidos pelo problema, pois cada método apresenta prós e contras.