Está en la página 1de 46

Termodinámica fuera del equilibrio:

Igualdad de Jarzynski y protocolos de


relajación
Juan Nicolás Salazar Sandino
jn.salazar10@uniandes.edu.co
Director: Ph.D. Gabriel Téllez Acosta.

Monografı́a presentada al
Departamento de Fı́sica
de la
Universidad de los Andes

Una monografı́a presentada en cumplimiento parcial


de los requisitos para el tı́tulo de

Fı́sico

Departmento de Fı́sica, Universidad de Los Andes


Cra 1 No 18A - 12
Bogotá, Colombia
Diciembre de 2019
Resumen
Mi trabajo consistió en entender varias pruebas de una igualdad que relaciona me-
didas fuera del equilibrio del trabajo realizado sobre un sistema mientras se cambia un
parámetro externo, con cambios de energı́a libre, que a su vez se relacionan con estados
de equilibrios (igualdad de Jarzynski). Para verificar este resultado se simularon va-
rias trayectorias de una partı́cula Browniana en un potencial parabólico, cuya dinámica
regı́a una ecuación de Langevin (modelando ası́ que la partı́cula está en contacto térmi-
co con un reservorio de calor a una temperatura dada), mientras se hacı́a en un tiempo
finito un cambio en la rigidez del potencial entre dos valores. Este cambio se realizó
linealmente y mediante un protocolo de relajación llamado ESE por sus siglas en inglés
(Engineered Swift Equilibration), que le permitı́a al sistema estar en equilibrio al final
del proceso de cambio de la rigidez.

Abstract
My work consisted in understanding various proofs of an equality relating nonequi-
librium measurements of work done on a system while changing an external parameter,
to free energy differences, which are related to equilibrium states (Jarzynski equal-
ity). To verify this result I simulated various trajectories of a Brownian particle in a
quadratic potential, whose dynamics was governed by a Langevin equation (modelling
a particle in contact with a heat reservoir at a given temperature), while performing a
change in the stiffness of the potential between two values, in finite time. This change
was done both in a linear manner, and by a protocol called ESE (Engineered Swift
Equilibration) that allowed the system to be in equilibrium with the reservoir at the
end of the switching of the stiffness.

ii
Agradecimientos

En primer lugar agradecer a mi familia. Ellos lo dieron todo por que yo estudiara lo que me
gusta, y cuando el camino se tornaba difı́cil, fueron los que me dieron su apoyo incondicional.

Gracias al profesor Gabriel Téllez, por siempre haber estado dispuesto a responder hasta
las más elementales de mis dudas, y estar abierto a que el proyecto tomara su propio rumbo.
No todos los profesores tienen la disposición que usted tenı́a para responder preguntas. Por
eso, de nuevo, gracias.

Finalmente gracias a mis amigos, en especial a los que me acompañaron desde el principio,
Julián y el enano. No saben, ni sé como escribir porque nunca he sido bueno para hacerlo, lo
mucho que significan para mi. Gracias a Diego, que desde la distancia estuvo presente todo
el tiempo y fue, a fin de cuentas, el que me metió en esto.

iii
Juan Nicolás Salazar Sandino.

Certifico que he leı́do esta tesis, y que, en mi opinión, es adecuada en alcance y calidad como
una tesis para el tı́tulo de Fı́sico.

(Gabriel Téllez Acosta) Director.

iv
Índice general

1 Introducción 1

2 Marco Teórico 3
2.1 Igualdad de Jarzynski . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.1.1 Acercamiento determinista . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1.2 Acercamiento estocástico . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2 Protocolos de relajación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

3 Simulación de una partı́cula Browniana en un potencial parabólico 9


3.1 Comprobación igualdad de Jarzynski . . . . . . . . . . . . . . . . . . . . . . 11
3.2 Análisis del trabajo realizado durante el proceso . . . . . . . . . . . . . . . . 13
3.3 Diferencias con el proceso revertido . . . . . . . . . . . . . . . . . . . . . . . 16
3.4 Protocolo de relajación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

4 Conclusiones 25

A Códigos 27
A.1 Igualdad de Jarzynski . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
A.2 Distribución de trabajo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
A.3 Comparación de la distribución de trabajo en el proceso revertido . . . . . . 30
A.4 ESE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

v
vi
Capı́tulo 1

Introducción

Tal y como lo explica Sekimoto en su artı́culo [Sekimoto, 1998], se podrı́a decir que existen
tres niveles en los cuales se puede describir a los sistemas dinámicos clásicos. Un acercamien-
to es la dinámica hamiltoniana microscópica, donde todos los grados de libertad del sistema
son considerados y por ende la evolución es determinista. Está también el formalismo termo-
dinámico que hace uso de variables macroscópicas, sin embargo no especifica la dinámica del
sistema y este se supone que es controlado de alguna manera por un agente externo. Relacio-
nando estos dos niveles se encuentra la mecánica estadı́stica, pues si se tiene el hamiltoniano
del sistema, sus métodos permiten realizar predicciones de propiedades termodinámicas en
equilibrio.

Ahora bien, las fluctuaciones son muy comunes en bastantes ramas de la ciencia. Se podrı́a
decir que las hay en casi todo sistema que está sujeto a complicadas influencias externas o
internas de las que no se tiene completo conocimiento y por ello, usualmente también se
les denomina ruido. Es aquı́ donde es especialmente útil el nivel intermedio del que habla
Sekimoto, el de la dinámica estocástica, donde se define la dinámica del sistema pero esta
no es determinista, y los agentes externos que se introducen solo controlan parcialmente el
sistema. Una forma de tratar con estas fluctuaciones, las cuales surgen de muchas pequeñas
perturbaciones, y cada una logra cambiar las variables del sistema de una forma imprede-
cible, pero pequeña, es el formalismo de las ecuaciones de Fokker-Planck y de Langevin.
Una ecuación de Langevin es un tipo de ecuación diferencial estocástica, donde justamente
el término que le da el componente aleatorio modela el ruido del que no se tiene completo
conocimiento. En este contexto se renuncia a conocer con exactitud el valor de todas las
variables del sistema en cualquier instante de tiempo, pero se estudian las distribuciones de
probabilidad de los valores que pueden tomar. Es aquı́ donde entra la ecuación de Fokker-
Planck, pues esta modela la evolución en el tiempo de estas distribuciones de probabilidad.

Dado este formalismo surge la pregunta de cómo se puede relacionar con la termodinámi-
ca. De este estudio surge la manera de definir cantidades termodinámicas como el trabajo y
la entropı́a a partir de cada realización de las variables del sistema. Ası́, estas se convierten
en cantidades aleatorias debido al ruido con el que interactúa el sistema. Varias propiedades

1
se han logrado deducir de estas cantidades termodinámicas aleatorias y su relación con las
de termodinámica en equilibrio. Entre estas se encuentran las denominadas relaciones de
fluctuación [Klages et al., 2013] y son de gran importancia porque permiten no asumir algo
que la termodinámica convencional hace siempre, y es que el sistema está en equilibrio. Una
de las más importantes es la que dedujo Christopher Jarzynski en sus artı́culos [Jarzynski,
1997b] y [Jarzynski, 1997a], que relaciona el trabajo realizado sobre un sistema (fuera del
equilibrio), con el cambio en energı́a libre (en equilibrio).

En el siguiente documento se muestran las deducciones teóricas que hizo Jarzynski en


sus publicaciones, y se discute brevemente la importancia de los protocolos de relajación a
la hora de tratar con sistemas fuera del equilibrio. Posteriormente se muestran los resultados
de las varias simulaciones en python en que se verifican los resultados de Jarzynski y se
hace una implementación del protocolo de relajación presentado en [Martı́nez et al., 2016],
ambas para el sistema que consiste de una partı́cula Browniana confinada a un potencial
parabólico.

2
Capı́tulo 2

Marco Teórico

2.1 Igualdad de Jarzynski


Considere un sistema clásico, en contacto térmico con un reservorio de calor a temperatura T ,
que tiene unos parámetros ~γ = (V, B, κ, . . . ) (por ejemplo el volumen en el que está confinado
el sistema, campo magnético, rigidez del potencial en el que está inmerso, entre otros) que
un agente externo puede controlar. Estos afectan su dinámica, pues el hamiltoniano va a
depender del valor que tomen. Si los parámetros del sistema son cambiados infinitamente
despacio, entre dos puntos ~γB y ~γA del espacio de parámetros, de modo que en cada instante
el sistema se encuentra en equilibrio térmico con el reservorio, de termodinámica clásica
tenemos,
W∞ = ∆F = FB − FA . (2.1)
Es decir, el trabajo realizado sobre el sistema (en un tiempo infinito, de ahı́ el subı́ndice) es
igual al cambio en su energı́a libre, y FB , FA son los valores de la energı́a libre del sistema, en
equilibrio. Si por el contrario, los parámetros son cambiados en un tiempo finito τs , el trabajo
realizado dependerá de las condiciones iniciales microscópicas del sistema y del reservorio.
Lo que sı́ se cumplirá es que en promedio el trabajo será mayor que el cambio en la energı́a
libre,
hW i ≥ ∆F, (2.2)
donde Wd := hW i − ∆F , es el trabajo disipado asociado al incremento de entropı́a en un
proceso irreversible. El trabajo de Jarzynski consistió en demostrar la siguiente igualdad,

he−βW i = e−β∆F , (2.3)

donde β = kB1T . Es decir, a partir de una cantidad que nos habla del sistema cuando se
encuentra en equilibrio térmico con el reservorio, se puede obtener información del sistema
cuando está fuera del equilibrio. Note que por desigualdad de Jensen, se obtiene 2.2 a partir
de 2.3. A continuación se presentan las dos demostraciones que hizo Jarzynski de 2.3. Para
esto primero precisamos notación de algunas cantidades utilizadas en ambas demostraciones.
Suponga que se tiene una trayectoria γ(t) en el espacio de parámetros, parametrizada por

3
una sola cantidad λ ∈ [0, 1], mientras se hace el cambio entre A y B durante un tiempo
τs ∈ (0, ∞). Denotamos por ~z = (~q, p~) a los puntos en el espacio de fase del sistema, Hλ (~z)
al hamiltoniano del sistema que depende del valor que tome λ, de modo que,
Z
Zλ = e−βHλ (~z) d~z y, (2.4)

Fλ = −β −1 ln Zλ , (2.5)
son la función de partición canónica y energı́a libre, respectivamente. Finalmente, dada una
trayectoria ~z(t) en el espacio de fase, el trabajo realizado sobre el sistema serı́a,
Z τs
∂Hλ
W = λ̇(t) (~z(t))dt. (2.6)
0 ∂λ

2.1.1 Acercamiento determinista


En primer lugar analizamos la dinámica del sistema cuando no está en contacto con el reser-
vorio. En este caso, la evolución del sistema es descrita por una trayectoria ~z determinista,
la cual, debido a que el sistema evoluciona según las ecuaciones de Hamilton, está completa-
mente determinada por sus condiciones iniciales. Ahora bien, si suponemos que inicialmente
el sistema se encontraba en equilibrio térmico con el reservorio y después se desacopla del
reservorio, y denotamos a la densidad de probabilidad sobre el espacio de fase en el tiempo
t por f (~z, t) (probabilidad de que en el tiempo t el sistema se encuentre en ~z), esta cumple,
1 −βH0 (~z)
f (~z, 0) = e .
Z0
También sabemos que esta evoluciona según la ecuación de Liouville,
∂f
= {Hλ , f } . (2.7)
∂t
Ahora bien, como la evolución es determinista, dado ~z un punto en el espacio de fase y un
tiempo t ∈ [0, τs ], existe una única trayectoria que pasa por ahı́ en el tiempo t. Por esta
razón, se puede definir una función, w(~z, t) := el trabajo realizado a lo largo de la trayectoria
que pasa por ~z en el tiempo t, hasta el tiempo t. Ası́,
Z
−βW
he i = f (~z, τs )e−βw(~z,τs ) d~z, (2.8)

pero para un sistema aislado, el trabajo realizado sobre este es el cambio en su energı́a,
w(~z, t) = Hλ (~z) − H0 (~z0 ),
donde ~z0 es el punto inicial de la trayectoria que pasa por ~z en el tiempo t. Además, por
el teorema de Liouville, la densidad de probabilidad sobre el espacio de fase se conserva a
través del tiempo, es decir,
1 −βH0 (~z0 )
f (~z, t) = f (~z0 , 0) = e .
Z0

4
Luego,
Z Z
−βW −βw(~ 1
he i = f (~z, τs )e z ,τs )
d~z = e−βH0 (~z0 ) e−β(H1 (~z)−H0 (~z0 )) d~z
Z0
Z
1 Z 1
= e−βH1 (~z) d~z = .
Z0 Z0
 
−1 Z1
Note que por la definición de energı́a libre, el cambio en esta es, ∆F = −β ln Z0
, en-
−βW −β∆F
tonces por el cálculo anterior se obtiene la igualdad de Jarzynski, he i=e .

Ahora procedemos a analizar la situación cuando el sistema esta acoplado al reservorio


durante la evolución del parámetro. Para esto se asume que el sistema y el reservorio en
conjunto constituyen un sistema aislado, y definimos notación,

• z~0 = punto en el espacio de fase del reservorio.

• H(z~0 ) = hamiltoniano del reservorio.

• ~y = (~z, z~0 ), punto en el espacio de fase de sistema+reservorio.

• Gλ (~y ) = Hλ (~z) + Hλ (z~0 ) + hi (~z, z~0 ), es el hamiltoniano del sistema grande, donde hi
representa el término de interacción que acopla el sistema de interés con el reservorio.

• Yλ = e−βGλ (~y) d~y , es la función de partición del sistema grande, asumiendo a su vez
R

que este está en equilibrio térmico con un súper reservorio a temperatura T antes de
desacoplarlo.

Asumiendo que el reservorio es muy grande, y el acoplamiento hi muy débil, haciendo uso
del análisis anterior obtenemos la igualdad de Jarzynski,
R −β(H (~z)+H (z~0 )+h (~z,z~0 ))
−βW Y1 e 1 λ i
d~y
he i= =R
Y0 e−β(H0 (~z)+Hλ (z~0 )+hi (~z,z~0 )) d~y
R −βH (~z) R −βH(z~0 )dz~0
e 1
d~z e
=R
e−βH0 (~z) d~z e−βH(z~0 )dz~0
R
R −βH (~z)
e 1
d~z
= R −βH0 (~z)
e d~z
Z1
= = e−β∆F .
Z0
Al terminar este análisis queda la sensación que el resultado depende fuertemente del teorema
de Liouville y de asumir que el acoplamiento entre el reservorio y el sistema es muy débil.
Por esta razón Jarzynski realizó otra demostración en la que no hace uso de estas hipótesis
mediante un análisis estocástico de la situación, la cual presentamos en la siguiente sección.

5
2.1.2 Acercamiento estocástico
Asumimos que la dinámica del sistema de interés es descrita por una trayectoria en el espacio
de fase ~z(t) de naturaleza
 estocástica,
 cuya evolución es markoviana, es decir, ~z(t) está
~0
caracterizada por P ~z, t + ∆t z , t , la probabilidad de encontrar al sistema en el punto ~z
en un tiempo t + ∆t, dado que en el tiempo t se encontraba en el punto z~0 . Con esto, dados
dos puntos ~z y z~0 se define la taza de transición instantánea de ~z a z~0 como,
  

R(~z, z~ , t) := lı́m+
0 P ~z, t + ∆t z~ , t ,
0 (2.9)

∆t→0 ∂∆t

que a su vez se puede escribir como Rλ (~z, z~0 ) pues solo depende del tiempo a través de λ.
Entonces, dada f (~z, t) la densidad de probabilidad dependiente del tiempo, esta evoluciona
según la ecuación maestra,
Z
∂f
(~z, t) = f (z~0 , t)Rλ (~z, z~0 )dz~0 =: R̂λ [f ]. (2.10)
∂t
Finalmente, también suponemos que el sistema cumple,
• Balance detallado: Si λ está fijo, ~z(t) se convierte en un proceso de Markov estacio-
nario, el cual describe la evolución del sistema en contacto térmico con un reservorio
de calor. Durante esa evolución, la distribución canónica deberı́a ser invariante:

R̂λ [e−βHλ (~z) ] = 0. (2.11)

Como inicialmente el sistema está en equilibrio con el reservorio, de nuevo tenemos,


1 −βH0 (~z)
f (~z, 0) = e . (2.12)
Z0
Durante el proceso de cambio, el ensamble en general no estará en equilibrio, es decir,
1 −βHλ (~z)
f (~z, t) 6= e . (2.13)

Qué tan lejos de la distribución canónica se encuentre el sistema, dependerá de qué tan
rápido se haga el cambio del parámetro. Análogo al caso determinista, para cada trayectoria
se puede calcular el trabajo usando la ecuación 3.9. De esta manera, dada una trayectoria
~z(t), definimos el trabajo hecho hasta un t ∈ [0, τs ],
Z t
∂Hλ
w(t) := λ̇ (~z(s))ds, (2.14)
0 ∂λ
de modo que W = w(τs ). Considere todas las trayectorias que pasan por un punto ~z en el
tiempo t y sea Q(~z, t) el valor promedio de e−βw(t) para esas trayectorias. Se define ahora,

g(~z, t) = f (~z, t)Q(~z, t), (2.15)

6
de modo que g(~z, 0) = f (~z, 0) pues w(0) = 0 para todas las trayectorias, y,
Z
−βW
he i = g(~z, τs )d~z. (2.16)

Presentamos el análisis intuitivo de Jarzynski para ver que g satisface la ecuación diferencial,
 
∂g ∂Hλ
= R̂λ − β λ̇ g. (2.17)
∂t ∂t
Supongamos que cada trayectoria del ensamble representa una “partı́cula”que se mueve por
el espacio de fase, con “masa”dependiente del tiempo µ(t) = e−βw(t) . Ası́, Q(~z, t) serı́a la
masa promedio de las partı́culas que pasan por ~z en t, y g(~z, t) representarı́a la densidad de
masa en el espacio de fase. Esta es dependiente del tiempo por dos razones,
1. La masa de las partı́culas cambia con el tiempo,
∂Hλ
µ̇(t) = −β ẇ(t)µ(t) = −β λ̇ (~z(t))µ(t). (2.18)
∂λ

2. La densidad de masa evoluciona de acuerdo al flujo de partı́culas, descrito por la


ecuación maestra 2.10.
Juntando estas dos contribuciones se obtiene 2.17. Note que debido a la condición de balance
detallado, la función g(~z, t) = Z0−1 e−βHλ (~z) es solución de 2.17, luego usando 2.16,
Z
−βW 1 Z1
he i= e−βH1 (~z) d~z = = e−β∆F , (2.19)
Z0 Z0
como se querı́a.

2.2 Protocolos de relajación


Esta sección se dedica a mencionar brevemente la utilidad de los llamados protocolos de
relajación. Como vimos en las demostraciones anteriores, en general el sistema no va a estar
en equilibrio térmico con el reservorio al terminar el proceso de cambio del parámetro, de
modo que este necesita de un tiempo de relajación para ajustarse y llegar al nuevo estado
de equilibrio impuesto por el valor del parámetro al que se llegó. Por ello, es de interés y
objeto de estudio, responder la pregunta de si se puede acortar el tiempo que le tome al
sistema llegar al equilibrio, cambiando la forma en que se evoluciona el parámetro. Diversos
protocolos se han desarrollado para responder estudiar este problema, y entre ellos destaca
el propuesto en [Martı́nez et al., 2016]. Allı́ demuestran que para una partı́cula Browniana
en una trampa óptica (en particular confinada a un potencial parabólico) cuya dinámica rige
una ecuación de Langevin de la forma,
κ(t) √
ẋ = − x + Dξ(t), (2.20)
γ

7
el parámetro κ se puede cambiar de manera que al llegar al valor final deseado, el sistema
ya esté en equilibrio con el reservorio. Suponiendo que el tiempo de cambio del parámetro
es τs y s = τts ,
3γ∆κs(1 − s)/τs
κ(t) = 2 3
+ κ0 + ∆κ(3s2 − 2s3 ), (2.21)
κ0 + ∆κ(3s − 2s )
es el protocolo que logra este hecho. Por su nombre en inglés, Engineered Swift Equili-
bration, se refiere a este como ESE. La idea principal de cómo llegan a este resultado en el
artı́culo es proponiendo que en todo momento la distribución de probabilidad de la posición
es una gaussiana centrada en el origen, con varianza que cambia en el tiempo. Ası́, inser-
tando esta distribución en la ecuación de Fokker-Planck equivalente a la ecuación 2.20, se
obtiene el protocolo ESE. En el capı́tulo 3 se presentan los resultados de la implementación
computacional de este protocolo.

8
Capı́tulo 3

Simulación de una partı́cula


Browniana en un potencial parabólico

En este capı́tulo se muestran los resultados de varias simulaciones realizadas en python, con
las que se comprobaron algunos de los resultados deducidos en el capı́tulo anterior, para
un sistema en especı́fico. El sistema que se simuló fue el de una partı́cula Browniana en un
potencial parabólico que cambia su rigidez con el tiempo, en el lı́mite sobreamortiguado. La
energı́a de la partı́cula de masa m está dada por el hamiltoniano,

p2 1
H(~z) = H(x, p) = + κx2 , (3.1)
2m 2

donde κ es la rigidez del potencial. La dinámica está descrita por la siguiente ecuación de
Langevin [Klages et al., 2013],
κ b
ẋ = − x + ξ(t), (3.2)
γm γ
donde γ es el coeficiente que determina el amortiguamiento, y b es el coeficiente que carac-
teriza las fluctuaciones de modo que, junto con ξ, modela que la partı́cula está en contacto
térmico con un reservorio de calor a temperatura T . Esto se hace explı́cito con la relación
de fluctuación-disipación,
r
2kB T γ
b= , (3.3)
m
donde kB es la constante de Boltzmann. ξ es el denominado ruido blanco, le da el carácter
estocástico a la ecuación, y se caracteriza por hξ(t)i = 0 y hξ(t)ξ(t0 )i = δ(t − t0 ).

Para poder realizar las simulaciones primero fue necesario adimensionalizar la ecuación
y reducir el número de parámetros al mı́nimo. Definiendo t̃ = γt, se obtiene por un lado

dx dx dt̃ dx
ẋ = = =γ ,
dt dt̃ dt dt̃
9
 

y para el ruido blanco, como ξ(t) = ξ γ
, y por propiedades del delta de Dirac,
 
1
0 0
hξ(t)ξ(t )i = δ(t − t ) = δ (t̃ − t ) = γδ(t̃ − t˜0 ) = γhξ(t̃)ξ(t˜0 )i,
˜0 ası́,
γ

ξ(t) = γξ(t̃).
κ
Denotando ω 2 = m
y teniendo en cuenta lo anterior, la ecuación 3.2 se reescribe como,
r
dx ω2 2kB T
γ =− x+ ξ(t̃).
dt̃ γ m
q
m
Ahora definimos x̃ = γ 2kB T
x para hacer la posición adimensional. Con esto se obtiene
para la ecuación de Langevin,
r ! r ! r
d 1 2kB T ω2 1 2kB T 2kB T
γ x̃ =− x̃ + ξ(t̃).
dt̃ γ m γ γ m m

ω2
Definiendo λ := γ2
y simplificando la ecuación anterior se obtiene,

dx̃
= −λx̃ + ξ(t̃). (3.4)
dt̃
Esta será la ecuación que se resolverá numéricamente y λ es el parámetro del que se hablaba
en las secciones anteriores. Como se dijo antes, este se variará en el tiempo entre dos valores
λ0 y λ1 . Note que por como se definió, en esencia esto representa un cambio en la rigidez
del potencial, κ (aunque también puede representar que todos los parámetros usados para
definir λ están cambiando al tiempo de alguna manera).

De acá en adelante no escribimos las variables con ∼, siempre teniendo en cuenta que
son adimensionales. La discretización de la ecuación 3.4 se hizo siguiendo a [Risken, 1989].
Dado τs , el tiempo que durará el cambio del parámetro λ, considere la sucesión de tiempos
igualmente espaciados un intervalo h > 0, t0 = 0, t1 = h, . . . , tm = τs , y denote para todo
0 ≤ n ≤ m, xn := x(tn ). Entonces, dada una posición inicial x0 , y suponiendo que se tiene
la posición xn para un 0 ≤ n ≤ m − 1,

xn+1 = xn − hλ(tn )xn + hwn , (3.5)

donde wn es tomado de una variable aleatoria normal Wn con media cero y varianza 1, y la
familia {Wn }0≤i≤m−1 es independiente. Además, λ(0) = λ0 , λ(τs ) = λ1 , y según sea el caso,
λ(t) será una función lineal entre los dos valores, o seguirá el protocolo ESE del que se habló
en la sección 2.2. Se presentan los resultados para cuatro grupos de simulaciones, y en todos
excepto uno, λ0 = 1 y λ1 = 2.

10
3.1 Comprobación igualdad de Jarzynski
En primer lugar, se quiere comprobar la igualdad de Jarzynski que se dedujo en el capı́tulo
anterior,
he−βW i = e−β∆F , (3.6)
de modo que es necesario saber cómo calcular el trabajo W para cada trayectoria, y el cambio
en la energı́a libre ∆F , en el contexto de la ecuación 3.4. Dados los cambios de variable, el
hamiltoniano de la ecuación 3.1 se reescribe como,
r !2
p2 1 1 2kB T p2
Hλ = + κ x = + λkB T x2 . (3.7)
2m 2 γ m 2m

Como el resultado 3.6 es independiente de cómo se cambie λ en el tiempo, para este caso se
realiza de manera lineal,
λ1 − λ0
λ(t) = λ0 + t, t ∈ [0, τs ]. (3.8)
τs
Ası́, usando la ecuación 2.6 para el trabajo a lo largo de una trayectoria especı́fica ~z(t) =
(p(t), x(t)),
Z τs Z τs
λ1 − λ0 λ 1 − λ 0 τs 2
Z
∂H 2
W = λ̇(t) (~z(t))dt = kB T x (t)dt = x (t)dt. (3.9)
0 ∂λ 0 τs βτs 0

De modo que,
λ1 −λ0 R τs
x2 (t)dt
e−βW = e− τs 0 , (3.10)
y esta cantidad solo depende de los parámetros de la simulación. Ahora calculamos la función
de partición dado un valor de λ,
Z ∞ ! Z ! r
Z ∞
p2 2 2m
Zλ = e−βHλ (~z) d~z = e−β 2m dp e−λx dx = π. (3.11)
−∞ −∞ βλ

Ası́, !
  r
Z λ1 λ0
∆F = −β −1 ln = −β −1 ln , (3.12)
Zλ0 λ1
de modo que, r
λ0
e−β∆F = . (3.13)
λ1
El último paso para poder realizar la simulación es saber la distribución de probabilidad
de la cual escoger la posición inicial. De acuerdo al capı́tulo anterior, se asume que el sis-
tema inicialmente está en equilibrio térmico con el reservorio, de modo que la densidad de
probabilidad sobre el espacio de fase en el tiempo 0 es la canónica,
1 −βHλ (~z)
f0 (~z) = e 0 .
Zλ0

11
Sin embargo, como solo nos interesa saber la distribución de probabilidad de la posición
x, integramos sobre todos los valores de p para obtener la marginal. Teniendo en cuenta el
cálculo en 3.11 para la función de partición obtenemos,
 
R ∞ −β p2 2
Z ∞ −∞
e 2m dp e−λ0 x r
λ0 −λ0 x2
g0 (x) = f0 (~z)dp = q = e . (3.14)
−∞ 2m
π π
βλ0

1
Es decir, en el tiempo 0 la posición se distribuye como una normal con media 0 y varianza 2λ0
.

Para finalmente comprobar la igualdad de Jarzynski se resolvió el esquema numérico 3.5


con τs = 1, h = 0.001, un número N de veces . A cada trayectoria obtenida se le calculó la
exponencial del trabajo 3.10, y al final se calculó el promedio de todos los valores obtenidos
para ver qué tan lejos estaba del valor de la exponencial de la energı́a libre 3.13. Los resultados
de estas simulaciones, incrementando cada vez N , se presentan en las figuras 3.1 y 3.2.

Figura 3.1: Histogramas de los valores obtenidos para e−βW .

De la figura 3.1 resaltamos que a medida que el número de trayectorias simuladas incre-
menta, los histogramas de e−βW se hacen menos ruidosos y se puede apreciar la distribución

12
con mayor claridad. Por otro lado, de la figura 3.2 se obtiene que a medida que el número de
trayectorias incrementa, el error relativo, que cuantifica que tan lejos está he−βW i de e−β∆F ,
se acerca a cero. En otras palabras, se verifica computacionalmente que la deducción teórica
realizada de la igualdad de Jarzynski es correcta.

Figura 3.2: Error relativo entre he−βW i y e−β∆F en función del número de trayectorias simu-
ladas.

3.2 Análisis del trabajo realizado durante el proceso


En esta sección se analizan los resultados de las simulaciones que tenı́an como objetivo estu-
diar la distribución del trabajo realizado sobre el sistema durante el cambio del parámetro,
cambiando el tiempo de evolución y con un número de trayectorias fijo. Se resolvió el es-
quema numérico 3.5 igual que en la sección anterior, pero esta vez se simularon los tiempos
τs = 1, 2, 4, 6, 8 y 10. En todos los casos h = 0.001 y el número de trayectorias siempre fue
100000.

13
Figura 3.3: Histogramas de los valores obtenidos para e−βW .

De la igualdad Jarzynski, cómo se vio anteriormente, por desigualdad de Jensen se ob-


tiene,

hW i ≥ ∆F. (3.15)

Por esta razón es natural preguntarse, qué tan lejos de ∆F se encuentra W . De termodinámi-
ca clásica, para un proceso cuasiestático en el que el sistema está todo el tiempo en equilibrio
térmico con el reservorio de calor pues el proceso se lleva a cabo infinitamente despacio, se
sabe que,

W∞ = ∆F.

Luego, si el tiempo de la simulación se hace cada vez más y más grande, hW i deberı́a
acercarse a ∆F , pues le da oportunidad que en cada instante de tiempo, el sistema se
acerque al equilibrio térmico con el reservorio y el proceso se asemeje a uno cuasiestático.

14
Figura 3.4: Histogramas de los valores obtenidos para βW .

Figura 3.5: Diferencia relativo entre hβW i y β∆F en función del tiempo τs .

15
En la figura 3.4 se pueden observar los histogramas de βW , obtenidos para cada uno
de los tiempos τs . La linea vertical roja representa el valor de β∆F , que en cada caso es
el mismo pues siempre se está haciendo el cambio de parámetro entre λ0 = 1 y λ1 = 2, y
la linea vertical azul es hβW i. Se observa que en todos los casos se cumple la desigualdad
3.15, y que a medida que τs incrementa, hβW i se acerca a ∆F . Esto es más claro en la
gráfica de la relativa, la figura 3.5. Vale la pena indicar que, en todos los casos, el valor más
probable del trabajo según los histogramas es menor a ∆F , sin embargo, lo que hace que la
desigualdad 3.15 se cumpla, es la cola pesada de las distribuciones. No obstante, a medida
que el tiempo de cambio del parámetro incrementa, el máximo de las distribuciones se acerca
a β∆F , igual que hβW i, y se puede apreciar como la varianza de las distribuciones se hace
menor. A futuro serı́a interesante ver, con mayor poder computacional, qué tan rápido estos
histogramas se acercan a un delta de Dirac centrado en β∆F para un valor de h (el salto de
tiempo) menor y mayores tiempos τs .

3.3 Diferencias con el proceso revertido


Hasta ahora el proceso siempre fue cambiar el parámetro de λ0 = 1 a λ = 2. En esta sección
se muestran los resultados para el grupo de simulaciones que tenı́a como objetivo estudiar
cómo se diferencian las distribuciones de trabajo cuando el proceso es de disminución de la
rigidez del potencial, λ0 = 2 y λ1 = 1. Se resolvió una vez más el esquema 3.5 igual que en la
sección 3.1, primero comenzando en λ0 = 1 (llamamos a este compresión), luego en λ0 = 2
(llamamos a este relajación), cada uno para tiempos τs = 1, 2, 4, 6. De nuevo el número de
trayectorias fue de 100000 en todos los casos.

En la figura 3.6 se encuentran los histogramas para todos los τs simulados. Para cada tiem-
po, en un solo recuadro se encuentran los valores del trabajo para la compresión (histograma
azul), y el negativo de los valores para la relajación (histograma verde), pues naturalmente,
el trabajo realizado sobre el sistema cuando se disminuye el parámetro, en este caso que se
hace linealmente, es negativo. Ası́, para poder juntar los histogramas en una sola gráfica, era
necesario sacar el negativo de los valores obtenidos en la relajación. En cada tiempo, para
la compresión se obtuvo la curva azul que aproxima la distribución de probabilidad de βW
y la linea vertical azul que corresponde a hβW i. Para la relajación se hizo lo mismo pero
para la distribución de probabilidad de −βW y para −hβW i. La linea negra representa el
cambio en la energı́a libre cuando λ0 = 1, de modo que el negativo de este valor serı́a el
cambio en la energı́a libre en la relajación. Notemos que, tanto en la compresión como en la
relajación, se cumple la desigualdad 3.15. Sin embargo, tal como la muestra la figura 3.7, el
error relativo cuando el proceso fue de disminuir el parámetro, es menor en todos los tiempos
τs . Esto también se puede apreciar en los histogramas de la figura 3.6, pues la linea vertical
verde siempre se encuentra más cerca a la negra, que la azul de esta. Ası́, se obtiene que en
el proceso de relajación el sistema logra estar a cada instante más cerca al equilibrio que en
el de compresión, pues se encontró que el trabajo disipado hW i − ∆F siempre es menor para
el proceso de relajación.

16
Figura 3.6: Histogramas de los valores obtenidos para βW en la compresión, y de −βW en
la relajación.

De los histogramas también llama la atención que los máximos parecen coincidir en ca-
da caso. Por esa razón se obtuvo la figura 3.8, que corresponde a un acercamiento de los
picos de los histogramas. Ahı́ se observa, excepto para el caso τs = 6, que los bins a los
que se les asigna probabilidad máxima están uno junto al otro, mientras que en τs = 6 son
exactamente el mismo. En la figura 3.9 se compara cómo cambian los máximos (obtenidos
como el punto medio de los bins con probabilidad máxima) en función del tiempo de cambio
del parámetro. Este hecho también vale la pena seguirlo estudiando a futuro, pues parece
ser que el máximo no coincide debido a que los histogramas aun son muy ruidosos. Si se
incrementa el número de trayectorias puede ser que los máximos coincidan independiente
de τs . Esto motiva a encontrar una demostración de que los valores más probables para los
trabajos coinciden. Además, parece ser que a medida que incrementa τs las distribuciones de
los valores del trabajo en el proceso original y el revertido se asemejan cada vez más, hecho
que sugiere seguir estudiando este tipo de procesos en otros escenarios y evaluar si se sigue
observando este fenómeno.

17
Figura 3.7: Diferencia relativa entre el promedio del trabajo y la energı́a libre, para el proceso
de compresión y el de relajación, en función del tiempo de cambio del parámetro.

Figura 3.8: Acercamiento a los picos de los histogramas en la figura 3.6

18
Figura 3.9: Máximo de los histogramas en función de τs .

Finalmente, en [Crooks, 1998] se obtiene que,

P1 (W )
= eβ(W −∆F ) , (3.16)
P2 (−W )

donde P1 (W ) es la probabilidad de que en la compresión se haga un trabajo W y P2 (−W ) es


la probabilidad de que en la relajación se haga un trabajo negativo W . Estas probabilidades
corresponderı́an a las curvas verde y azules de los histogramas en 3.6. De aquı́ se obtiene que
cuando W = ∆F , P1 (W ) = P2 (−W ), de modo que el valor de W donde se intersecan las
curvas azules y verdes, deberı́a ser ∆F . Este hecho se comprueba en la figura 3.10, donde se
hace un acercamiento a la zona donde las curvas se intersecan. En todos los casos, la inter-
sección de las curvas está a una distancia de la linea vertical negra, menor al ancho de los bins.

19
Figura 3.10: Acercamiento a la intersección de las curvas que aproximan a los histogramas,
en la figura 3.6.

3.4 Protocolo de relajación


Finalmente, el último grupo de simulaciones que se realizó fue para comprobar que el pro-
tocolo de relajación ESE presentado en [Martı́nez et al., 2016], efectivamente hace que al
final del proceso de cambio del parámetro el sistema se encuentre en equilibrio térmico con
el reservorio.

De la sección 2.2, el protocolo ESE corresponde a,

3∆λs(1 − s)/τs
λ(t) = 2 3
+ λ0 + ∆λ(3s2 − 2s3 ), (3.17)
λ0 + ∆λ(3s − 2s )

donde s = τts y ∆λ = λ1 − λ0 . Para valores de τs = 0.1, 0.5 y 1, se resolvió el esquema 3.5


usando tanto el protocolo ESE como el lineal, de nuevo con un número de 100000 trayectorias
en cada caso, y calculando para cada una el trabajo realizado. Note que cuando se usaba
ESE no era posible calcular el trabajo usando la fórmula 3.9, pues λ̇ cambia. Debido a la
extensión de 3.17 no se presenta la fórmula explı́cita usada, esta se encuentra en el código
A.

20
(a) τs = 0.1. (b) τs = 0.5.

(c) τs = 1.

Figura 3.11: Gráficas de los protocolos ESE y lineal para cada uno de los τs simulados.

En la figura 3.12 se presentan los histogramas del trabajo realizado, en verde para el
protocolo lineal y en azul para ESE. De nuevo se comprueba la desigualdad 3.15, y para
todos los tiempos, el trabajo promedio realizado durante el protocolo ESE era mayor que en
el lineal, en especial cuando τs = 0.1, donde la diferencia es bastante significativa. Llama la
atención que de nuevo los picos de los histogramas parecen coincidir, de modo que aunque
se cambie el parámetro de manera distinta en el tiempo, el valor más probable de trabajo
realizado es el mismo. Además, es importante notar que en el protocolo ESE, para algunas de
las trayectorias el trabajo fue negativo, aunque el proceso fuera de compresión. Observando
las gráficas de los protocolos presentadas en la figura 3.11, se ve que en principio esto es
posible pues hay un periodo de tiempo en que λ(t) es decreciente, haciendo que su derivada
sea negativa, la cual se usa para calcular el trabajo de cada trayectoria. No obstante estos
eventos que suceden con poca probabilidad, y de nuevo gracias a la cola pesada que presentan
las distribuciones, se sigue cumpliendo la desigualdad 3.15. A futuro serı́a interesante ver
como son los histogramas del trabajo pero con el proceso revertido, y observar sus diferencias
y similitudes como en la sección anterior.

21
(a) (b)

(c)

Figura 3.12: Histogramas de los valores obtenidos para βW .

Por último, guardando todas las posiciones para todas las trayectorias simuladas, se
obtuvieron histogramas 2D 3.13, tal y como se obtienen en [Martı́nez et al., 2016]. Con estos
se puede observar como está distribuida la posición en cada instante de tiempo. Para τs =
0.1 se aprecia como para el protocolo lineal, el sistema se mantiene distribuido casi que igual
a la distribución de posiciones iniciales, es decir, el cambio de parámetro es tan rápido, que
el sistema no tiene chance de equilibrarse con el reservorio. Para los tiempos mayores se
aprecia como, en el caso lineal, la distribución logra cambiar pero no lo suficiente, el cambio
del parámetro sigue siendo muy rápido para el sistema. En la figura 3.14 se grafican los
histogramas de las posiciones de la partı́cula al final, en τs , comparando con las densidades
gaussianas correspondientes a las distribuciones de equilibrio. Se comprueba que para ESE,
en efecto la distribución de posiciones sigue la distribución canónica determinada por λ1 ,
mientras que en el caso lineal el histograma no sigue esta distribución. Incluso, se aprecia
como en el caso de τs = 0.1, en el protocolo lineal la distribución es muy parecida a la inicial.

22
(a) Histograma 2D, protocolo lineal, τs = 0.1. (b) Histograma 2D, protocolo ESE, τs = 0.1.

(c) Histograma 2D, protocolo lineal, τs = 0.5. (d) Histograma 2D, protocolo ESE, τs = 0.5.

(e) Histograma 2D, protocolo lineal, τs = 1. (f) Histograma 2D, protocolo ESE, τs = 1.

Figura 3.13: Histogramas 2D de las posiciones de la partı́cula durante el tiempo de cambio


del parámetro.

23
(a) Distribuciones finales cuando τs = 0.1.

(b) Distribuciones finales cuando τs = 0.5.

(c) Distribuciones finales cuando τs = 1.

Figura 3.14: Distribuciones de las posiciones al final de la simulación, en τs .

24
Capı́tulo 4

Conclusiones

En esta monografı́a se presentaron las deducciones realizadas por Christopher Jarzynski en


sus importantes artı́culos de 1997, donde deduce que para un sistema sobre el que se ejerce
trabajo mediante el cambio de un parámetro λ durante un tiempo finito, mientras este se
encuentra en contacto térmico con un reservorio de calor, se cumple
he−βW i = e−∆F .
Su importancia radica en que se puede hablar de las caracterı́sticas de un sistema fuera del
equilibrio, a partir de propiedades que tendrı́a en equilibrio. También se mencionó breve-
mente la importancia de los protocolos de relajación a la hora de estudiar sistemas fuera del
equilibrio, en especial el propuesto por Martı́nez et al. en su artı́culo del 2016.

Posteriormente se presentaron diversos resultados de simulaciones que tenı́an como obje-


tivo verificar la igualdad de Jarzynski para una partı́cula Browniana confinada a un potencial
parabólico, y estudiar las distribuciones de trabajo obtenidas para diferentes tiempos de evo-
lución. Se encontró que para el proceso revertido, en que se disminuı́a la rigidez del potencial,
los histogramas de trabajo presentaban una varianza menor y su valor esperado se encon-
traba más cerca al cambio de energı́a libre que cuando se hacı́a el proceso de compresión.
Además, de los histogramas obtenidos, se sugiere la idea de estudiar con más detalle por qué
el valor más probable de trabajo en la compresión y la relajación son iguales. Una posibi-
lidad que sugieren los resultados es que a medida que el tiempo de cambio del parámetro
incrementa, las distribuciones del trabajo para la compresión y la relajación se acercan a la
misma. Vale la pena estudiar esto más a fondo e incluso con otros sistemas más complejos,
para ası́ comprobar si se sigue obervando el mismo fenómeno o es especial de la partı́cula
Browniana en un potencial parabólico. El otro resultado teórico verificado fue el deducido
por Crooks en 1998, pues se encontró que el valor para el cual las densidades de probabilidad
del trabajo de la compresión, y el negativo del trabajo de relajación, se intersecaban, era el
cambio en la energı́a libre.

Finalmente se implementó el protocolo ESE y se verificó computacionalmente que, en


efecto, al final del protocolo el sistema se encontraba en equilibrio térmico con el reservorio de

25
calor. También se obtuvieron los histogramas de trabajo y se encontró que para el protocolo
ESE habı́an ocasiones en que incluso el trabajo realizado sobre el sistema era negativo, o
demasiado grande, pero aún ası́ se seguı́a cumpliendo que en promedio el trabajo realizado
era mayor que el cambio en la energı́a libre. También se encontró que aproximadamente, el
trabajo más probable para el protocolo lineal y para ESE eran el mismo. Finalmente, serı́a
interesante ver cómo se diferencian las distribuciones de trabajo en el proceso revertido,
siguiendo el protocolo ESE, igual que como se hizo para el protocolo lineal, y observar si
también a medida que el tiempo incrementa las ditribuciones se asemejan cada vez más.

26
Apéndice A

Códigos

A.1 Igualdad de Jarzynski


Con el siguiente script se realizó la simulación para un tiempo de cambio del parámetro fijo,
cambiando el número de trayectorias, con el objetivo de comprobar si la exponencial del
trabajo se iba acercando a la exponencial del cambio de la energı́a libre. Al final se guardan
los datos obtenidos para poder analizarlos con otro script.
1 import numpy as np
2 import matplotlib.pyplot as plt
3 from scipy.stats import norm
4
5 #Valores inicial y final del parámetro
6 l_0 = 1
7 l_1 = 2
8 #Tiempo de cambio del parámetro
9 ts = 1
10 times = np.linspace(0, ts, ts*1000 + 1)
11 #Número de trayectorias
12 N = [100, 1000, 10000, 100000, 1000000]
13
14 def step(x_b, t):
15 x_n = -times[1]*constant(t)*x_b + np.sqrt(times[1])*np.random.normal(0,1) + x_b
16 return x_n
17
18 def constant(t):
19 return t*l_1/ts + (ts - t)*l_0/ts
20
21 #Condiciones iniciales para cada número de trayectorias a partir de la inversa de la acumulada
22 init_cond = []
23 for i in range(len(N)):
24 init_cond1 = np.random.uniform(0, 1, N[i])
25 init_cond.append(norm.ppf(init_cond1, 0, np.sqrt(1/(2*l_0))))
26
27 #Se obtienen trayectorias y para cada una se calcula la exponencial del trabajo
28 eworks = []
29 for i in range(len(N)):
30 ework = []
31 for k in range(N[i]):
32 x = [init_cond[i][k]]
33 for j in range(1, len(times)):
34 x.append(step(x[j-1], times[j-1]))
35 x = np.array(x)

27
36 integ = np.trapz(x*x, times)
37 ework.append(np.exp((l_0 - l_1)*integ/ts))
38 eworks.append(ework)
39
40 #Se guardan los resultados de la simulación
41 f = open('valores.txt', '+w')
42 for i in range(len(eworks)):
43 for j in range(len(eworks[i])):
44 f.write('{} \n'.format(eworks[i][j]))
45 f.close()

El siguiente script se utilizó para graficar y obtener la información deseada de los datos
obtenidos del anterior.
1 import numpy as np
2 import matplotlib.pyplot as plt
3
4 l_0 = 1
5 l_1 = 2
6 #Valor de la exponencial del cambio de energı́a libre
7 elib = (l_0/l_1)**0.5
8 N = [100, 1000, 10000, 100000, 1000000]
9
10 values = np.genfromtxt('valores.txt')
11 expW = [values[len(values)%10**i:len(values)%10**(i+1)] for i in range(2,7)]
12
13 #Histogramas de la exponencial del trabajo
14 plt.figure(figsize = (20, 14))
15 for i in range(len(N)):
16 plt.subplot(2,3,i+1)
17 _ = plt.hist(expW[i], bins=100, range = (0,1), density = True)
18 plt.title(r'$N = 10^{}$'.format(i+2))
19 plt.savefig('hist_exp_tray.jpg')
20
21 #Gráfica del error relativo
22 plt.figure(figsize = (10,7))
23 plt.scatter(N, [abs((np.mean(expW[i]) - elib)/elib) for i in range(len(N))])
24 plt.xscale('log')
25 plt.ylabel(r'$\left| \frac{\langle e^{-\beta W} \rangle - e^{-\beta \Delta F}}{e^{\Delta F}} \right|$')
26 plt.xlabel('# de trayectorias')
27 plt.savefig('err_porc_exp_tray.jpg')

A.2 Distribución de trabajo


Con el siguiente script se realizó la simulación cambiando el tiempo de evolución del paráme-
tro y manteniendo el número de trayectorias fijo.
1 import numpy as np
2 import matplotlib.pyplot as plt
3 from scipy.stats import norm
4
5 l_0 = 1
6 l_1 = 2
7 #Diferentes tiempos para los que se hará el cambio del parámetro
8 ts = [1, 2, 4, 6, 8, 10]
9 times = []
10 for i in range(len(ts)):
11 times.append(np.linspace(0, ts[i], ts[i]*1000 + 1))
12 #Número de trayectorias

28
13 N = 100000
14
15 def step(x_b, t, index):
16 x_n = -times[0][1]*constant(t, index)*x_b + np.sqrt(times[0][1])*np.random.normal(0,1) + x_b
17 return x_n
18
19 #Función que da el valor del parámetro en un tiempo, dependiendo de index, es decir,
20 #la duración del tiempo del cambio del parámetro
21 def constant(t, index):
22 return t*l_1/ts[index] + (ts[index] - t)*l_0/ts[index]
23
24 #Condiciones iniciales
25 init_cond1 = np.random.uniform(0, 1, N)
26 init_cond = norm.ppf(init_cond1, 0, np.sqrt(1/(2*l_0)))
27
28 #Lista que en la entrada i-ésima contendrá un array que corresponde a los valores de exp(-beta*W) para
29 #cada trayectoria cuando el tiempo de cambio del parámetro es ts[i]
30 eworks = []
31
32 for i in range(len(ts)):
33 ework = []
34 for k in range(N):
35 x = [init_cond[k]]
36 for j in range(1, len(times[i])):
37 x.append(step(x[j-1], times[i][j-1], i))
38 x = np.array(x)
39 int1 = np.trapz(x*x, times[i])
40 ework.append(np.exp((l_0 - l_1)*int1/ts[i]))
41 eworks.append(ework)
42
43 #Se guardan los resultados de la simulación
44 f = open('val1.txt', '+w')
45 for i in range(len(eworks)):
46 for j in range(len(eworks[i])):
47 f.write('{} \n'.format(eworks[i][j]))
48 f.close()

El siguiente script se utilizó para graficar y obtener la información deseada de los datos
obtenidos del anterior.
1 import numpy as np
2 import matplotlib.pyplot as plt
3
4 l_0 = 1
5 l_1 = 2
6 elib = (l_0/l_1)**0.5
7 lib = -np.log(elib)
8 ts = [1, 2, 4, 6, 8, 10]
9 valores = np.genfromtxt('val1.txt')
10
11 exp = [valores[i*100000:(i+1)*100000] for i in range(6)]
12 work = [-np.log(exp[i]) for i in range(6)]
13
14 plt.figure(figsize = (20, 14))
15 for i in range(len(ts)):
16 plt.subplot(2,3,i+1)
17 _ = plt.hist(exp[i], bins=100, range = (0,1), density = True)
18 plt.title(r'$t_s = {}$'.format(ts[i]))
19 plt.savefig('hist_exp_tiemp.jpg')
20
21 plt.figure(figsize = (20, 14))
22 for i in range(len(ts)):
23 plt.subplot(2,3,i+1)

29
24 _ = plt.hist(work[i], bins=100, range = (0,2), density = True)
25 plt.title(r'$t_s = {}$'.format(ts[i]))
26 plt.axvline(x=lib, c = 'r', label = r'$\Delta F$')
27 plt.axvline(x=np.mean(work[i]), label = r'$\langle W \rangle$')
28 plt.legend()
29 plt.savefig('hist_trab_tiemp.jpg')
30
31 plt.figure(figsize = (10,7))
32 plt.scatter(ts, [(np.mean(work[i]) - lib)/lib for i in range(len(ts))])
33 plt.ylabel(r'$\frac{\langle W \rangle - \Delta F}{\Delta F}$')
34 plt.xlabel(r'$t_s$')
35 plt.savefig('err_porc_trab_tiemp.jpg')

A.3 Comparación de la distribución de trabajo en el


proceso revertido
Igual que en la sección anterior, con el siguiente script se realizó la simulación cambiando el
tiempo de evolución del parámetro y manteniendo el número de trayectorias fijo. Solamente
cambia los tiempos que se simulan.
1 import numpy as np
2 import matplotlib.pyplot as plt
3 from scipy.stats import norm
4
5 l_0 = 1
6 l_1 = 2
7
8 ts = [1, 2, 4, 6]
9 times = []
10 for i in range(len(ts)):
11 times.append(np.linspace(0, ts[i], ts[i]*1000 + 1))
12 N = 100000
13
14 def step(x_b, t, index):
15 h = times[0][1]
16 x_n = -times[0][1]*constant(t, index)*x_b + np.sqrt(times[0][1])*np.random.normal(0,1) + x_b
17 return x_n
18
19 def constant(t, index):
20 return t*l_1/ts[index] + (ts[index] - t)*l_0/ts[index]
21
22 init_cond1 = np.random.uniform(0, 1, N)
23 init_cond = norm.ppf(init_cond1, 0, np.sqrt(1/(2*l_0)))
24
25 #Lista que en la entrada i-ésima contendrá un array que corresponde a los valores de exp(-beta*W) para
26 #cada trayectoria cuando el cambio del parámetro es ts[i]
27 eworks = []
28 #Igual que la anterior pero tendra beta*W
29 works = []
30
31 for i in range(len(ts)):
32 ework = []
33 work = []
34 for k in range(N):
35 x = [init_cond[k]]
36 for j in range(1, len(times[i])):
37 x.append(step(x[j-1], times[i][j-1], i))
38 x = np.array(x)
39 int1 = np.trapz(x*x, times[i])

30
40 ework.append(np.exp((l_0 - l_1)*int1/ts[i]))
41 work.append((l_1 - l_0)*int1/ts[i])
42 eworks.append(ework)
43 works.append(work)
44
45 f1 = open('val1new.txt', '+w')
46 for i in range(len(eworks)):
47 for j in range(len(eworks[i])):
48 f1.write('{} \n'.format(eworks[i][j]))
49 f1.close()
50
51 f2 = open('val2new.txt', '+w')
52 for i in range(len(works)):
53 for j in range(len(works[i])):
54 f2.write('{} \n'.format(works[i][j]))
55 f2.close()

Después se utilizó este mismo script con l 0 = 2 y l 1 = 1 para obtener datos del caso en
el que el trabajo es negativo.

El siguiente script se utilizó para graficar y obtener la información deseada de los datos
obtenidos en los anteriores.
1 import numpy as np
2 import matplotlib.pyplot as plt
3 import seaborn as sns
4
5 l_0 = 1
6 l_1 = 2
7 elib = (l_0/l_1)**0.5
8 lib = -np.log(elib)
9
10 ewp = np.genfromtxt('val1new.txt')
11 wp = np.genfromtxt('val2new.txt')
12 ewn = np.genfromtxt('val1new_neg.txt')
13 wn = np.genfromtxt('val2new_neg.txt')
14
15 #Histogramas de los trabajos
16 prom = []
17 plt.figure(figsize = (20, 14))
18 for i in range(len(ts)):
19 plt.subplot(2,2,i+1)
20 _ = plt.hist(wp[i*N:(i+1)*N], bins=100, range = (0,2), density = True, alpha = 0.3, color = 'blue')
21 _ = plt.hist(-wn[i*N:(i+1)*N], bins=100, range = (0,2), density = True, alpha = 0.3, color = 'green')
22 sns.distplot(wp[i*N:(i+1)*N], hist = False, label = 'P(W)', color = 'blue')
23 sns.distplot(-wn[i*N:(i+1)*N], hist = False, label = 'P(-W)', color = 'green')
24 plt.ylim(0, 4)
25 plt.xlim(0, 2)
26 plt.axvline(x=lib, c = 'black', label = r'$\Delta F$')
27 plt.axvline(x=np.mean(wp[i:(i+1)*N]), c = 'blue')
28 plt.axvline(x=-np.mean(wn[i:(i+1)*N]), c = 'green')
29 plt.title(r'$t = {}$'.format(ts[i]))
30 plt.legend()
31 prom.append(np.mean(wp[i:(i+1)*N]))
32 prom.append(-np.mean(wn[i:(i+1)*N]))
33 plt.savefig('hist_trab.jpg')
34
35 #Gráfica de las intersecciones
36 plt.figure(figsize = (20, 14))
37 plt.subplot(2,2,1)
38 m1p = plt.hist(wp[0:N], bins=100, range = (0,2), density = True, alpha = 0.3, color = 'blue')
39 m1n = plt.hist(-wn[0:N], bins=100, range = (0,2), density = True, alpha = 0.3, color = 'green')

31
40 sns.distplot(wp[0:N], hist = False, label = 'P(W)', color = 'blue')
41 sns.distplot(-wn[0:N], hist = False, label = 'P(-W)', color = 'green')
42 plt.ylim(1, 1.4)
43 plt.xlim(0.3, 0.4)
44 plt.axvline(x=lib, c = 'black', label = r'$\Delta F$')
45 plt.title(r'$t = {}$'.format(ts[0]))
46 plt.legend()
47
48 plt.subplot(2,2,2)
49 m2p = plt.hist(wp[N:2*N], bins=100, range = (0,2), density = True, alpha = 0.3, color = 'blue')
50 m2n = plt.hist(-wn[N:2*N], bins=100, range = (0,2), density = True, alpha = 0.3, color = 'green')
51 sns.distplot(wp[N:2*N], hist = False, label = 'P(W)', color = 'blue')
52 sns.distplot(-wn[N:2*N], hist = False, label = 'P(-W)', color = 'green')
53 plt.ylim(1.2, 1.6)
54 plt.xlim(0.3, 0.4)
55 plt.axvline(x=lib, c = 'black', label = r'$\Delta F$')
56 plt.title(r'$t = {}$'.format(ts[1]))
57 plt.legend()
58
59 plt.subplot(2,2,3)
60 m3p = plt.hist(wp[2*N:3*N], bins=100, range = (0,2), density = True, alpha = 0.3, color = 'blue')
61 m3n = plt.hist(-wn[2*N:3*N], bins=100, range = (0,2), density = True, alpha = 0.3, color = 'green')
62 sns.distplot(wp[2*N:3*N], hist = False, label = 'P(W)', color = 'blue')
63 sns.distplot(-wn[2*N:3*N], hist = False, label = 'P(-W)', color = 'green')
64 plt.ylim(1.8, 2.4)
65 plt.xlim(0.3, 0.4)
66 plt.axvline(x=lib, c = 'black', label = r'$\Delta F$')
67 plt.title(r'$t = {}$'.format(ts[2]))
68 plt.legend()
69
70 plt.subplot(2,2,4)
71 m4p = plt.hist(wp[3*N:4*N], bins=100, range = (0,2), density = True, alpha = 0.3, color = 'blue')
72 m4n = plt.hist(-wn[3*N:4*N], bins=100, range = (0,2), density = True, alpha = 0.3, color = 'green')
73 sns.distplot(wp[3*N:4*N], hist = False, label = 'P(W)', color = 'blue')
74 sns.distplot(-wn[3*N:4*N], hist = False, label = 'P(-W)', color = 'green')
75 plt.ylim(2.2, 2.8)
76 plt.xlim(0.3, 0.4)
77 plt.axvline(x=lib, c = 'black', label = r'$\Delta F$')
78 plt.title(r'$t = {}$'.format(ts[3]))
79 plt.legend()
80
81 plt.savefig('inters.jpg')
82
83 #Gráfica de los máximos
84 plt.figure(figsize = (20, 14))
85 plt.subplot(2,2,1)
86 _ = plt.hist(wp[0:N], bins=100, range = (0,2), density = True, alpha = 0.3, color = 'blue')
87 _ = plt.hist(-wn[0:N], bins=100, range = (0,2), density = True, alpha = 0.3, color = 'green')
88 sns.distplot(wp[0:N], hist = False, label = 'P(W)', color = 'blue')
89 sns.distplot(-wn[0:N], hist = False, label = 'P(-W)', color = 'green')
90 plt.ylim(2, 3.5)
91 plt.xlim(0, 0.25)
92 plt.title(r'$t = {}$'.format(ts[0]))
93 plt.legend()
94
95 plt.subplot(2,2,2)
96 _ = plt.hist(wp[N:2*N], bins=100, range = (0,2), density = True, alpha = 0.3, color = 'blue')
97 _ = plt.hist(-wn[N:2*N], bins=100, range = (0,2), density = True, alpha = 0.3, color = 'green')
98 sns.distplot(wp[N:2*N], hist = False, label = 'P(W)', color = 'blue')
99 sns.distplot(-wn[N:2*N], hist = False, label = 'P(-W)', color = 'green')
100 plt.ylim(2, 3.2)
101 plt.xlim(0.1, 0.25)
102 plt.title(r'$t = {}$'.format(ts[1]))
103 plt.legend()
104

32
105 plt.subplot(2,2,3)
106 _ = plt.hist(wp[2*N:3*N], bins=100, range = (0,2), density = True, alpha = 0.3, color = 'blue')
107 _ = plt.hist(-wn[2*N:3*N], bins=100, range = (0,2), density = True, alpha = 0.3, color = 'green')
108 sns.distplot(wp[2*N:3*N], hist = False, label = 'P(W)', color = 'blue')
109 sns.distplot(-wn[2*N:3*N], hist = False, label = 'P(-W)', color = 'green')
110 plt.ylim(2, 3.1)
111 plt.xlim(0.15, 0.3)
112 plt.title(r'$t = {}$'.format(ts[2]))
113 plt.legend()
114
115 plt.subplot(2,2,4)
116 _ = plt.hist(wp[3*N:4*N], bins=100, range = (0,2), density = True, alpha = 0.3, color = 'blue')
117 _ = plt.hist(-wn[3*N:4*N], bins=100, range = (0,2), density = True, alpha = 0.3, color = 'green')
118 sns.distplot(wp[3*N:4*N], hist = False, label = 'P(W)', color = 'blue')
119 sns.distplot(-wn[3*N:4*N], hist = False, label = 'P(-W)', color = 'green')
120 plt.ylim(2, 3.5)
121 plt.xlim(0.15, 0.4)
122 plt.title(r'$t = {}$'.format(ts[3]))
123 plt.legend()
124
125 plt.savefig('maximos.jpg')
126
127 #Gráfica que compara los máximos en el tiempo
128 hist = [m1p, m1n, m2p, m2n, m3p, m3n, m4p, m4n]
129 maxp = [(hist[i*2][1][np.argmax(hist[i*2][0])] + hist[i*2][1][np.argmax(hist[i*2][0]) + 1])/2
130 for i in range(len(hist)//2)]
131 maxn = [(hist[i*2 + 1][1][np.argmax(hist[i*2 + 1][0])] + hist[i*2 + 1][1][np.argmax(hist[i*2 + 1][0]) + 1])/2
132 for i in range(len(hist)//2)]
133 plt.figure(figsize = (10,7))
134 plt.scatter(ts, maxp, label = 'W')
135 plt.scatter(ts, maxn, label = '-W')
136 plt.xlabel('tiempo')
137 plt.ylabel('W')
138 plt.title('Trabajo más probable')
139 plt.legend()
140 plt.savefig('mas_prob.jpg')
141
142 #Gráfica del error relativo
143 err_p = [abs((prom[i*2] + lib)/lib) for i in range(len(prom)//2)]
144 err_n = [abs((prom[i*2 + 1] + lib)/lib) for i in range(len(prom)//2)]
145 plt.figure(figsize = (10,7))
146 plt.scatter(ts, err_p, label = 'W')
147 plt.scatter(ts, err_n, label = '-W')
148 plt.xlabel('tiempo')
149 plt.ylabel('Error relativo')
150 plt.legend()
151 plt.savefig('comp_err_rel.jpg')

A.4 ESE
Con el siguiente script se realizaron las simulaciones para el protocolo ESE. El mostrado
es para el caso en que el tiempo de cambio del protocolo era 0,1, pero con el mismo, solo
cambiando el valor de t s, y modificando el arreglo de tiempos, se obtuvieron todas las
gráficas presentadas en la sección 3.4.
1 import numpy as np
2 import matplotlib.pyplot as plt
3 import matplotlib.colors as col
4 from scipy.stats import norm

33
5
6 l_0 = 1
7 l_1 = 2
8 elib = (l_0/l_1)**0.5
9 lib = -np.log(elib)
10 ts = 0.1
11 times = np.linspace(0, ts, int(ts*10000) + 1)
12 N = 100000
13
14 def step_ESE(x_b, t):
15 x_n = -times[1]*ESE(t)*x_b + np.sqrt(times[1])*np.random.normal(0,1) + x_b
16 return x_n
17
18 def step_lin(x_b, t):
19 x_n = -times[1]*linear(t)*x_b + np.sqrt(times[1])*np.random.normal(0,1) + x_b
20 return x_n
21
22 def ESE(t):
23 s = t/ts
24 d = l_1 - l_0
25 return (3*d*s*(1-s))/(ts*(l_0 + d*(3*s**2 - 2*s**3))) + l_0 + d*(3*s**2 - 2*s**3)
26
27 def d_ESE(t):
28 k = (l_1 - l_0)/(ts**2)
29 g = l_0 + k*(3*t**2 - (2*t**3)/ts)
30 dg = k*(6*t - (6*t**2)/ts)
31 f = t - (t**2)/ts
32 df = 1 - 2*t/ts
33 return 3*k*(df*g - f*dg)/(g**2) + dg
34
35 def linear(t):
36 return t*l_1/ts + (ts - t)*l_0/ts
37
38 ldot = d_ESE(times)
39
40 init_cond1 = np.random.uniform(0, 1, N)
41 init_cond = norm.ppf(init_cond1, 0, np.sqrt(1/(2*l_0)))
42
43 #Gráfica del protocolo ESE comparado con el cambio lineal
44 _=plt.plot(times, ESE(times), label = 'ESE')
45 _=plt.plot(times, linear(times), label = 'Lineal')
46 plt.xlabel('Tiempo')
47 plt.ylabel(r'$\lambda$')
48 plt.legend()
49 plt.savefig('prot_t1.jpg')
50
51 #Simulación
52 ework_ESE = []
53 ework_lin = []
54 work_ESE = []
55 work_lin = []
56 pos_ESE = []
57 pos_lin = []
58 for k in range(N):
59 x_ESE = [init_cond[k]]
60 x_lin = [init_cond[k]]
61 for j in range(1, len(times)):
62 x_ESE.append(step_ESE(x_ESE[j-1], times[j-1]))
63 x_lin.append(step_lin(x_lin[j-1], times[j-1]))
64 x_ESE = np.array(x_ESE)
65 x_lin = np.array(x_lin)
66 int1 = np.trapz(ldot*x_ESE*x_ESE, times)
67 int2 = ((l_1 - l_0)/ts)*np.trapz(x_lin*x_lin, times)
68 ework_ESE.append(np.exp(-int1))
69 ework_lin.append(np.exp(-int2))

34
70 work_ESE.append(int1)
71 work_lin.append(int2)
72 pos_ESE.append(x_ESE)
73 pos_lin.append(x_lin)
74
75 #Histograma de los trabajos
76 plt.figure(figsize = (7,5))
77 _=plt.hist(work_ESE, bins = 100, density = True, alpha = 0.5,
78 range = (-1,10), color = 'blue', label = 'ESE')
79 _=plt.hist(work_lin, bins = 100, density = True, alpha = 0.5,
80 range = (-1,10), color = 'green', label = 'Lineal')
81 plt.axvline(x=lib, c = 'black', label = r'$\Delta F$')
82 plt.axvline(x=np.mean(work_ESE), c = 'blue', label = r'$\langle W \rangle$')
83 plt.axvline(x=np.mean(work_lin), c = 'green', label = r'$\langle W \rangle$')
84 plt.xlabel('W')
85 plt.title(r'$t_s = 1$')
86 plt.xlim(-0.5,3)
87 plt.legend()
88 plt.savefig('comparison_w_t1.jpg')
89
90 #Preparación para los histogramas 2D
91 pos_lin = np.array(pos_lin)
92 pos_ESE = np.array(pos_ESE)
93 pos_ESE_1 = pos_ESE.ravel()
94 pos_lin_1 = pos_lin.ravel()
95 timess = [times[i%len(times)] for i in range(len(times)*N)]
96 left = np.array([-times[1]])
97 right = np.array([times[(len(times)-1)] + times[1]])
98 binsx = np.concatenate((left, times, right), axis = 0)
99 binsy = np.array([-2 + i*0.04 for i in range(101)])
100 N = col.Normalize()
101
102 #Histograma 2D, ESE
103 _=plt.hist2d(timess, pos_ESE_1, bins = [binsx, binsy], cmap=plt.cm.jet, norm = N)
104 plt.xlabel('Tiempo')
105 plt.ylabel('x')
106 plt.title('ESE')
107 cbar = plt.colorbar()
108 cbar.ax.set_ylabel('Conteos')
109 plt.savefig('profile_ESE_t1.jpg')
110
111 #Histograma 2D, lineal
112 _=plt.hist2d(timess, pos_lin_1, bins = [binsx, binsy], cmap=plt.cm.jet, norm = N)
113 plt.xlabel('Tiempo')
114 plt.ylabel('x')
115 plt.title('Lineal')
116 cbar1 = plt.colorbar()
117 cbar1.ax.set_ylabel('Conteos')
118 plt.savefig('profile_lin_t1.jpg')
119
120 #Histogramas de posiciones finales
121 plt.figure(figsize = (13,4))
122 plt.subplot(1,2,1)
123 _=plt.hist(pos_lin[:,len(times)-1], bins = 100, range = (-2.5,2.5), density = True)
124 _=plt.plot(np.linspace(-2,2,1000),
125 np.sqrt(l_1/np.pi)*np.exp(-l_1*np.linspace(-2,2,1000)**2),
126 label = r'$\sqrt{\frac{\lambda_1}{\pi}}\, e^{-\lambda_1x^2}$')
127 _=plt.plot(np.linspace(-2,2,1000),
128 np.sqrt(l_0/np.pi)*np.exp(-l_0*np.linspace(-2,2,1000)**2),
129 label = r'$\sqrt{\frac{\lambda_0}{\pi}}\, e^{-\lambda_0x^2}$')
130 plt.title('Lineal')
131 plt.xlabel(r'$x(t_s)$')
132 plt.legend()
133
134 plt.subplot(1,2,2)

35
135 _=plt.hist(pos_ESE[:,len(times)-1], bins = 100, density = True)
136 _=plt.plot(np.linspace(-2,2,1000),
137 np.sqrt(l_1/np.pi)*np.exp(-l_1*np.linspace(-2,2,1000)**2),
138 label = r'$\sqrt{\frac{\lambda_1}{\pi}}\, e^{-\lambda_1x^2}$')
139 _=plt.plot(np.linspace(-2,2,1000),
140 np.sqrt(l_0/np.pi)*np.exp(-l_0*np.linspace(-2,2,1000)**2),
141 label = r'$\sqrt{\frac{\lambda_0}{\pi}}\, e^{-\lambda_0x^2}$')
142 plt.title('ESE')
143 plt.xlabel(r'$x(t_s)$')
144 plt.legend()
145
146 plt.savefig('final_dist_t1.jpg')

36
Bibliografı́a

[Crooks, 1998] Crooks, G. E. (1998). Nonequilibrium Measurements of Free Energy Diffe-


rences for Microscopically Reversible Markovian Systems. Journal of Statistical Physics,
90(5/6):1481–1487.

[Jarzynski, 1997a] Jarzynski, C. (1997a). Equilibrium free-energy differences from nonequi-


librium measurements: A master-equation approach. Physical Review E, 56(5):5018–5035.

[Jarzynski, 1997b] Jarzynski, C. (1997b). Nonequilibrium Equality for Free Energy Diffe-
rences. Physical Review Letters, 78(14):2690–2693.

[Klages et al., 2013] Klages, R., Just, W., and Jarzynski, C., editors (2013). Nonequilibrium
statistical physics of small systems: fluctuation relations and beyond. Reviews in nonlinear
dynamics and complexity. Wiley-VCH-Verl, Weinheim. OCLC: 835334647.

[Martı́nez et al., 2016] Martı́nez, I. A., Petrosyan, A., Guéry-Odelin, D., Trizac, E., and
Ciliberto, S. (2016). Engineered swift equilibration of a Brownian particle. Nature Physics,
12(9):843–846.

[Risken, 1989] Risken, H. (1989). The Fokker-Planck Equation, volume 18 of Springer Series
in Synergetics. Springer Berlin Heidelberg, Berlin, Heidelberg.

[Sekimoto, 1998] Sekimoto, K. (1998). Langevin Equation and Thermodynamics. Progress


of Theoretical Physics Supplement, 130:17–27.

37

También podría gustarte