Created by: roberto.c.alfredo in physics on Aug 5, 2025, 3:02 AM
1. ¿Por qué Maxwell puso un "demonio" en su termómetro? 🤔
En 1871, James Clerk Maxwell retó la intuición de sus colegas: ¿y si un ser microscópico pudiera abrir y cerrar una puerta entre dos cámaras de gas, dejando pasar solo moléculas rápidas a un lado y lentas al otro? Al acumular moléculas energéticas en una cámara, parecería obtenerse un gradiente de temperatura sin aportar trabajo externo, lo cual amenazaba la segunda ley de la termodinámica:
«Es imposible un proceso que solo transfiera calor de un cuerpo frío a uno caliente sin trabajo externo».
Maxwell usó su demonio como experimento mental para mostrar que la segunda ley descansa en supuestos estadísticos y de información, no solo mecánicos.
2. Principio termodinámico y coste de información 📐
- Segunda ley:
$$\Delta S_{total} = \Delta S_{gas} + \Delta S_{demonio} \ge 0$$
- Landauer (1961): borrar 1 bit de información cuesta $$E_{min} = k_B T \ln 2$$ donde \(k_B\) es la constante de Boltzmann. Este es el “precio” que el demonio paga al clasificar moléculas.
3. Modelo en Python: demostrar el dilema 🐍
import numpy as np
import matplotlib.pyplot as plt
# Parámetros
N = 1000 # número de moléculas
T0 = 1.0 # temperatura inicial (unidades)
v_th = 1.0 # umbral velocidad
t_steps = 6000 # pasos de simulación
kB = 1.0 # constante de Boltzmann
E_bit = kB * T0 * np.log(2) # coste por bit
# Estado inicial
vel = np.random.randn(N) * np.sqrt(T0)
side = np.zeros(N, int) # 0 = izq, 1 = der
# Registros
deltaT = []
cost = []
E_acc = 0.0
for t in range(t_steps):
# 1) Demonio clasifica una molécula al azar
i = np.random.randint(N)
if side[i] == 0 and vel[i] > v_th:
side[i] = 1
E_acc += E_bit
elif side[i] == 1 and vel[i] < -v_th:
side[i] = 0
E_acc += E_bit
# 2) Registro de temperaturas (energía cinética media)
KE0 = np.mean(vel[side == 0]**2) / 2
KE1 = np.mean(vel[side == 1]**2) / 2
deltaT.append(KE0 - KE1)
cost.append(E_acc)
# Graficar resultados
plt.figure(figsize=(8,6))
plt.subplot(2,1,1)
plt.plot(deltaT)
plt.title('ΔT = T_izq - T_der vs. Paso')
plt.ylabel('ΔT')
plt.subplot(2,1,2)
plt.plot(cost)
plt.title('Coste acumulado del demonio')
plt.ylabel('Energía')
plt.xlabel('Paso')
plt.tight_layout()
plt.show()