Hallemos las constantes de Antoine para el Benceno

Constantes de Antoine para el Benceno
Los datos de presión de vapor del Benceno a diferentes temperaturas estan dadas en la siguiente tabla. Determine las correspondientes constantes de Antoine.
Fuente: cheegineering
La Ecuación de Antoine tiene la forma:
Reordenando la ecuación para realizar una regresión multilineal.
Usando constantes y variables auxiliares.
constantes auxiliares ; ;
y las variables auxiliares ; ; .
Llegamos a esta ecuación que es una ecuación que usaremos para realizar la refresión multilineal.
Algo de teoría para regresiones multilineales
Se puede demostrar que las constantes de cualquier regresión multilineal por mínimos cuadrados pueden hallarse a partir de la siguiente relación matricial:
Donde: : número de variables; : número de datos que se tiene de cada variable.
La simbología para la transpueta de es Nótese que la es un vector fila y es un vector columna, y así para las demás variables
Los vectores anteriormente mencionados se componen de los datos experimentales que se tiene para realizar la regresión, que tenemos a excepción de .
Simplificando la ecuación :
La expresión es mucho más manejable y programable en python.
Para determinar el grado de correlación podemos usar la siguiente fórmula conocida como el coeficiente de determinación que es muy usado para verifcar el grado de ajuste en regresiones multilineales.
Siendo:
: corresponde a logaritmo de cada una de las presiones en nuestros datos
: promedio de los logaritmos de las presiones de los datos
: es el valor que obtenemos al aplicar nuestra fórmula de regresión con los valores y
Programando la solución con python
Codificando con python tenemos:
Para replicar el ejercicio en python puede descargar el archivo de datos del benceno aquí recuerde guardarlo con ‘datos_antoine.csv’ que es el mismo que usamos en el código.
import numpy as np
import csv
import matplotlib.pyplot as plt
P, T = [], []
with open("datos_antoine.csv", "r") as f:
reader = csv.DictReader(f)
for line in reader:
P.append(float(line["P"].replace(",", ".")))
T.append(float(line["T"].replace(",", ".")))
presion = np.array(P)
temp = np.array(T)
y = np.log10(presion)
x1 = 1 / temp
x2 = y * x1
n = len(T)
N = np.ones(n)
M = np.array([N, x1, x2])
b = np.linalg.pinv(M.T) @ y
A = b[0]
C = -b[2]
B = A * C - b[1]
# Resultado 6.867533528904103 832.260320713445 250.84525032625817
print(A, B, C)
data_temp = np.linspace(-60, 80, 100)
data_pres = 10**(A - B / (data_temp + C))
font = {'family': 'serif',
'color': 'xkcd:dark red',
'weight': 'normal',
'size': 12,
}
plt.plot(data_temp, data_pres, "-", label="Regresion",
color='xkcd:dark gray', alpha=0.7, zorder=2)
plt.gca().spines['top'].set_visible(False)
plt.gca().spines['right'].set_visible(False)
plt.scatter(T, P, marker="x", color='red', label="Datos experimentales")
plt.xlabel("Temperatura (°C)", labelpad=10, fontdict=font)
plt.ylabel("Presión (mmHg)", labelpad=10, fontdict=font)
plt.yticks(rotation=45)
plt.title("Curva de presión vs temperatura \npara el Benceno",
fontdict=font, pad=20)
plt.legend(loc=2, fontsize=10)
plt.show()
Las constante de para el benceno son A = 6.8675, B = 832.2603 °C y C = 250.8452 °C
La gráfica correspondiente es: