Memoria (spa) - Universidad de Zaragoza

Anuncio
Trabajo de Fin de Grado de Fı́sica
Cálculo numérico en teorı́a
cuántica de campos de la
materia condensada
Autor:
Jorge Alda Gallo
Directores:
David Zueco Láinez
Isaac Fernando Quijandrı́a Dı́az
Departamento de Fı́sica de la Materia Condensada
Facultad de Ciencias, Universidad de Zaragoza
Junio de 2015
“El cientı́fico no estudia la naturaleza por la utilidad que le pueda reportar;
la estudia por el gozo que le proporciona,
y este gozo se debe a la belleza que hay en ella”
Henri Poincaré
Me gustarı́a agradecer a mi familia por su infinita paciencia y comprensión conmigo, y por
su constante impulso y apoyo para seguir adelante y perseguir nuevas metas. También a mis
amigos y compañeros por no fallarme nunca en los momentos complicados y hacerlos siempre
un poco más fáciles.
Por supuesto, no me puedo olvidar de David y Fernando. Me han abierto la puerta a un
mundo fascinante repleto de nuevos retos, y con su tutela he podido superarlos con éxito. Ellos
han convertido este trabajo en toda una experiencia vital.
Para la elaboración de este trabajo he sido beneficiario de la beca JAE Intro 2014 para la
introducción a la investigación concedida por el CSIC.
i
Índice general
Introducción
1
Objetivos
2
1 Conceptos de mecánica cuántica
1.1. Operador de evolución . . . . .
1.2. Matriz densidad . . . . . . . .
1.3. Entrelazamiento . . . . . . . .
1.4. Espacio de Fock . . . . . . . . .
1.5. Teorı́a cuántica de campos . . .
1.6. El principio variacional . . . . .
.
.
.
.
.
.
3
3
4
5
6
7
7
2 Estados producto de matrices
2.1. Tensores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2. Estados cuánticos como tensores . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3. Utilidad de los estados tensoriales . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
8
9
10
3 Estados producto de matrices continuos
3.1. Paso al continuo . . . . . . . . . . . . . .
3.2. Expresiones para algunas magnitudes . . .
3.3. Dinámica disipativa en el sistema auxiliar
3.4. Extensión a campos acoplados . . . . . . .
.
.
.
.
11
11
12
12
14
4 Metodologı́a
4.1. Algoritmo para un solo campo . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2. Algoritmo para dos campos acoplados . . . . . . . . . . . . . . . . . . . . . . . .
16
16
18
5 Modelos y resultados
5.1. Modelo de Lieb-Liniger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2. Dos campos acoplados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
20
23
Conclusiones
27
Bibliografı́a
28
A Cálculos con cMPS
A.1. Normalización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.2. Funciones de correlación campo-campo . . . . . . . . . . . . . . . . . . . . . . . .
A.3. Funciones de correlación densidad-densidad . . . . . . . . . . . . . . . . . . . . .
30
31
32
33
B Código de los programas
B.1. Modelo Lieb-Liniger en un campo . . . . . . . . . . . . . . . . . . . . . . . . . . .
B.2. Cálculo de funciones de correlación . . . . . . . . . . . . . . . . . . . . . . . . . .
34
34
43
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
ii
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Introducción
La teorı́a cuántica de campos es el lenguaje natural para la descripción de la fı́sica de la
materia condensada. Superfluidez, superconductividad, condensación de Bose-Einstein o lı́quidos
de Fermi son solo algunos de los fenómenos cuya comprensión requiere el uso de campos cuánticos
[1]. El caso de los lı́quidos de Fermi es paradigmático del éxito de la teorı́a de perturbaciones.
Sin embargo, en los sistemas unidimensionales las interacciones se ven reforzadas [2], por lo que
la teorı́a de perturbaciones no es aplicable.
Para ir más allá del régimen perturbativo, se puede emplear la discretización de los campos
y su simulación computacional. La existencia de una distancia mı́nima conlleva el problema de
la introducción de un máximo en las energı́as y momentos. Para elevar este corte (cutoff ) hasta
energı́as suficientemente altas como para que no tengan relevancia fı́sica, hay que disminuir consiguientemente la discretización. Los niveles de discretización necesarios hacen completamente
inviables las perspectivas de una simulación.
Como método alternativo, en el año 2010 Verstraete y Cirac [3] propusieron un estado de
prueba (ansatz ) para el método variacional, el estado de producto de matrices continuo.
Esta solución tiene la ventaja de que necesita muy pocos parámetros para describir los estados
fı́sicamente relevante, lo cual es una clara ventaja a la hora de realizar simulaciones. Además,
otro punto a favor es que su formulación matemática tiene una interpretación fı́sica directa,
como un sistema auxiliar discreto interaccionando con el campo.
El estado de producto de matrices continuo puede ser generalizado para el caso de varios campos que interaccionan entre sı́ [4]. Como se verá, esto permite la reproducción de una transición
de fase fuera del régimen perturbativo con un esfuerzo computacional muy moderado.
La organización de esta memoria es como sigue: tras una exposición de los objetivos del trabajo de fin de grado, se procederá a la revisión de los conceptos de mecánica cuántica estudiados
durante el grado necesarios en la sección 1. En la sección 2 se presentan los estados producto
de matrices, el predecesor para casos discretos de los estados producto de matrices, y con cuyo
estudio se comprenderán las ventajas que ofrecen para la descripción de sistemas fı́sicos. En
la sección 3 se describen los estados producto de matrices continuos y su generalización para
campos acoplados. Una vez conocida toda la teorı́a, en la sección 4 se explican los algoritmos
utilizados para las simulaciones, destacando los problemas encontrados durante su ejecución y
las soluciones adoptadas. Los modelos empleados y los resultados obtenidos mediante las simulaciones se presentan en la sección 5. Finalmente se exponen las conclusiones alcanzadas en la
realización del trabajo y las posibles aplicaciones que ofrece en un futuro.
1
Objetivos
El primer objetivo que debe cumplir el presente trabajo es la comprensión y asimilación de
los fundamentos teóricos en los que se basan las simulaciones que se van a realizar:
Identificación del entrelazamiento cuántico como la magnitud adecuada para caracterizar
los estados fı́sicos.
Revisión bibliográfica de los métodos de simulación basados en el entrelazamiento, las
llamadas redes de tensores, haciendo especial énfasis en los estados producto de matrices.
Estudio de la generalización de estos métodos a campos mediante los estados producto de
matrices continuos. Cálculos, interpretación fı́sica.
Ampliación del formalismo a campos que interaccionan.
Una vez que estén fijados los conceptos esenciales, el objetivo es aprovecharlos para diseñar
y ejecutar simulaciones numéricas con las que obtener nuevos resultados:
Elaboración de un programa para simular un campo cuántico partiendo de los cálculos
vistos en la teorı́a.
Comprobación del código comparando los resultados obtenidos con métodos analı́ticos.
Extensión a dos campos en interacción.
Localización y caracterización de una transición de fase.
2
1
Conceptos de mecánica cuántica
1.1.
Operador de evolución
Uno de los postulados de la mecánica cuántica (el quinto para [5], el segundo para [6])
establece que las funciones de onda evolucionan en el tiempo según la ecuación de Schrödinger.
Esto implica que las funciones de onda en dos tiempos distintos t0 y t1 están relacionadas
mediante una transformación U , que debe ser unitaria para que se conserve la densidad de
probabilidad:
ψ(t1 ) = U (t1 , t0 )ψ(t0 )
U (t1 , t0 )U † (t1 , t0 ) = 1
(1.1)
Además, el operador evolución temporal U debe respetar las operaciones de grupo, ya que la
evolución desde un tiempo t0 hasta t1 seguida de la evolución desde t1 a t2 debe ser equivalente
a la evolución desde t0 hasta t2 .
U (t2 , t0 ) = U (t2 , t1 )U (t1 , t0 )
(1.2)
En concreto, si se realiza una evolución en un tiempo infinitesimal, estará dada por el generador de la transformación, el hamiltoniano H. Esto significa que el operador U debe cumplir
la ecuación diferencial (1.3). La misma ecuación se puede obtener introduciendo (1.1) en la
ecuación de Schrödinger:
∂t U = −iHU
∂t U † = iU † H
(1.3)
La solución general a dicha ecuación diferencial es la siguiente [7]:
U (s, s0 ) = T exp
Z
s
s0
−iH(t)dt ≡
Z
∞
X
(−i)n
n=0
n!
s
s0
···
Z
s
s0
T H(t1 ) · · · H(tn )dt1 · · · dtn
donde T es el operador de ordenación temporal:
A(t)B(t0 ) si t > t0
0
T A(t)B(t ) =
B(t0 )A(t) si t0 > t
(1.4)
(1.5)
La necesidad de la ordenación de los operadores es una consecuencia de que el hamiltoniano
a diferentes tiempos no tiene por qué conmutar, y el orden lo establece la ecuación 1.3 (por
ejemplo, para el operador U † habrı́a que emplear el orden opuesto).
Todo esto se puede generalizar a una evolución no unitaria definida por la siguiente ecuación:
∂s U = U H
(1.6)
La solución a esta ecuación se expresa de nuevo como el desarrollo en serie de la exponencial
del operador hamiltoniano:
U (s0 , s) = P exp
Z
s
s0
Z
Z s
∞
X
1 s
H(t)dt ≡
···
PH(t1 ) · · · H(tn )dt1 · · · dtn
n! s0
s0
(1.7)
n=0
El operador P realiza el orden según el parámetro s. De la ecuación (1.6) se sigue que será el
siguiente:
A(s)B(s0 ) si s < s0
0
PA(s)B(s ) =
(1.8)
B(s0 )A(s) si s0 < s
Emplearemos la imagen de interacción (o de Dirac), que se basa en la separación del hamiltoniano en dos partes, H = H0 + V . H0 representa la evolución libre y V un término de
interacción. El operador evolución en la imagen de interacción se define como
UI (s0 , s) = U (s0 , s)e−H0 (s−s0 )
3
(1.9)
Asumiendo invarianza bajo traslaciones, U (s0 , s) = U (0, s−s0 ), podemos escribir la expresión
anterior como:
UI (0, x) = U (0, x)e−H0 x
(1.10)
Derivando según (1.6):
∂x UI = U (0, x)He−H0 x − U (0, x)H0 e−H0 x = UI (0, x)V
(1.11)
Integrando de nuevo (con la condición de contorno de UI (0, 0) = 1) y operando, podemos
reescribir el operador evolución:
Z x
−H0 x
dsU (0, s)V e−H0 s
(1.12)
UI (0, x) = U (0, x)e
=1+
0
U (0, x) = eH0 x +
x
Z
dsU (0, s)V eH0 (x−s)
(1.13)
0
La solución a esta ecuación integral se puede obtener mediante el método iterativo. Para
ello emplearemos una solución aproximada U (n) y la insertaremos en la expresión (1.13), para
obtener la siguiente aproximación U (n+1) . La solución exacta se obtiene en el lı́mite n → ∞.
Como primera solución, para que sea consistente con el lı́mite en x = 0, se toma U (0) = eH0 x :
Z x
Z x
(0)
H0 (x−s)
H0 x
(1)
H0 x
dseH0 x V eH0 (x−s)
(1.14)
dsU (0, s)V e
=e
+
U (0, x) = e
+
0
0
U (2) (0, x) = eH0 x +
Z
x
dseH0 x V eH0 (x−s) +
0
Z
0
x
ds0
Z
s0
0
0
dseH0 s V eH0 (s−s ) V eH0 (x−s)
0
Repitiendo el procedimiento se llega a una expresión en serie para el operador evolución,
conocida como serie de Dyson:
U (0, x) =
∞ Z
X
n=0 0
x
dxn · · ·
Z
0
x2
dx1 eH0 x1 V eH0 (x2 −x1 ) V eH0 (x3 −x2 ) · · · eH0 (xn −xn−1 ) V eH0 (x−xn )
(1.15)
1.2.
Matriz densidad
Además de la formulación en términos de la función de onda existe otra formulación más
general, debida a von Neumann, empleando la matriz densidad. Este enfoque tiene la ventaja de
poder tratar conjuntos estadı́sticos de estados además de estados puros [5, Complemento CIII].
Si hay una probabilidad (clásica) pi de que el estado del sistema sea |ψi i, la matriz densidad se
define como
X
ρ=
pi |ψi i hψi |
(1.16)
i
La matriz densidad es un operador hermı́tico, definido positivo y de traza igual a uno.
Si todos los pi son nulos a excepción de uno, entonces el estado es puro, y se puede describir
mediante una función de ondas; en caso contrario es un estado mezcla. Hay distintas pruebas
para comprobar si una matriz densidad ρ corresponde a un estado puro o mezcla. Una de ellas es
la entropı́a de von Neumann (definida de manera análoga a la entropı́a de Gibbs o de Shanon),
que es nula para un estado puro y positiva para un estado mezcla:
X
S(ρ) = −
pi log pi = −tr(ρ log ρ)
(1.17)
i
4
La evolución temporal de la matriz densidad, calculada a partir de la ecuación de Schrödinger,
está dada por la ecuación de Liouville-von Neumann:
i~
∂
ρ = [H, ρ]
∂t
(1.18)
El valor esperado de un operador A se calcula según
hAi = tr(ρA)
(1.19)
Matriz densidad reducida
Podrı́a pensarse que la matriz densidad no aporta nada nuevo con respecto a la función de
ondas. Al fin y al cabo, en principio se podrı́a conocer la función de ondas del universo y resolver
con ella la ecuación de Schrödinger, y cualquier problema estarı́a automáticamente resuelto.
Pero la matriz densidad proporciona la herramienta necesaria para tratar los componentes de
un sistema de forma individual: la matriz densidad reducida.
Si un sistema fı́sico está descrito por la matriz densidad ρ y se puede dividir en dos partes A
y B, cuyos espacios de Hilbert admitan las bases {|ϕi i} y {|χj i} respectivamente, a cada uno de
los subsistemas le corresponde una matriz densidad reducida obtenida al hacer la traza parcial
sobre los grados de libertad de la otra parte:
X
ρA = trB ρ =
hχj | ρ |χj i
(1.20a)
j
ρB = trA ρ =
X
i
hϕi | ρ |ϕi i
(1.20b)
La evolución temporal de cada una de las matrices reducidas sigue obedeciendo la ecuación
de Liouville-von Neumann(1.18), y los valores esperados de observables que afecten solo a una
de las partes se pueden calcular con (1.19).
1.3.
Entrelazamiento
En sistemas de muchas partı́culas, el espacio de Hilbert es el resultado de realizar el producto
tensorial de los espacios de las partı́culas individuales.
HT = H1 ⊗ H2 ⊗ · · · ⊗ Hn
(1.21)
Al hacer esto, aparecen estados que no se pueden separar como el producto tensorial de los
estados independientes, lo que se conoce como entrelazamiento. Se define un estado entrelazado
como un estado del espacio de Hilbert HT que no se puede expresar como un producto tensorial
de estados en los diferentes espacios Hi . El ejemplo más tı́pico es el de dos objetos con dos
niveles que forman un estado de Bell:
1
|ϕi = √ (|0i ⊗ |1i − |1i ⊗ |0i) 6= |ai ⊗ |bi
2
(1.22)
El hecho de que dos objetos estén entrelazados significa que no son independientes entre sı́,
sino que entre ellos existen correlaciones. En el ejemplo anterior, si se realiza una medición sobre
el primer estado y se obtiene el valor |0i, automáticamente se sabe que el segundo estará en el
estado |1i (o viceversa). El significado del entrelazamiento es que, aunque se tenga un conocimiento completo de un sistema cuántico, eso no implica que se tenga un conocimiento completo
de cada una de sus partes por separado.
5
Entropı́a de entrelazamiento
En un sistema puro, la condición necesaria y suficiente para que dos de sus partes estén
entrelazadas es que sus matrices reducidas correspondan a estados mezcla. Esto permite elaborar diferentes medidas del entrelazamiento, como la entropı́a de entrelazamiento: En un sistema
bipartito, la entropı́a de entrelazamiento es la entropı́a de von Neumann de las matrices reducidas. Si el estado está entrelazado, la entropı́a de entrelazamiento es mayor que cero. Además,
se cumple que la entropı́a de entrelazamiento de ambas partes es igual.
Es bien conocido que la entropı́a clásica aumenta con el volumen de los sistemas. Cabe preguntarse si sucede lo mismo con la entropı́a de entrelazamiento. Si se escoge un estado arbitrario
[8], la respuesta es que sı́. Pero no es cierto en algunos casos concretos, con una gran relevancia
fı́sica.
En concreto, si el hamiltoniano incluye únicamente interacciones locales y existe una diferencia de energı́a (gap) entre el nivel fundamental y el primer excitado, entonces en el nivel
fundamental la entropı́a de entrelazamiento depende del tamaño de la frontera entre los dos
componentes, y por lo tanto están menos entrelazados que un estado general. Esta propiedad
se conoce como ley del área, y se ilustra en la figura 1.1. Nos restringiremos a sistemas unidimensionales, por lo que la frontera de cualquier bloque está formada por dos sitios, y la entropı́a
estará acotada por una constante.
Figura 1.1: En sistemas con interacciones locales y gaps de energı́a, la entropı́a de entrelazamiento
depende del número de enlaces entre las dos partes A y B.
1.4.
Espacio de Fock
Hay muchas situaciones fı́sicas en las que el número de excitaciones o de partı́culas no se
mantiene constante. Por ello, hay que emplear un espacio de estados adaptado a un número
arbitrario de partı́culas: el espacio de Fock. Si H es el espacio de Hilbert correspondiente a una
única partı́cula, el espacio de Fock incluye C (el vacı́o, representado con el estado |Ωi), H, H2 ,
H3 ..., ası́ como las combinaciones lineales de elementos de los distintos espacios.
La forma conveniente de expresar estos estados, incluyendo la condición de simetrización,
es mediante estados de Fock, donde se expresa la ocupación de cada uno de los estados. Estos
estados, con un número definido de partı́culas, constituyen una base del espacio de Fock. Si
a† (xn ) es el operador de creación de una partı́cula en la posición xn , un estado de Fock es de la
forma
1
|x1 , · · · xn i = √ a† (x1 ) . . . a† (xn ) |Ωi
n!
Como estos estados constituyen una base, cualquier otro estado se puede expresar como
6
combinación lineal de ellos:
|ϕi =
∞ Z
X
n=0
dx1 · · · dxn φ(x1 , · · · xn )a† (x1 ) · · · a† (xn ) |Ωi
(1.23)
Los coeficientes de la combinación lineal se pueden calcular, como es habitual, como
φ(x1 , · · · , xn ) = hx1 , · · · xn |ϕi = hΩ| ψ(x1 ) · · · ψ(xn ) |ϕi
1.5.
(1.24)
Teorı́a cuántica de campos
Un campo es el caso lı́mite de una red en la que la distancia entre los sitios de red tiende
a cero ( → 0) aumentando el número de sitios N → ∞ y manteniendo fija la longitud total
L = N . Al hacer el lı́mite, los operadores de creación y destrucción dan lugar a los operadores
de campo:
ai
(1.25)
lı́m √ = ψi
→0
En el caso de que las partı́culas sean bosones (que es el único caso que consideramos en
este trabajo) las relaciones de conmutación entre los operadores de creación y destrucción se
traducen en las correspondientes para los campos [9]:
δij
1
[ψi , ψj† ] = [ai , a†j ] =
=⇒
→0
[ψ(x), ψ † (y)] = δ(x − y)
(1.26)
Notar que el factor −1/2 en la definición (1.25) garantiza que las dimensiones sean correctas,
ya que la delta de Kronecker es adimensional mientras que la delta de Dirac tiene dimensiones
inversas a las de la variable de integración (longitud en este caso).
Un observable importante es el operador número de partı́culas, N , definido como
Z ∞
N=
dxψ † (x)ψ(x)
(1.27)
−∞
Un estado de Fock es autoestado de este operador, y el autovalor correspondiente es la
ocupación total del estado.
1.6.
El principio variacional
El teorema de Rayleigh-Ritz [10, Complemento E XI] proporciona un método para determinar al estado fundamental de un hamiltoniano H: El valor esperado del hamiltoniano en un
estado cualquiera |ψi es mı́nimo si ese estado es el fundamental:
hEiψ =
hψ| H |ψi
≥ E0
hψ|ψi
(1.28)
La estrategia a seguir a la hora de aplicar el principio variacional es elegir una familia
de estados que dependan de uno o más parámetros, |ψ(α)i y minimizar el valor esperado del
hamiltoniano con respecto a estos parámetros.
Para elegir una clase variacional de funciones, se requiere [11] que sea completa (capaz
de reproducir todos los estados del espacio de Hilbert), computacionalmente eficiente (que el
número de parámetros no dependa exponencialmente con el tamaño del sistema) y motivada
por argumentos fı́sicos. A lo largo de los dos próximos capı́tulos se mostrará una clase variacional
para sistemas unidimensionales que cumple estos requisitos.
7
2
Estados producto de matrices
En mecánica clásica, el espacio de fases para varias partı́culas se construye como suma directa
de los espacios de fases de cada una de las partı́culas, y su dimensión crece linealmente con el
número de partı́culas. Por el contrario, en mecánica cuántica los espacios de Hilbert de varias
partı́culas se forman mediante el producto tensorial de los espacios de Hilbert de una partı́cula.
Por lo tanto, su dimensión crece exponencialmente con el número de partı́culas. Este hecho
hace que métodos como el principio variacional, basados en explorar el espacio de estados, están
abocados al fracaso debido al gran número de estados posibles incluso en sistemas con unas
decenas de partı́culas.
Sin embargo, la evolución del sistema explora solo una pequeña parte de los estados a priori
posibles. Ası́ que el problema no es tratar con espacios de dimensión elevada, sino saber seleccionar de ellos los estados relevantes. La ley de área del entrelazamiento permite identificar
los estados correspondientes al estado fundamental y primeros excitados, lo que permite acotar
enormemente el conjunto de estados en los que buscar.
Hay diversos modelos que explotan las propiedades del entrelazamiento, colectivamente conocidos como redes de tensores. Esto es ası́ porque describen los estados cuánticos como un
conjunto de tensores cuyo producto sigue la estructura dictada por el entrelazamiento. El estado
producto de matrices es un caso particular, aplicable a redes unidimensionales.
2.1.
Tensores
A efectos prácticos, un tensor es una colección multidimensional de números, Aαβγ··· . El
número de ı́ndices α, β, γ, · · · necesarios para especificar uno de los números es el orden del
tensor [12]. Cada ı́ndice puede tomar un número de valores discretos posibles, lo que constituye
la dimensión de ese ı́ndice. La operación básica entre tensores es la contracción de ı́ndices (para
lo cual los ı́ndices contraı́dos deben tener la misma dimensión D):
Cβγ···µν··· =
D
X
Aαβγ··· Bαµν···
(2.1)
α=1
El caso más elemental es el producto de matrices (una matriz es un tensor de orden 2):
Cαγ =
D
X
Aαβ Bβγ
(2.2)
β=1
donde la matriz A tiene dimensión d en el ı́ndice α y D en el ı́ndice β, mientras que B tiene
dimensión d en el ı́ndice γ, con lo cual C tiene dimensión d en ambos ı́ndices: para escribir C
hace falta especificar d2 elementos, y para AB, hay que especificar 2dD elementos.
Un tensor se puede representar pictóricamente, mediante la notación de Penrose, como un
objeto con un segmento externo por cada ı́ndice. De este modo, la contracción de dos tensores
se simboliza conectando dos segmentos, como se ilustra en la figura 2.1.
Figura 2.1: Izquierda: Un tensor con dos ı́ndices (matriz). Derecha: contracción de dos tensores (producto
de matrices).
8
2.2.
Estados cuánticos como tensores
Consideremos una red unidimensional con N sitios. En cada sitio acomodaremos un sistema
discreto de d niveles, al que le corresponde un espacio de Hilbert Hr , (r = 1, · · · , N ) parametrizado por una base de autoestados {|ir i}, ir = 1, · · · , d. El espacio de Hilbert de la red en su
conjunto será
N
O
H=
Hr = H1 ⊗ H2 ⊗ · · · ⊗ HN
(2.3)
r=1
con base {|i1 i ⊗ |i2 i ⊗ · · · ⊗ |iN i}. En consecuencia, cualquier estado de dicho espacio es de la
forma
X
|ψi =
Ci1 i2 ···in |i1 i ⊗ |i2 i ⊗ · · · ⊗ |iN i
(2.4)
i1 ,i2 ,··· ,iN
Los coeficientes Ci1 ,i2 ,··· ,iN necesarios para expresar el estado en términos de los elementos de
la base se pueden entender como un tensor de N ı́ndices, por lo que contiene dN elementos. El
objetivo es expresar este tensor como la contracción de N tensores de tres ı́ndices, de los cuales
uno tenga dimensión d y los otros dos dimensión D (dimensión de enlace o bond dimension). El
estado reescrito de este modo se denomina MPS (matrix product state, por sus siglas en inglés).
Figura 2.2: Descomposición de un tensor de N ı́ndices con dimensión d en la contracción de N tensores
de tres ı́ndices de dimensiones d y D.
|ψi =
X
X
i1 ,··· ,iN α,n1 ,··· ,nN −1
(i2 )
(iN )
1)
A(i
αn1 An1 n2 · · · AnN −1 α |i1 i ⊗ |i2 i ⊗ · · · ⊗ |iN i
(2.5)
Construcción mediante descomposición de Schmidt
Se puede demostrar, de forma constructiva, que cualquier estado se puede escribir en la
forma MPS. El tensor Ci1 i2 ···in se puede considerar como una matriz con solo dos ı́ndices: el i1
y el ı́ndice resultante de agrupar a todos los demás. Cualquier matriz se puede descomponer
mediante la descomposición de valores singulares (SVD)
M = U ΣV †
(2.6)
en el producto de dos matrices unitariasPU U † = I y V V † = I y una diagonal (no necesariamente
cuadrada) Σ con Σij = σi δij , σ ≥ 0 y
σi2 = 1 por normalización. El número de elementos σ
distintos de cero, D2 , es el rango de la matriz. Aplicado al estado cuántico (2.4), resulta en
Ci1 (i2 ···iN ) =
D2
X
i=1
†
Ui1 k σk Vk(i
2 ···iN )
(2.7)
Definiendo |Ii = U |i1 i y |Ji = V † |i2 i ⊗ · · · ⊗ |iN i, se obtiene la descomposición de
Schmidt:
D2
X
|ψi =
σk |Ik i ⊗ |Jk i
(2.8)
i=k
9
Iterando el procedimiento de SVD, se llega al estado MPS:
X
X
Ci1 i2 ···iN =
Ui1 k1 Ck1 (i2 ···iN ) =
Ui1 k1 U(k1 i2 )k2 Ck2 (i3 ···iN ) =
X
=
Ui1 k1 U(k1 i2 )k2 · · · U(kN −2 iN −1 )kN −1 UiN kN −1 = Ai1 Ai2 · · · AiN
(2.9)
Para trabajar con condiciones de contorno periódicas (lo cual es recomendable si se va a
realizar el lı́mite termodinámico N → ∞), hay que entrelazar el primer sitio de la red con el
último contrayendo sus tensores, esto es, haciendo la traza a la expresión anterior:
X
|ψi =
tr[Ai1 Ai2 · · · AiN ] |i1 i ⊗ |i2 i ⊗ · · · ⊗ |iN i
(2.10)
i1 ,··· ,iN
Dimensión de enlace y entropı́a
Hay que notar que la expresión (2.8) no es más que un sistema bipartito, con lo que se puede
calcular la entropı́a de entrelazamiento que existe entre las dos partes a partir de los coeficientes
de Schmidt:
D2
X
S=−
σk2 log σk2 ≤ log D2
(2.11)
i=k
Por lo tanto, el rango de la matriz es una medida del entrelazamiento entre los dos subsistemas, y cuanto menor sea el entrelazamiento, menor será la dimensión D2 .
2.3.
Utilidad de los estados tensoriales
En conclusión, se ha conseguido reescribir un estado cuántico desde su forma de producto
tensorial, para lo que hacen falta dN elementos, a la forma de estado de producto matricial,
en la que hay que especificar N dD2 elementos. El parámetro clave en esta descripción es D,
la dimensión de enlace, que está determinada por el entrelazamiento entre los componentes del
sistema. En el caso de que D no crezca exponencialmente con N , el formalismo MPS es una
manera eficiente de describir los estados cuánticos.
Figura 2.3: El espacio de Hilbert (azul) contiene un número muy elevado de estados, pero de ellos solo
unos pocos son fı́sicamente relevantes: los que siguen la ley de área (gris). Eligiendo una dimensión D
reducida (rojo), se pueden describir parte de dichos estados.
Los MPS incorporan de manera automática la ley de área. Con un valor de D muy elevado
(que dependa exponencialmete con el tamaño del sistema) se puede describir cualquier estado.
Al restringirse a valores pequeños, por el contrario, se obtienen solo los estados significativos, y
además de forma computacionalmente eficiente.
10
3
Estados producto de matrices
continuos
Los estados de producto de matrices continuos (cMPS por sus siglas en inglés) son la generalización, para campos en una dimensión, de los estados MPS. Se definen por la siguiente
expresión [3]:
h RL
i
†
|χi = traux Pe 0 dx[Q(x)⊗I+R(x)⊗ψ ] |Ωi ≡ traux U |Ωi
(3.1)
donde Q(x) y R(x) son matrices de dimensión D que actúan sobre un sistema auxiliar, y que
especifican completamente el estado.
3.1.
Paso al continuo
Al igual que un campo se puede obtener mediante el paso al continuo de una red atómica, su
descripción computacionalmente eficiente, el cMPS (continuous matrix product state) se puede
obtener mediante el paso al continuo del MPS:
|χ i =
X
i1 ···iN
tr[Ai1 Ai2 · · · AiN ](ψ1† )i1 · · · (ψN )iN |Ωi
(3.2)
Por simplicidad el modelo se puede hacer invariante bajo traslaciones si las matrices A no
dependen del sitio de la red, Ain = An . La forma de estas matrices se escoje, de acuerdo con
[3], para que reproduzcan de forma correcta el lı́mite continuo, empleando las matrices Q y R,
ambas de dimensión D × D:
A0 = 1 + Q
An =
n n
R
n!
(3.3)
Comprobemos que realmente se obtiene el resultado esperado. En primer lugar se realiza la
discretización del espacio, haciendo dx = , x = n:
U = P exp
Z
0
L
dx Q ⊗ 1 + R ⊗ ψ † (nε)


L/ X
= lı́m P exp 
Q ⊗ 1 + R ⊗ ψn† 
ε→0
n=0
L/ε
Y
L/ε
∞
h i
Y
X
εm m
†
Qε
= lı́m P
exp Q ⊗ 1 + R ⊗ ψn = lı́m P
e
R ⊗ (ψn† )m
ε→0
ε→0
m!
n=0
n=0
m=0
!
!
L/ε
L/ε
∞
∞
Y
X
Y
X
m
† m
0
m
† m
≈ lı́m P
(1 + Qε) 1 +
A ⊗ (ψn )
≈ lı́m P
A +
A ⊗ (ψn )
ε→0
= lı́m
ε→0
n=0
X
i1 ,··· ,iL/ε
ε→0
m=1
i1
i2
A A ···A
iL/ε
(ψ1† )i1
†
· · · (ψL/ε
)iL/ε
11
n=0
m=1
(3.4)
3.2.
Expresiones para algunas magnitudes
Los observables del sistema se pueden escribir en función de las matrices Q y R [13]. Los
detalles se pueden encontrar en el apéndice A:
hχ|χi = tr eT L
(3.5a)
h
i
hψ † (x)ψ(0)i = tr eT (L−x) (R ⊗ 1)eT x (1 ⊗ R? )
(3.5b)
hψ † (x)ψ(x)i = tr eT L R ⊗ R?
(3.5c)
h
i
hψ † (0)ψ † (x)ψ(x)ψ(0)i = tr eT (L−x) (R ⊗ R? )eT x (R ⊗ R? )
(3.5d)
hψ † (x)ψ † (x)ψ(x)ψ(x)i = tr eT L R2 ⊗ (R? )2
(3.5e)
En todos los casos se ha empleado la matriz de transferencia, definida como
T = Q ⊗ 1 + 1 ⊗ Q? + R ⊗ R?
(3.6)
Estas ecuaciones son de vital importancia, ya que permiten relacionar valores esperados
para campos (con infinitos grados de libertad), con trazas de matrices de dimensión finita. Por
lo tanto, son las herramientas para poder hacer cálculos con un estado cMPS.
3.3.
Dinámica disipativa en el sistema auxiliar
Libertad gauge
El estado cMPS posee una libertad gauge a la hora de elegir las matrices Q y R: queda
invariante al hacer la transformación dada por la matriz invertible g:
Q → Q0 = gQg −1
R → R0 = gRg −1
(3.7)
La elección de gauge que se suele emplear es la siguiente:
Q + Q† + R† R = 0
(3.8)
que se puede escribir, empleando una matriz hermı́tica K = K † , como
1
Q = −iK − R† R
2
(3.9)
Con esta elección, el estado (3.1) toma la forma:
|χi = traux [U (L, 0)] |Ωi
Z
U (L, 0) = P exp −i
0
L
dz(K ⊗ 1 + iR ⊗ ψ (z) − iR ⊗ ψ(z))
†
†
(3.10)
Interpretación holográfica
Esta expresión es matemáticamente análoga a la del operador evolución para un campo ψ
y un sistema auxiliar (ancilla) con D niveles. Esto permitirá reinterpretar el cMPS como un
sistema auxiliar con un hamiltoniano K acoplado con un campo que actúa como baño térmico
mediante la matriz R, como se ilustra en la figura 3.1. Ası́ pues, la dinámica de un sistema
unidimensional queda completamente descrita por la de un sistema puntual, lo que constituye
un ejemplo del principio holográfico.
12
Figura 3.1: El estado cMPS como un sistema de D niveles con hamiltoniano K sometido al baño térmico
(campo ψ) mediante la matriz R.
Ecuación de Lindblad
Las expresiones anteriores (3.5) incluyen productos tensoriales en el espacio auxiliar. Para
evitarlos, y además hacer patente la dinámica disipativa, se emplea el siguiente isomorfismo:
|ai ⊗ |bi ⇐⇒ |ai hb|
(3.11)
Este isomorfismo se traduce en un isomorfismo entre operadores en H ⊗ H y superoperadores
(es decir, operadores lineales que actúan en el espacio de los operadores de un espacio de Hilbert):
(A ⊗ B ? ) |ai ⊗ |bi ⇐⇒ A |ai hb| B †
(3.12)
Es interesante aplicar el isomorfismo a la matriz de transferencia T (3.6) actuando sobre un
vecor |ρi:
T |ρi = (Q ⊗ 1 + 1 ⊗ Q? + R ⊗ R? ) |ρi ⇐⇒ T[ρ] = Qρ + ρQ† + RρR†
(3.13)
El vector ha pasado a ser una matriz densidad ρ sobre la que opera el superoperador T.
Aplicando la expresión (3.9) se obtiene
1
T[ρ] = −i[K, ρ] + RρR† − {R† R, ρ}
2
(3.14)
La expresión (3.14) corresponde a una ecuación de Lindblad [7] que describe la evolución del
sistema auxiliar
∂
1
ρ(x) = T[ρ(x)] = −i[K, ρ] + RρR† − {R† R, ρ}
(3.15)
∂x
2
Si solamente estuviera el primer término, el conmutador, serı́a una ecuación de Liouvillevon Neumann, equivalente a la ecuación de Schrödinger para la matriz densidad de un sistema
aislado. Al añadir los términos dependientes de R ya no se está describiendo un sistema aislado
sino uno abierto, en contacto con un baño térmico (representado por el campo).
En el lı́mite termodinámico L → ∞, el autovector de T al que corresponda el autovalor de
mayor parte real es el dominante en las expresiones (3.5). Para evitar divergencias, esperamos
que el mayor autovalor sea cero, lo que equivale a que en (3.15) exista una matriz densidad
estacionaria ρss tal que T[ρss ] = 0.
13
En este lı́mite, las cantidades en (3.5) se pueden escribir en función de la matriz densidad
estacionaria:
hχ|χi = trρss = 1
h
i
hψ † (x)ψ(0)i = tr eTx (Rρss )R†
h
i
hψ † (x)ψ(x)i = tr R† Rρss
h
i
hψ † (0)ψ † (x)ψ(x)ψ(0)i = tr ReTx (Rρss R† )R†
h
i
hψ † (x)ψ † (x)ψ(x)ψ(x)i = tr (R† )2 R2 ρss
h
i
∂2
hψ † (x) − 2 ψ(x)i = tr ([Q, R])† [Q, R]ρss
∂x
(3.16a)
(3.16b)
(3.16c)
(3.16d)
(3.16e)
(3.16f)
Al igual que las relaciones (3.5), estas ecuaciones establecen cómo calcular promedios, y de
hecho serán empleadas continuamente en las simulaciones.
3.4.
Extensión a campos acoplados
El formalismo de estados de producto de matrices continuos se puede extender para aplicarlo
en sistemas de varios campos bosónicos acoplados. Estos campos deberán cumplir las relaciones
de conmutación acordes a su estadı́stica:
[ψα (x), ψβ (x0 )] = 0
[ψα (x), ψβ† (x0 )] = δαβ δ(x − x0 )
La generalización del estado cMPS es inmediata [4]:
h RL
i
P
†
|χi = traux Pe 0 dx[Q̃⊗1+ R̃α ⊗ψα ] |Ωi
(3.17)
(3.18)
El sistema está descrito por la matriz Q̃ y las matrices R̃α : de estas últimas, hay una correspondiente a cada campo ψα , y para evitar divergencias, deben heredar las relaciones de
conmutación de los campos:
[R̃α , R̃β ] = 0
(3.19)
Al igual que en el caso de un único campo, la evolución temporal se puede describir como
una dinámica disipativa mediante una ecuación de Linblad, de modo que las matrices R̃α actúan
como el acoplamiento del sistema auxiliar con el baño (los campos):
X
d
1
ρ̃(z) = −i[K̃, ρ̃(z)] +
R̃α ρ̃R̃α† − {R̃α† R̃α , ρ̃(z)}
dz
2
α
(3.20)
El hamiltoniano K̃ se puede relacionar con los parámetros del estado, Q̃ y R̃α , según la
relación:
1X †
Q̃ = −iK̃ −
R̃α R̃α
(3.21)
2
Como primer paso vamos a construir las matrices correspondientes a campos no acoplados,
a partir de las matrices K y R de un único campo. Para recuperar la dinámica de cada uno de
los campos, deberemos exigir que la matriz densidad total sea separable, ρ̃ = ρ1 ⊗ ρ2 . Cada uno
de los campos actúa en su propio espacio con su hamiltoniano Kα y su acoplo con el baño Rα
de manera independiente, por lo que
K̃ = K1 ⊗ 1 + 1 ⊗ K2
R̃1 = R1 ⊗ 1
14
R̃2 = 1 ⊗ R2
(3.22)
Figura 3.2: En el cMPS para dos campos, el acoplamiento entre ambos se traduce en un acoplamiento
entre sus sistemas auxiliares.
Dado que R̃1 y R̃2 operan en espacios diferentes, obedecen de manera trivial la relación de
conmutación (3.19).
El acoplamiento entre campos se puede introducir adiabáticamente. Al hacerlo, los sistemas
auxiliares comienzan a interaccionar, y las soluciones se modifican respecto a las de los campos
independientes. En concreto, el estado ya no será separable. Para conseguirlo hay que usar un
hamiltoniano K̃ más general:
K̃ = K1 ⊗ 1 + 1 ⊗ K2 +
P
X
p=0
(p)
(p)
Z1 ⊗ Z2
(3.23)
(0)
Se han añadido P parejas de matrices hermı́ticas (para que K̃ también lo sea) y con Z1 =
(0)
Z2 = 0 para reproducir el lı́mite de campos independientes. El número de matrices P es
en principio arbitrario, pero el número óptimo aumentará al incrementar el acoplamiento. Las
matrices R̃1 y R̃2 no se modifican respecto del caso sin perturbar.
Empleando una dimensión de enlace D, el número de parámetros variacionales para describir
los dos campos asciende a (4 + 2P )D2 .
15
4
Metodologı́a
El presente trabajo está dedicado a la simulación computacional de campos cuánticos. En
consecuencia, la labor de investigación correspondiente se ha realizado mediante la elaboración
y ejecución de los códigos informáticos necesarios. La elaboración del código se estructuró como
sigue:
En primer lugar se estudió un único campo. Para ello se empleó un código diseñado por el
alumno (Apéndice B) en el lenguaje de programación C. La elección del lenguaje se debe a
su rapidez y flexibilidad, y también porque el alumno está familiarizado por su utilización
en otras asignaturas del grado. El código se basa en el que presenta [11] (en el lenguaje
MATLAB), incluyendo mejoras para incrementar su eficiencia computacional. La ejecución
del programa se realizó en el ordenador personal del alumno, con el sistema operativo
Ubuntu (Linux) y el compilador gcc.
Después se realizó la simulación de dos campos acoplados. En esta etapa, la mayor exigencia
de potencia de cálculo marcó la metodologı́a necesaria. Las rutinas de optimización en C
se mostraron insuficientes al incrementar el número de parámetros variacionales, con lo
que en su lugar se empleó MATLAB debido a su potente rutina fmincon. Para hacer frente
al elevado tiempo de cálculo, la ejecución se realizó en el cluster del Departamento de
Fı́sica de la Materia Condensada de la Universidad de Zaragoza (con sistema operativo
Linux). El código fue elaborado para su investigación por uno de los directores del trabajo,
Fernando Quijandrı́a, y modificado para adaptarse al problema especı́fico por el alumno.
4.1.
Algoritmo para un solo campo
La idea del algoritmo es tomar como parámetros variacionales las matrices K y R, ambas de
dimensión M , y con ellas calcular la matriz densidad ρss según (3.14). Esta matriz se emplea para
calcular la energı́a del modelo de Lieb-Liniger (5.1) aplicando los resultados (3.16f) y (3.16e):
h
i
h
i
∂2
hEi = hψ (x) − 2 ψ(x)i+chψ † (x)ψ † (x)ψ(x)ψ(x)i = tr ([Q, R])† [Q, R]ρss +tr c(R† )2 R2 ρss
∂x
(4.1)
Los valores de energı́a ası́ calculados se emplean para su optimización numérica según (1.28),
tomando como condición de minimización el valor de N (recordemos que para el modelo de LiebLiniger es una constante del movimiento), que se calcula de acuerdo con su definición (1.27) y
el resultado (3.16c):
h
i
†
hN i = hψ † (x)ψ(x)i = tr R† Rρss
(4.2)
Ası́ pues, al fijar la condición hN i = ρ se está restringiendo la optimización al subespacio de
estados con densidad de partı́culas ρ. El proceso de minimización se inicia con unas matrices K
y R aleatorias y se continúa hasta que el valor de la energı́a converja a un mı́nimo.
Una vez calculadas las matrices K y R, y con ellas la matriz densidad ρss , es posible calcular
funciones de correlación empleando (3.16b) y (3.16d).
Modificaciones del código
Respecto del código original, se han realizado algunas modificaciones:
El programa, originariamente en MATLAB, se ha reescrito en C. Para ello ha sido necesaria
la utilización de librerias: para las operaciones matriciales la GNU Scientific Library [14]
y para las rutinas de optimización la librerı́a NLOpt [15].
16
Se ha modificado el método usado para calcular el estado estacionario del Liouvilliano:
en el original se usa el inverse power method, pero dado que las matrices empleadas son
singulares, esto conlleva problemas de estabilidad numérica. En su lugar, se ha empleado
la descomposición QR: El Liouvilliano se expresa como L = A · B, siendo A unitaria (y por
tanto regular) y B rectangular superior. El estado estacionario ρ se encuentra resolviendo
por backsubstitution el sistema Bρ = 0. Este cambio ofrece una ventaja adicional, ya que
requiere un menor número de operaciones: Al tratar con superoperadores (matrices de
dimensión D2 × D2 ), las multiplicaciones necesarias para calcular el Liouvilliano emplean
O(D6 ) operaciones. El inverse power method requiere efectuar una inversión (O(D6 )) y
un número, a priori desconocido, de multiplicaciones (O(D6 )); mientras que el método
alternativo ejecuta una descomposición QR (O(D6 )) y una backsubstitution (O(D4 )).
El código original emplea para la optimización sujeta a restricciones mediante la función
fmincon de MATLAB, que opera a modo de caja negra. Este enfoque, aunque cómodo, no
está exento de riesgos, ya que un conocimiento más detallado del funcionamiento interno
puede usarse para mejorar el rendimiento: en este caso, se puede evitar calcular varias
veces la matriz ρss a partir de los mismos {K, R}. Esto es una gran ventaja, ya que éste
es precisamente la etapa más exigente computacionalmente.
Figura 4.1: Esquema de operación de la fase de optimización en el código original (arriba) y en el actual
(abajo).
El proceso de optimización
La optimización sujeta a restricciones se realiza mediante el llamado método de la barrera
(fmincon lo utiliza, aunque los detalles de su implementación permanezcan obscuros y ultrasecretos). Para minimizar la función f (x) obedeciendo la condición g(x) = 0, el método de la
barrera minimiza la función
F (x) = f (x) + I(g(x))
(4.3)
La función I(x) es la barrera, tal que I(0) I(x), |x| > 0. Fı́sicamente esto se puede
interpretar como añadir a la energı́a un potencial que atrae al sistema hacia las regiones del
espacio de fases que verifican g(x) = 0. Una primera idea para elegir la barrera es I(x) = −δ(x).
Sin embargo, esto no es conveniente, ya que partiendo de condiciones iniciales aleatorias es
prácticamente imposible llegar a la región que verifica las condiciones, mientras que partiendo
desde un punto válido, el movimiento por el espacio de fases está muy limitado impidiendo llegar
a otros mı́nimos locales.
17
Una solución es emplear como barrera una función con forma de embudo: partiendo de
cualquier punto arbitrario se acaba rápidamente en la región de interés, permitiendo una exploración de una región mayor del espacio de fases. Algunas de las funciones que se han probado
son I(x) = |x|, I(x) = tan−1 (x) y I(x) = tanh−1 (x).
En la literatura matemática, los problemas de optimización sujeto a restricciones de igualdad
atraen mucha menos atención que las restricciones de desigualdad, ya que estos últimos son más
fáciles de tratar. Usando este enfoque, se puede transformar el problema actual en uno más
sencillo computacionalmente teniendo en cuenta que la energı́a es una función creciente con el
número de partı́culas: ası́, fijando el número mı́nimo de partı́culas mediante la barrera, la propia
función a minimizar se encargará de acotarlo superiormente. La opción favorita es la barrera
logarı́tmica, I(x) = −t−1 log(x), t → ∞.
4
3.5
3
E
2.5
2
1.5
1
log
tan−1
tanh−1
0.5
abs
0
0
20
40
60
80
100
c
Figura 4.2: Resultados para D = 2 obtenidos con diferentes barreras en la optimización.
De entre todos los métodos expuestos anteriormente, se encuentra que es preferible el de
la barrera logarı́tmica, tanto por ofrecer resultados algo mejores como por requerir de menos
tiempo de ejecución.
El proceso de optimización exhibe una marcada dependencia a los puntos iniciales suministrados. Para conseguir los mejores resultados, al calcular la energı́a correspondiente a un valor
de c se comienza con el estado óptimo calculado para otro valor de c próximo. Aun ası́, es necesario hacer varias rondas aumentando y disminuyendo sucesivamente el valor de c para que el
resultado converja.
Además, al aumentar la dimensión de enlace D se está incrementando el número de parámetros variacionales, por lo que obtener una buena convergencia en la optimización se hace más
complicado. Por ello es conveniente poder construir una solución en dimensión D partiendo de
la solución en dimensión D − 1. Esto se consigue empleando las matrices K (D) , R(D) obtenidas
al añadir una fila y columna de ceros a las matrices K (D−1) y R(D−1) . Es inmediato comprobar
(D)
(D−1)
que la matriz densidad estacionaria que se obtiene ρss es igual a ρSS
con la fila y columna
de ceros añadidas,, y que la densidad de partı́culas y la energı́a que se calculan con ambas también coinciden. Por lo tanto, al ir subiendo en dimensión es conveniente emplear las matrices
calculadas en las dimensiones anteriores como valor inicial para la minimización.
4.2.
Algoritmo para dos campos acoplados
La idea tras el algoritmo es similar a la que se emplea para un único campo, aunque presenta
algunas peculiaridades.
18
El acoplamiento entre los campos, a nivel de los operadores en el sistema auxiliar, se realizó de
forma perturbativa: la matriz K se construye a partir de hamiltonianos para campos independientes, añadiéndoles P parejas de matrices Z (3.23). Esta misma lógica se emplea en la simulación: en primer lugar se simula un único campo con lo que se obtienen sus matrices K y R.
A continuación se crean las matrices K̃ = K ⊗ 1 + 1 ⊗ K, R̃1 = R ⊗ 1 y R̃2 = 1 ⊗ R, que se
emplean para simular los dos campos sin introducir aún el acoplamiento entre ellos. Finalmente
se añaden al hamiltoniano K̃ tantos pares de matrices Z como sea necesario y se introduce el
acoplamiento, de forma adiabática.
El objetivo es poder reproducir una transición de fase. De ser ası́, las magnitudes deberán
cambiar bruscamente. Como es complicado reproducir este cambio en un proceso de optimización, en la zona próxima a la transición trataremos de ayudar al programa a que haga variaciones
más grandes: antes de cada paso de minimización, a cada elemento de las matrices K, R y Z le
sumaremos o restaremos un número aleatorio, cuyo valor es como máximo el 10 % del elemento
de matriz correspondiente.
19
5
Modelos y resultados
5.1.
Modelo de Lieb-Liniger
Modelo teórico
El modelo de Lieb-Liniger describe un sistema de partı́culas bosónicas no relativistas en una
dimensión que exhiben interacción de contacto (potencial delta de Dirac). Es por tanto el modelo
con interacción más sencillo posible. El hamiltoniano correspondiente (con unidades en las que
~ = 2m = 1) es
†
Z ∞
dψ (x) dψ(x)
†
†
H=
dx
+ cψ (x)ψ (x)ψ(x)ψ(x)
(5.1)
dx
dx
−∞
La interacción es repulsiva haciendo c > 0. El número de partı́culas es una cantidad conservada para este hamiltoniano, [H, N ] = 0. Por lo tanto, partiendo de un estado en el subespacio
de Fock con N0 partı́culas, la evolución dada por el hamiltoniano no saca al sistema de ese
subespacio.
El modelo de Lieb-Liniger se puede resolver exactamente mediante el ansatz de Bethe [16][17].
Si la densidad de partı́culas es ρ, se puede definir un acoplamiento adimensional
γ=
c
ρ
(5.2)
La energı́a del estado fundamental se puede escribir en términos de la densidad y de la
densidad de energı́a e, que depende solo del acoplamiento adimensional:
ELL (c, ρ) = ρ3 e(γ)
(5.3)
La función e(γ) no tiene una expresión analı́tica, aunque se pueden emplear las fórmulas
asintóticas:
4 √
lı́m e(γ) = γ 1 −
γ →γ
(5.4a)
γ→0
3π
2
1 2
γ
1
lı́m e(γ) = π
→ π2
(5.4b)
γ→∞
3
γ+2
3
El primer lı́mite es la aproximación de campo medio. El lı́mite de acoplamiento infinito se
conoce como aproximación de Tonks-Girardeau, y corresponde a tener una única partı́cula por
sitio.
En la actualidad se pueden hacer sistemas fı́sicos que reproduzcan el modelo de Lieb-Liniger,
por ejemplo en condensados atrapados en trampas ópticas cuasiunidimensionales [18].
Energı́a
El primer objetivo de las simulaciones es comprobar si los resultados que producen son
correctos. Para ello, se utiliza un modelo sencillo, el modelo de Lieb-Liniger, y se comparan los
resultados con los publicados previamente, tanto con el mismo método [3] [11], como con los
resultados analı́ticos [16] [17].
En esta simulación se calcula la energı́a del nivel fundamental del modelo de Lieb-Liniger
(5.1), en función del parámetro de la interacción c. Para ello se trabaja con la densidad de
partı́culas fija en hN i = ρ = 1, y se emplean distintos valores de la dimensión de enlace D. El
resultado se muestra en la figura 5.1a
Para poder cuantificar la calidad de los datos, se realiza el ajuste de los resultados para c > 50
2
c
a una dependencia del tipo E(c) = A c+B
, obteniendo los parámetros de ajuste recogidos en
20
(b)
4
4
3.5
3.5
3
3
2.5
2.5
2
2
E
E
(a)
1.5
1.5
D=2
D=3
D=4
D=6
1
0.5
1
D = 4,
convergencia
0.5
Tonks-Girardeau
D=2
D=3
Tonks-Girardeau
0
0
0
50
100
150
200
250
300
0
c
50
100
150
200
250
c
Figura 5.1: (a) Densidad de energı́a E en el modelo Lieb-Liniger en función de la intensidad c. (b)
Proceso de convergencia hasta el resultado óptimo con D = 4. Se observa que el sistema permanece
bastante tiempo en las curvas que se obtenı́an con D = 2 y D = 3.
D
2
3
4
6
A
3.97921
3.65069
3.3646
3.31124
B
2.18811
2.23825
1.87705
1.96327
Tabla 5.1: Ajustes de los datos a la forma funcional asintótica.
la tabla 5.1. Se observa que con D = 2 y D = 3 no es posible recrear los resultados analı́ticos,
pero con muy poco esfuerzo computacional adicional, a partir de D = 4 los resultados obtenidos
difieren en un 2 % de los que cabrı́a esperar y convergen rápidamente hacia la solución exacta.
Este es el comportamiento esperado, ya que incluso con dimensiones de enlace muy bajas se
puede reproducir fielmente los estados relevantes.
Es interesante ver lo que ocurre al simular un campo en una dimensión relativamente grande
(D ≥ 4) partiendo de valores iniciales aleatorios, como se ilustra en la figura 5.1b. En un principio
no se obtienen las curvas de la figura 5.1a, sino que hacen falta varios barridos aumentando y
disminuyendo secuencialmente c para que la solución converja. Mientras tanto, los puntos que
se obtienen no aparecen en cualquier sitio: solo están sobre las curvas obtenidas para D = 2
y D = 3. Esto puede indicar que se están observando distintos niveles del espectro discreto de
energı́as.
Introducción de potencial quı́mico
Efectuando la transformada de Legendre respecto del número de partı́culas se obtiene el
hamiltoniano gran canónico
Z
H=
∞
−∞
dx
dΨ† (x) dΨ(x)
†
†
†
+ cΨ (x)Ψ (x)Ψ(x)Ψ(x) − µΨ (x)Ψ(x)
dx
dx
(5.5)
Las propiedades termodinámicas [17] en el lı́mite de Tonks-Girardeau están dadas por las
expresión:
µ = (πρ)2
(5.6)
En la gráfica 5.2a se observa cómo el modelo es capaz de reproducir esta dependencia, incluso
con valores bajos de D.
21
(a)
(b)
1
10
0.1
0.1
E
N
1
0.01
D=2
D=3
Tonks-Girardeau
0.01
0.1
D=2
D=3
Tonks-Girardeau
0.001
1
10
0.1
1
µ
10
µ
Figura 5.2: Densidad de número de partı́culas (a) y energı́a (b) en el modelo de Lieb-Liniger con
potencial quı́mico µ en el lı́mite de Tonks-Girardeau.
Sustituyendo en la expresión para la energı́a en el lı́mite de Tonks-Girardeau (5.4b), se
obtiene
π 2 3 π 2 µ3/2
1 3/2
E=
ρ =
=
µ
(5.7)
3
3 π3
3π
En la figura 5.2b se aprecia cómo la energı́a como el número de partı́culas ajusta bien a la
previsión teórica, incluso con valores bajos de D.
Funciones de correlación
Las últimas magnitudes que calcularemos con el modelo con un único campo son las funciones
de correlación densidad-densidad.
Las funciones de correlación densidad-densidad, como la gráfica 5.3, se ajustan satisfactoriamente a los resultados teóricos. En concreto, para valores elevados de x las densidades de los
dos puntos son independientes y
hn(x)n(0)i = hn(x)ihn(0)i = ρ2
(5.8)
Para distancias cortas, al aproximarse al régimen de Tonks-Girardeau los bosones son prácticamente impenetrables, por lo que la función de correlación tiende a cero. Si por el contrario
la constante c es pequeña, las partı́culas apenas interaccionan y su comportamiento se asemeja
al de un gas ideal de bosones: las densidades están más próximas a ser independientes. Los
resultados obtenidos reproducen correctamente las funciones de correlación teóricas [19].
1
hn(x)n(0)i
0.8
0.6
0.4
c = 0.2
c=2
c = 20
c = 200
0.2
0
0
1
2
3
4
5
x
Figura 5.3: Funciones de correlación densidad-densidad para varios valores de c en dimensión D = 4.
22
5.2.
Dos campos acoplados
Modelo teórico y transición de fase
El modelo que emplearemos son dos campos de Lieb-Liniger con un acoplamiento dependiente
de la densidad. La intensidad del acoplamiento es g.
Z
H=
L
dx
0
X
α=1,2
∂x ψα† ∂x ψα + cψα† ψα† ψα ψα + gψ1† ψ2† ψ1 ψ2 = HLL ⊗ 1 + 1 ⊗ HLL + gn1 n2 (5.9)
El hamiltoniano conmuta con la densidad de partı́culas de cada especie por separado, [H, ρ1 ] =
[H, ρ2 ] = 0. Esto nos permite mantener las densidades fijas y emplearlas como restricciones para
la minimización. Mantendremos la densidad total ρ = ρ1 + ρ2 fija.
En el caso de dos campos independientes, g = 0, el término dominante en el hamiltoniano
corresponde a la repulsión entre partı́culas de la misma especie. Como consecuencia, la situación
de mı́nima energı́a se produce cuando hay la menor densidad de partı́culas posible de cada
especie, es decir, ρ1 = ρ2 = 12 ρ. En el caso de interacción elevada, c → ∞:
E=
π2 3
(ρ1 + ρ2 3 )
3
dE = π 3 (ρ1 2 dρ1 + ρ2 3 dρ2 ) = π 3 (ρ1 2 − ρ2 2 )dρ1 = 0
y en el caso de c → 0:
(5.10)
1
ρ1 = ρ2 = ρ
2
E = ρ1 3 γ1 + ρ2 3 γ2 = c(ρ1 2 + ρ2 2 )
dE = 2c(ρ1 dρ1 + ρ2 dρ2 ) = 2c(ρ1 − ρ2 )dρ1 = 0
(5.11)
(5.12)
ρ1 = ρ2 =
1
2
(5.13)
Por el contrario, en el lı́mite de acoplo elevado entre los dos campos elevados, g → ∞, el
hamiltoniano se puede aproximar como
H ≈ gn1 n2
(5.14)
En estas condiciones, domina la repulsión entre las dos especies. La mı́nima energı́a corresponderá, por lo tanto, a que solo esté presente una de las dos especies: ρ1 = ρ, ρ2 = 0 o ρ1 = 0, ρ2 = ρ.
En el rango intermedio de acoplo, se producirá la transición de fase entre ambos comportamientos. Para estimar el punto en el que tendrá lugar, aplicamos la aproximación de ThomasFermi, consistente en despreciar el término cinético del hamiltoniano, con lo que el sistema es
resoluble
H = c(ρ1 2 + ρ2 2 ) + gρ1 ρ2 = cρ1 2 + c(ρ − ρ1 )2 + gρ1 (ρ − ρ1 )
(5.15)
dH
= 2cρ1 + 2c(ρ1 − ρ) + gρ − 2gρ1 = (2c − g)(2ρ1 − ρ) = 0
dρ1
(5.16)
Se observa que ρ1 = 12 ρ siempre hace la energı́a extremal. Para comprobar si es un máximo
o un mı́nimo, recurrimos a la segunda derivada
d2 E
= 2(2c − g)
dρ1 2
(5.17)
En consecuencia, la transición de fase se produce en g ∗ = 2c. Para g < g ∗ , el estado de
mı́nima energı́a es que los dos campos tengan la misma densidad, mientras que en g > g ∗ , se
produce la separación de las dos especies [20].
23
Figura 5.4: Transición de fase entre dos campos con igual población (acoplamiento g bajo, izquierda) y
poblamiento de un único campo (g elevado, derecha).
Cabe preguntarse cuál será el estado cuántico del sistema |ϕ(ρ, g)i en las dos fases. En primer
lugar, con g = 0, simplemente se tienen dos campos de Lieb-Liniger independientes con densidad
ρ/2:
|ϕ(ρ, g = 0)i = |χ(ρ/2)i ⊗ |χ(ρ/2)i
(5.18)
La energı́a correspondiente a este estado será
E(ρ, g = 0) = hϕ(ρ, g = 0)| H |ϕ(ρ, g = 0)i = 2ELL (ρ/2)
(5.19)
Para valores de g pequeños, el término de acoplamiento se puede considerar como una perturbación respecto al hamiltoniano de los dos campos independientes, por lo que la corrección
a la energı́a se puede calcular por teorı́a de perturbaciones:
E(ρ, g) ≈ 2ELL (ρ/2) + hϕ(ρ, g = 0)| gn1 n2 |ϕ(ρ, g = 0)i = 2ELL (ρ/2) + g
ρ2
4
(5.20)
Una vez superada la transición, uno de los campos está en el estado del vacı́o, y el otro en el
estado de un Lieb-Liniger sencillo de densidad ρ. El estado más general para describir el sistema
es una superposición de las dos posibles elecciones:
|ϕ(ρ, g)i = α |χ(ρ)i ⊗ |Ωi + β |Ωi ⊗ |χ(ρ)i
|α|2 + |β|2 = 1
(5.21)
Todos estos estados están degenerados en energı́a:
n1 n2 |χ(ρ)i ⊗ |Ωi = n1 n2 |Ωi ⊗ |χ(ρ)i = 0
E(ρ, g) = hϕ(ρ, g)| H |ϕ(ρ, g)i = ELL (ρ)
(5.22)
Sin embargo, difieren en el valor esperado de la densidad de cada uno de los campos:
ρ1 = hϕ(ρ, g)| n1 |ϕ(ρ, g)i = |α|2 ρ
ρ2 = hϕ(ρ, g)| n2 |ϕ(ρ, g)i = |β|2 ρ
(5.23)
En las simulaciones de dos campos de Lieb-Liniger acoplados, nos centraremos en intentar
localizar y caracterizar la transición de fase que se produce al variar el parámetro de acoplo entre
campos g. Para ello mantendremos la densidad total del sistema fija, y emplearemos P = 4 pares
de matrices Z para representar el acoplamiento a nivel del sistema auxiliar.
Energı́a
Un indicador importante de la transición es el comportamiento de la energı́a en función del
acoplo g, representado en la figura 5.5. Con acoplos elevados, solo existe población en uno de los
campos, por lo que la energı́a no puede depender de la intensidad de esta interacción: su valor
24
deberı́a ser el de la energı́a de un modelo de Lieb-Liniger con densidad ρ. Por el contrario, con
acoplos bajos sı́ que existen interacciones interespecie, y la energı́a mostrará una dependencia
con g. Aunque en principio no conocemos cómo es esa dependencia (además de monótonamente
creciente), sı́ que podemos saber que, con g = 0, la energı́a de cada uno de los campos es la de
un modelo de Lieb-Liniger con densidad ρ/2.
10
E
8
6
4
c=1
c=2
c=5
2
0
2
4
6
8
10
12
14
g
Figura 5.5: Energı́a total. Para la simulación se ha usado D = 4 y ρ = 2, y varios parámetros de la
interacción de Lieb-Liniger c.
Tal y como se esperaba, la energı́a va aumentando al incrementar g hasta que se produce la
transición en g = 2c. A partir de ese punto, la energı́a se mantiene siempre constante.
Para comprobar si, además de cualitativamente, la simulación también se comporta de forma
adecuada cuantitativamente, podemos comparar los valores numéricos de la energı́a en los casos
extremos con los que se obtendrı́an con el modelo de Lieb-Liniger sin acoplar en la simulación
previa. Los resultados se recogen en la tabla 5.2
c
1
2
5
Simulación g = 0
1.31
2.20
3.87
Lieb-Liniger 2E(ρ/2)
1.29
2.13
3.59
Simulación g > 2c
2.99
5.25
10.24
Lieb-Liniger E(ρ)
2.98
5.17
9.81
Tabla 5.2: Comparación entre la energı́a para los dos campos acoplados (simulación) y la situación
correspondiente con un solo campo (Lieb-Liniger ).
El grado de acuerdo entre las simulaciones dos campos y el resultado previsto con las simulaciones de un único campo es bastante bueno, en especial cuando c es bajo.
Densidad
Otro de los aspectos que permiten distinguir la transición de fases es la densidad que presentan ambos campos, representada en 5.6a
En todas las simulaciones realizadas se encuentra que, en el régimen de g > 2c, se cumple que
|∆ρ| = |ρ1 − ρ2 | = ρ. Ası́ pues, aunque el sistema en principio pueda encontrarse en cualquier
superposición de los estados con uno de los campos despoblados (5.21), solo se observan los casos
de α = 1 y α = 0. Esto se puede justificar porque son los estados con menor entrelazamiento, y
por tanto los que se describen con mayor facilidad por el cMPS. Añadiendo más restricciones a
la relación que deben guardar las densidades de los dos campos se podrı́a forzar a otros valores
de |∆ρ| con la misma energı́a.
En la gráfica 5.6b se aprecia que, para distintos valores de c, en el valor g = 2c se produce
una variación muy brusca entre las dos fases, lo cual es una señal inequı́voca de una transición
25
(a)
(b)
2
1
0.8
|∆ρ|/ρ
1.5
ρ
1
0.6
0.4
0.5
0.2
ρ1
ρ2
c=1
c=2
c=5
0
0
2
2.5
3
3.5
4
4.5
0
5
2
4
6
8
10
12
14
g
g
Figura 5.6: (a) Población en los dos campos. Los parámetros utilizados son D = 4, c = 2, ρ = 2 y
P = 3. (b) Diferencia de población entre los campos. Se ha usado D = 4 y ρ = 2, y varios valores de c.
de fase. Para valores de g algo menores se observa una cierta fluctuación respecto de ∆ρ = 0.
Esto es la consecuencia del método empleado para la simulación, en el que a las matrices que
describen el estado se les ha añadido una componente aleatoria.
Funciones de correlación
La diferencia cualitativa de comportamiento también se manifiesta en las funciones de correlación densidad-densidad. Para g = 0 (figura 5.7a), los dos campos son independientes, lo
que se ve claramente porque hn1 (x)n2 (0)i = hn1 (x)ihn2 (0)i = (ρ/2)2 . Además, las funciones de
correlación para ambos campos son idénticas entre sı́ y a la figura 5.3.
(a)
(b)
1.2
1.2
1
1
(c)
4
3.5
0.6
0.4
hn1(0)n1(x)i
hn2(0)n2(x)i
hn1(0)n2(x)i
0.2
0
0
1
2
3
hn(x)n(0)i
hn(x)n(0)i
hn(x)n(0)i
3
0.8
0.8
0.6
0.4
hn1(0)n1(x)i
hn2(0)n2(x)i
hn1(0)n2(x)i
0.2
0
4
5
0
1
2
x
3
x
2.5
2
1.5
hn1(0)n1(x)i
hn2(0)n2(x)i
hn1(0)n2(x)i
1
0.5
0
4
5
0
1
2
3
4
5
x
Figura 5.7: Funciones de correlación con g = 0 (a), g =2.8 (b) y g =4.4 (c). Cálculos realizados con
D = 4, P = 3, c = 2 ρ = 2.
Para g > 2c, como se observa en la figura 5.7c, uno de los dos campos tiene densidad nula,
como demuestra el hecho de que su función de correlación sea nula a todas las distancias. Al
otro campo le corresponde la función de correlación de un campo de Lieb-Liniger simple con
densidad doble.
Por último, también se han calculado las funciones de correlación en el caso g < 2c, representadas en la figura 5.7b. Es interesante notar que en estas condiciones las densidades de los
dos campos no son independientes entre sı́, hn1 (x)n2 (0)i =
6 hn1 (x)ihn2 (0)i. Además, las correlaciones de ambos campos son prácticamente iguales, lo que indica que el estado es simétrico bajo
la inversión de los dos campos.
26
Conclusiones
En la primera parte de la memoria del trabajo hemos seguido los pasos que han llevado a la
elaboración del modelo teórico que lo sustenta. Se ha argumentado que en los sistemas fı́sicos de
la materia condensada la simulación por fuerza bruta es una aproximación ineficiente e inútil,
y que una buena solución es la selección de los estados fı́sicamente relevantes. Para ello se ha
visto cómo emplear los estados producto de matrices para sistemas unidimensionales discretos,
y los estado producto de matrices continuos para campos unidimensionales. Se ha comprobado
también que es posible describir de este modo varios campos que interaccionan entre sı́, y cómo
esta interacción puede dar lugar a una transición de fase.
En la segunda parte de la memoria se ha dado el salto del papel al ordenador, y se ha expuesto
el proceso de simulación numérica de campos cuánticos guiada por los métodos estudiados.
Se han realizado simulaciones con un único campo cuántico, comprobando que se obtienen
los resultados correctos al calcular en el modelo de Lieb-Liniger la energı́a, las funciones de
correlación, y las propiedades termodinámicas en el conjunto gran canónico. Una vez verificada
la solvencia y eficacia computacional del método, se ha procedido a la obtención de resultados
novedosos en la simulación de dos campos de Lieb-Liniger acoplados. Se ha comprobado que
variando la intensidad del acoplo se produce una transición de fase en la que uno de los campos
queda despoblado, y que dicha transición deja signaturas en la energı́a, la densidad de partı́culas
y las funciones de correlación.
Los resultados obtenidos en este trabajo permitirán la realización experimental mediante
simuladores cuánticos de sistemas análogos a los modelos teóricos empleados, en los que se
espera reproducir la transición de fase. Dichos experimentos se realizarán en una colaboración
con el grupo de Andreas Wallraf (ETH-Zürich).
27
Bibliografı́a
[1]
A. Altland y B. Simons, Condensed Matter Field Theory. Cambridge University Press,
2010.
[2]
T. Giamarchi, Quantum Physics in One Dimension. Clarendon Press, 2003.
[3]
F. Verstraete y J. I. Cirac, Continuous matrix product states for quantum fields, Physical
Review Letters 104 no. 19, (2010) 1–4, arXiv:1002.1824.
[4]
F. Quijandrı́a, J. J. Garcı́a-Ripoll, y D. Zueco, Continuous matrix product states for
coupled fields: Application to Luttinger Liquids and quantum simulators, Physical Review
B - Condensed Matter and Materials Physics 90 no. 23, (2014) 1–10, arXiv:1409.4709v1.
[5]
C. Cohen-Tannoudji, B. Diu, y F. Laloë, Quantum Mechanics. Volume one.
Hermann-John Wiley & Sons, 1977.
[6]
M. A. Nielsen y I. L. Chuang, Quantum Computation and Quantum Information.
Cambridge University Press, 2000.
[7]
A. Rivas y S. F. Huelga, Open Quantum Systems. An Introduction. Springer, 2011.
arXiv:1104.5242v2.
[8]
J. Eisert, Entanglement and tensor network states, Modeling and Simulation 3 no. 520,
(2013) 39, arXiv:1308.3318.
[9]
C. Cohen-Tannoudji, J. Dupont-Roc, y G. Grynberg, Photons and Atoms: Introduction to
Quantum Electrodynamics. Wiley, 1989.
[10] C. Cohen-Tannoudji, B. Diu, y F. Laloë, Quantum Mechanics. Volume two.
Hermann-John Wiley & Sons, 1977.
[11] M. Rispler, Continuous Matrix Product State Representations for Quantum Field Theory.
Msc dissertation, Imperial College London, 2012.
https://workspace.imperial.ac.uk/theoreticalphysics/Public/MSc/
Dissertations/2012/ManuelRisplerDissertation.pdf.
[12] R. Orús, A practical introduction to tensor networks: Matrix product states and projected
entangled pair states, Annals of Physics 349 (2014) 117–158, arXiv:1306.2164.
[13] J. Haegeman, J. I. Cirac, T. J. Osborne, y F. Verstraete, Calculus of continuous matrix
product states, Physical Review B - Condensed Matter and Materials Physics 88 no. 8,
(2013) 1–47, arXiv:1211.3935.
[14] M. Galassi, GNU Scientific Library Reference Manual, 2009.
http://www.gnu.org/software/gsl/.
[15] S. G. Johnson, The NLopt nonlinear-optimization package, 2014.
http://ab-initio.mit.edu/wiki/index.php/NLopt.
[16] M. Olshanii y V. Dunjko, Short-distance correlation properties of the Lieb-Liniger system
and momentum distributions of trapped one-dimensional atomic gases., Physical Review
Letters 91 no. 9, (2003) 090401, arXiv:cond-mat/0210629.
[17] M. Zvonarev, Correlations in 1D boson and fermion systems: exact results. PhD thesis,
Copenhagen University, 2005.
28
[18] H. Moritz, T. Stöferle, M. Köhl, y T. Esslinger, Exciting Collective Oscillations in a
Trapped 1D Gas, Physical Review Letters 91 no. 25, (Dec., 2003) ,
arXiv:cond-mat/0307607.
[19] M. A. Cazalilla, Bosonizing one-dimensional cold atomic gases, Journal of Physics B:
Atomic, Molecular and Optical Physics 37 no. 7, (Apr., 2004) S1–S47,
arXiv:cond-mat/0307033.
[20] A. K. Kolezhuk, Stability of low-dimensional multicomponent dilute Bose gases, Physical
Review A - Atomic, Molecular, and Optical Physics 81 no. 1, (2010) 1–6,
arXiv:0903.1647v4.
[21] S. B. Papp, J. M. Pino, y C. E. Wieman, Tunable miscibility in a dual-species
Bose-Einstein condensate, Physical Review Letters 101 no. 4, (2008) 1–5,
arXiv:0802.2591.
[22] L. E. Sadler, J. M. Higbie, S. R. Leslie, M. Vengalattore, y D. M. Stamper-Kurn,
Spontaneous symmetry breaking in a quenched ferromagnetic spinor Bose-Einstein
condensate., Nature 443 no. 7109, (2006) 312–315, arXiv:cond-mat/0605351.
[23] E. Timmermans, Phase separation of Bose-Einstein condensates, Physical Review Letters
81 no. 26, (1997) 11, arXiv:cond-mat/9709301.
29
A
Cálculos con cMPS
Para describir la dinámica en el formalismo cMPS se utilizará un espacio de Hilbert auxiliar
Haux además del espacio del campo Hf , H = Haux ⊗ Hf . El operador hamiltoniano en este
espacio es
H = Q ⊗ 1 + R ⊗ ψ†
(A.1)
El estado cMPS se define como la acción del operador U sobre el vacı́o, trazando sobre los
grados de libertad del sistema auxiliar:
Z L
Hds |Ωi
(A.2)
|χi = traux P exp
0
En el hamiltoniano usado, se puede asociar la parte de H0 = Q ⊗ I como el hamiltoniano
libre y V = R ⊗ ψ † como una interacción. Trabajando en la imagen de interacción:
UI (x0 , x) = U0† (x0 , x)U (x0 , x)
(A.3)
Haciendo MQ (a, b) = eH0 (b−a) y V (x) = R(x) ⊗ ψ † (x), podemos escribir el estado cMPS
como
"∞ Z
#
X
|χi = traux
MQ (0, x1 )(R(x1 ) ⊗ ψ † (x1 ))MQ (x1 , x2 ) · · · MQ (xn , L) |Ωi =
"
= traux
n=0 0≤x1 ≤···≤L
∞ Z
X
n=0
#
MQ (0, x1 )R(x1 )MQ (x1 , x2 ) · · · R(xn )MQ (xn , L) ψ † (x1 ) · · · ψ † (xn ) |Ωi
(A.4)
Por lo tanto, el estado cMPS se puede expresar como una superposición de estados con
1, 2, . . . , n partı́culas (estados de Fock):
XZ
|χi =
dx1 · · · dxn φ(x1 , · · · , xn )ψ † (x1 ) · · · ψ † (xn ) |Ωi
(A.5)
n
0<x1 <···<xn <L
donde los coeficientes de la combinación lineal son
φ(x1 , · · · , xn ) = hΩ| ψ(x1 ) · · · ψ(xn ) |χi
(A.6)
Teniendo en cuenta las relaciones de conmutación para los operadores del campo
[ψ(x), ψ † (x1 )] = δ(x − x1 )
[ψ(x), ψ † (x1 )ψ † (x2 )] = ψ † (x2 )δ(x − x1 ) + ψ † (x1 )δ(x − x2 )
X
[ψ(x), ψ † (x1 ) · · · ψ † (xn )] =
ψ † (x1 ) · · · ψ † (xm−1 )ψ † (xm+1 ) · · · ψ † (xn )δ(x − xm )
(A.7)
m
con lo cual, utilizando el desarrollo de la exponencial que hemos encontrado antes e integrando
en xm , se obtiene
Z L
Z x
Z L
ψ(x), P exp
Hds = P exp
Hds R(x) P exp
Hds
(A.8)
0
0
x
Una vez conocido este conmutador, ya podemos expresar el estado cMPS desarrollado en
los estados de Fock (1.24), pasando los operadores de destrucción a la parte derecha (normal
ordering), teniendo en cuenta que:
Z L
Z L
Z x
Z L
ψ(x)P exp
Hds |Ωi = P exp
Hdsψ |Ωi + P exp
Hds R(x) P exp
Hds |Ωi
0
0
0
x
Z x
Z L
= P exp
Hds R(x) P exp
Hds |Ωi
(A.9)
0
x
30
Aplicándolo sucesivamente con cada uno de los ψ:
Z
L
φ(x1 , · · · , xn ) = hΩ| ψ(x1 ) · · · ψ(xn ) |χi = hΩ| ψ(x1 ) · · · ψ(xn )traux P exp
Hds |Ωi
0
Z xn
Z L
Hds R(xn ) P exp
Hds |Ωi
= hΩ| ψ(x1 ) · · · traux P exp
0
xn
R
R x2
RL
i
h R x1
xn
Hds
Hds
· · · Pe xn−1
R(xn ) Pe xn Hds |Ωi
= hΩ| traux Pe 0 Hds R(x1 ) Pe x1
= traux [MQ (0, x1 )R(x1 )MQ (x1 , x2 ) · · · R(xn )MQ (xn , L)]
A.1.
(A.10)
Normalización
Una vez obtenido el ket del estado cMPS, su bra asociado es simplemente
∞ Z
X
?
?
?
hχ| =
dy1 · · · dyn hΩ| ψ(y1 ) · · · ψ(yn )traux [MQ
(0, y1 )R? (y1 )MQ
(y1 , y2 ) · · · R? (yn )MQ
(yn , L)]
n=0
(A.11)
por lo que su norma es:
Z
∞ Z
X
hχ|χi =
dy1 · · · dym dx1 · · · dxn hΩ| ψ(y1 ) · · · ψ(ym )ψ † (x1 )ψ † (xn ) |Ωi ×
n,m=0
?
?
× traux [MQ (0, x1 )R(x1 ) · · · R(xn )MQ (xn , L)]traux [MQ
(0, y1 )R? (y1 ) · · · R? (ym )MQ
(ym , L)]
(A.12)
La parte que depende de los campos es simplemente el producto escalar de dos estados del
espacio de Fock, que forman parte de una base ortonormal:
hΩ| ψ(y1 ) · · · ψ(ym )ψ † (x1 )ψ † (xn ) |Ωi = δnm δ(x1 − y1 ) · · · δ(xn − yn )
(A.13)
La parte del sistema auxiliar se puede simplificar teniendo en cuenta las propiedades de las
trazas y exponenciales de los productos tensoriales:
trAtrB = tr(A ⊗ B)
trACtrBD = trAC ⊗ BD = tr(A ⊗ B)(C ⊗ D)
exp A ⊗ exp B = exp(A ⊗ 1 + 1 ⊗ B)
(A.14)
con lo cual,
hχ|χi =
∞ Z
X
n=0
dx1 · · · dxn traux [MQ (0, x1 )R(x1 ) · · · R(xn )MQ (xn , L)]
(A.15)
?
?
× traux [MQ
(0, x1 )R? (x1 ) · · · R? (xm )MQ
(xm , L)]
∞ Z
X
?
?
=
dx1 · · · dxn traux [MQ (0, x1 ) ⊗ MQ
(0, x1 )R(x1 ) ⊗ R? (x1 ) · · · MQ (xn , L) ⊗ MQ
(xn , L)]
=
n=0
∞ Z
X
n=0
dx1 · · · dxn traux
×
Z
x2
exp
x1
x1
Z
exp
0
ds(Q(s) ⊗ 1 + 1 ⊗ Q? (s) R(x1 ) ⊗ R? (x1 )×
Z
ds(Q(s) ⊗ 1 + 1 ⊗ Q? (s) · · · R(xn ) ⊗ R? (xn ) exp
L
xn
ds(Q(s) ⊗ 1 + 1 ⊗ Q? (s)
Recordando el desarrollo de la exponencial (1.15), finalmente tenemos:
Z L
Z
?
?
hχ|χi = P exp
ds(Q(s) ⊗ 1 + 1 ⊗ Q (s) + R(s) ⊗ R (s)) = P exp
0
L
T (s)ds
(A.16)
0
donde se ha definido el operador de transferencia T como:
T = Q ⊗ 1 + 1 ⊗ Q? + R? R
31
(A.17)
A.2.
Funciones de correlación campo-campo
En primer lugar nos interesará calcular la siguiente función de correlación:
C(x, y) = hχ| ψ † (x)ψ(y) |χi
y>x
(A.18)
Para hacerlo calcularemos ψ(y) |χi y hχ| ψ † (x) y realizaremos su producto escalar.
ψ(y) |χi = traux ψ(y)P exp
Z
0
L
H(s)ds |Ωi
(A.19)
que aplicando la relación (A.9) queda
Z
= traux P exp
0
L
Z
Hds R(y) P exp
L
|Ωi
Hds
0
(A.20)
La primera integral la separamos en dos, una entre 0 y x y otra entre x e y. Las tres integrales
las podemos calcular con el desarrollo de Dyson (1.15):
"
Z
Z
X Z
ψ(y) |χi =traux
dx1 dxm1 dy1 ym2 dz1 dzm3 MQ (0, x1 )R(x1 ) · · · MQ (xm1 , x)1MQ (x, y1 )
m1 ,m2 ,m3
#
× R(y1 ) · · · MQ (ym2 , y)R(y)MQ (y, z1 )R(z1 ) · · · MQ (zm3 , L) ψ † (x1 ) · · · ψ † (zm3 ) |Ωi
(A.21)
Procedemos del mismo modo con hχ| ψ † (x), teniendo en cuenta que ahora la integral que
debemos separar en dos va entre x y L:

hχ| ψ † (x) =traux 
X Z
m1 ,m2 ,m3
dx1 · · · dxm1
Z
dy1 · · · ym2
Z
?
dz1 · · · dzm3 hΩ| ψ(x1 ) · · · ψ(zm3 )MQ
(0, x1 )
(A.22)
#
?
?
?
?
?
× R? (x1 ) · · · MQ
(xm1 , x)R? (x)MQ
(x, y1 )R? (y1 ) · · · MQ
(ym2 , y)IMQ
(y, z1 )R? (z1 ) · · · MQ
(zm3 , L)
Tal y como pasaba al calcular la normalización, al hacer el producto escalar, la parte que
depende de los campos se reduce a un producto de deltas que expresa la ortonormalidad. Y
para la parte del sistema auxiliar, de nuevo podemos operar con las propiedades del producto
tensorial:
?
?
hχ| ψ † (x)ψ(y) |χi =traux MQ (0, x1 ) ⊗ MQ
(0, x1 )R(x1 ) ⊗ R? (x1 ) · · · MQ (xm1 , x) ⊗ MQ
(xm1 , x)1 ⊗ R? (x)
?
?
× MQ (x, y1 ) ⊗ MQ
(x, y1 )R(y1 ) ⊗ R? (y1 ) · · · MQ (ym2 , y) ⊗ MQ
(ym2 , y)R(y) ⊗ 1
?
?
?
× MQ (y, z1 ) ⊗ MQ (y, z1 )R(z1 ) ⊗ R (z1 ) · · · MQ (zm3 , L) ⊗ MQ (zm3 , L)
(A.23)
volviendo a aplicar la serie de Dyson, y con la matriz de transferencia T (s), se consigue el
siguiente resultado:
h R x
Ry
RL
i
hχ| ψ † (x)ψ(y) |χi = traux Pe 0 T (s)ds 1 ⊗ R? (x) Pe x T (s)ds R(y) ⊗ 1 Pe y T (s)ds
(A.24)
32
A.3.
Funciones de correlación densidad-densidad
La correlación entre la densidad de partı́culas en dos puntos y < x, es proporcional a la
siguiente correlación:
hn(x)n(y)i ∼ hχ| ψ † (x)ψ † (y)ψ(y)ψ(x) |χi
(A.25)
Para calcularla, debemos conocer el valor de ψ(y)ψ(x) |χi:
Z
ψ(y)ψ(x) |χi =ψ(y)traux ψ(x)P exp
Z
=traux
P exp
=
X
m1 ,m2 ,m3
Z
y
0
L
0
Z
Hds |Ωi = ψ(y)traux
P exp
Z
Hds R(y) P exp
dx1 · · · dxm1
Z
x
y
dy1 · · · dym2
0
Z
Hds R(x) P exp
Z
Hds R(x) P exp
Z
x
L
Hds
x
Hds
x
L
|Ωi
dz1 · · · zm3 traux [MQ (0, x1 )R(x1 ) · · · R(xm1 )MQ (xm1 , y)R(y)
× MQ (y, y1 )R(y1 ) · · · R(ym2 )MQ (ym2 , x)R(x)MQ (x, z1 )R(z1 ) · · · R(zm3 )MQ (zm3 )]ψ † (x1 ) · · · ψ † (zm3 ) |Ωi
(A.26)
Para obtener el correspondiente bra se procede de modo análogo. Como ocurrı́a en los casos
anteriores, al realizar el producto escalar la parte que depende de los campos se reduce a la condición de ortonormalidad, y la parte del sistema auxiliar se simplifica al expresarla en términos
de productos tensoriales:
?
?
hψ † (x)ψ † (y)ψ(y)ψ(x)i =traux MQ (0, x1 ) ⊗ MQ
(0, x1 )R(x1 ) ⊗ R? (x1 ) · · · R(y) ⊗ R? (y)MQ (y, y1 ) ⊗ MQ
(y, y1 )
?
?
× R(y1 ) ⊗ R? (y1 ) · · · MQ (ym2 , x) ⊗ MQ
(ym2 , x)R(x) ⊗ R? (x)MQ (x, z1 ) ⊗ MQ
(x, z1 )
?
?
× R(z1 ) ⊗ R (z1 ) · · · R(zm3 ) ⊗ R(zm3 )MQ (zm3 , L) ⊗ MQ (zm3 , L)
(A.27)
que haciendo uso del desarrollo de Dyson, resulta
h R y
Rx
RL
i
hn(x)n(y)i = traux Pe 0 T (s) ds R(y) ⊗ R? (y) Pe y T (s) ds R(x) ⊗ R? (x) Pe x T (s) ds
(A.28)
33
B
B.1.
Código de los programas
Modelo Lieb-Liniger en un campo
/∗ ∗
Program t o f i n d t h e minimal e n e r g y i n t h e Lieb−L i n i g e r model as a f u n c t i o n o f t h e
i n t e r a c t i o n parameter c i n t h e framework o f t h e Continuous Matrix Product
S t a t e (cMPS)
Based on t h e code by M. R i s p l e r
J o r g e Alda
∗/
#include <s t d i o . h>
#include < s t d l i b . h>
#include <time . h>
//#i n c l u d e < s t r i n g . h>
//GNU S c i e n t i f i c L i b r a r y h e a d e r s
#include < g s l / g s l m a t h . h>
#include < g s l / g s l r n g . h>//Random number g e n e r a t o r
#include < g s l / g s l v e c t o r . h> // Vector h a n d l i n g
#include < g s l / g s l m a t r i x . h> // Matrix h a n d l i n g
#include < g s l / g s l c o m p l e x . h> // Complex numbers
#include < g s l / g s l c o m p l e x m a t h . h> // Complex number o p e r a t i o n s
#include < g s l / g s l b l a s . h> // L i n e a r a l g e b r a e n g i n e
#include < g s l / g s l l i n a l g . h>
// O p t i m i z a t i o n
#include <n l o p t . h>
// A l g o r i t h m t o f i n d t h e s t e a d y s t a t e o f t h e L i o u v i l l i a n
#define QR
void e x t r a c t ( const g s l v e c t o r ∗x , g s l m a t r i x c o m p l e x ∗H0 , g s l m a t r i x c o m p l e x ∗R0 ,
unsigned i nt D) ;
void e n l a r g e ( double ∗ o r i g , double ∗ d e s t , unsigned i n t n , g s l r n g ∗ rng ) ;
void s p r e ( g s l m a t r i x c o m p l e x ∗A,
g s l m a t r i x c o m p l e x ∗preA , unsigned i n t D) ;
void reprM ( g s l m a t r i x c o m p l e x ∗R0 , unsigned i n t dim ) ;
void s p o s t ( const g s l m a t r i x c o m p l e x ∗A, g s l m a t r i x c o m p l e x ∗ postA , unsigned i n t
t r a n s , unsigned i nt D) ;
void s t e a d y s t a t e f i n d e r ( g s l m a t r i x c o m p l e x ∗H, g s l m a t r i x c o m p l e x ∗R,
g s l m a t r i x c o m p l e x ∗ rho , unsigned i nt D) ;
double matrixnorm ( g s l m a t r i x c o m p l e x ∗A) ;
void powermethod ( g s l m a t r i x c o m p l e x ∗A, g s l v e c t o r c o m p l e x ∗v , unsigned i nt D) ;
i n t g s l l i n a l g c o m p l e x Q R d e c o m p ( g s l m a t r i x c o m p l e x ∗ A) ;
double p a r t i c l e n u m b e r ( g s l m a t r i x c o m p l e x ∗R, g s l m a t r i x c o m p l e x ∗ rho , unsigned
i n t D) ;
double e n e r g y d e n s i t y ( g s l m a t r i x c o m p l e x ∗H, g s l m a t r i x c o m p l e x ∗R,
g s l m a t r i x c o m p l e x ∗ rho , double c , unsigned i nt D) ;
void s a v e ( double ∗x , char ∗ t , unsigned i nt D) ;
double b a r r i e r ( unsigned i nt n , const double ∗x , const double ∗ grad , void
∗ myfuncdata ) ;
double enr , np , e p s=1e −6, Npart = 0 . 5 3 ;
34
i n t main ( ) {
i n t D, j , k , Nbuc ;
double min , max , d e l t a ;
char i n p u t [ 2 0 0 ] , output [ 5 0 0 ] ;
FILE ∗ s e t t i n g s ;
i f ( ( s e t t i n g s=f o p e n ( ” s e t t i n g s . t x t ” , ” r t ” ) )==NULL) {
p r i n t f ( ” no e x i s t e a r c h i v o s e t t i n g s ” ) ;
return −1;
}
f s c a n f ( s e t t i n g s , ” %s ” , i n p u t ) ;
f s c a n f ( s e t t i n g s , ” %s ” , output ) ;
f s c a n f ( s e t t i n g s , ” %d” , &D) ;
f s c a n f ( s e t t i n g s , ” %l f ” , &min ) ;
f s c a n f ( s e t t i n g s , ” %l f ” , &max) ;
f s c a n f ( s e t t i n g s , ” %l f ” , &d e l t a ) ;
f s c a n f ( s e t t i n g s , ” %d” , &Nbuc ) ;
double x [ 2 ∗D∗D ] ;
FILE ∗ f ;
time t start , stop ;
i f ( strcmp ( input , ” r ” )==0){
p r i n t f ( ”random\n” ) ;
g s l r n g ∗ rng = g s l r n g a l l o c ( g s l r n g t a u s ) ;
f o r ( j =0; j <2∗(D) ∗ (D) ; j ++){
x [ j ] = g s l r n g u n i f o r m ( rng ) ;
}
} else {
f = f o p e n ( input , ” r t ” ) ;
f o r ( j =0; j <2∗(D) ∗ (D) ; j ++){
f s c a n f ( f , ” %l f ” , &x [ j ] ) ;
}
fclose ( f ) ;
p r i n t f ( ” l e i d o e l a r c h i v o %s ” , i n p u t ) ;
}
double c [ 2 ] , mm;
c [ 1 ] = D;
c [ 0 ] = min ;
nlopt
nlopt
nlopt
nlopt
o p t opt = n l o p t c r e a t e (NLOPT LN SBPLX, 2∗D∗D) ;
s e t m i n o b j e c t i v e ( opt , b a r r i e r , c ) ;
s e t x t o l r e l ( opt , 1 e −4) ;
s e t m a x e v a l ( opt , 3 0 0 0 0 ) ;
// Find t h e g r o u n d s t a t e
s p r i n t f ( arch , ”LL %d . t x t ” , D) ;
time (& s t a r t ) ;
f o r ( j =0; j <Nbuc ; j ++){
f o r ( c [ 0 ] = min ; c [0] <max ; c [0]+= d e l t a ) {
n l o p t o p t i m i z e ( opt , x , &mm) ;
f = f o p e n ( arch , ” a t ” ) ;
f p r i n t f ( f , ” %l f \ t %l f \n” , c [ 0 ] , e n r ) ;
fclose ( f ) ;
35
}
p r i n t f ( ” %l f \n” , e n r ) ;
f o r ( ; c [0] > min ; c [0] −= d e l t a ) {
n l o p t o p t i m i z e ( opt , x , &mm) ;
f = f o p e n ( arch , ” a t ” ) ;
f p r i n t f ( f , ” %l f \ t %l f \n” , c [ 0 ] , e n r ) ;
fclose ( f ) ;
}
}
time (& s t o p ) :
s a v e ( x , output , D) ;
p r i n t f ( ” %0. f s \n” , d i f f t i m e ( stop , s t a r t ) ) ;
return 0 ;
}
double b a r r i e r ( unsigned i nt n , const double ∗x , const double ∗ grad , void
∗ myfuncdata ) {
// B a r r i e r f u n c t i o n t o be minimized
double e , N, L ;
double ∗ c = ( double ∗ ) myfuncdata ;
unsigned i nt D = ( unsigned i nt ) c [ 1 ] ;
g s l v e c t o r v i e w v = g s l v e c t o r v i e w a r r a y ( x , 2∗D∗D) ;
g s l m a t r i x c o m p l e x ∗H = g s l m a t r i x c o m p l e x a l l o c (D, D) ;
g s l m a t r i x c o m p l e x ∗R = g s l m a t r i x c o m p l e x a l l o c (D, D) ;
g s l m a t r i x c o m p l e x ∗ rho = g s l m a t r i x c o m p l e x a l l o c (D, D) ;
e x t r a c t (&v . v e c t o r , H, R, D) ;
s t e a d y s t a t e f i n d e r (H, R, rho , D) ;
e = e n e r g y d e n s i t y (H, R, rho , c [ 0 ] , D) ;
enr = e ;
N = p a r t i c l e n u m b e r (R, rho , D) ;
np = N;
g s l m a t r i x c o m p l e x f r e e (H) ;
g s l m a t r i x c o m p l e x f r e e (R) ;
g s l m a t r i x c o m p l e x f r e e ( rho ) ;
L = e − 0 . 0 0 0 1 ∗ l o g ( (N−Npart ) ) ; //We ’ r e u s i n g a l o g a r i t h m i c b a r r i e r
return L ;
}
void reprM ( g s l m a t r i x c o m p l e x ∗R0 , unsigned i n t dim ) {
// A u x i l i a r f u n c t i o n t o p r i n t m a t r i c e s
unsigned i nt m, n ;
f o r (m=0; m<dim ; m++){
f o r ( n=0; n<dim ; n++){
p r i n t f ( ” %l f+ %l f i \ t ” , GSL REAL( g s l m a t r i x c o m p l e x g e t (R0 , m, n ) ) ,
GSL IMAG( g s l m a t r i x c o m p l e x g e t (R0 , m, n ) ) ) ;
}
p r i n t f ( ” \n” ) ;
}
p r i n t f ( ” \n” ) ;
}
void r e p r v ( g s l v e c t o r c o m p l e x ∗v ) {
// A u x i l i a r f u n c t i o n t o p r i n t v e c t o r s
unsigned i nt D = v−>s i z e , i ;
36
f o r ( i =0; i <D; i ++){
p r i n t f ( ” %.3 l f + %.3 l f i \ t ” , GSL REAL( g s l v e c t o r c o m p l e x g e t ( v , i ) ) ,
GSL IMAG( g s l v e c t o r c o m p l e x g e t ( v , i ) ) ) ;
}
p r i n t f ( ” \n” ) ;
}
void s a v e ( double ∗x , char ∗ t , unsigned i nt D) {
// A u x i l i a r f u n c t i o n t o s a v e t h e s t a t e t o f i l e
int i , j ;
char t 1 [ 5 0 0 ] , t 2 [ 5 0 0 ] ;
s p r i n t f ( t1 , ”KR %s . t x t ” , t ) ;
s p r i n t f ( t2 , ” r h o %s . t x t ” , t ) ;
FILE ∗ f = f o p e n ( t1 , ”wt” ) ;
f o r ( i =0; i <2∗D∗D; i ++){
f p r i n t f ( f , ” %l f \n” , x [ i ] ) ;
}
fclose ( f ) ;
g s l v e c t o r v i e w v = g s l v e c t o r v i e w a r r a y ( x , 2∗D∗D) ;
g s l m a t r i x c o m p l e x ∗H = g s l m a t r i x c o m p l e x a l l o c (D, D) ;
g s l m a t r i x c o m p l e x ∗R = g s l m a t r i x c o m p l e x a l l o c (D, D) ;
g s l m a t r i x c o m p l e x ∗ rho = g s l m a t r i x c o m p l e x a l l o c (D, D) ;
e x t r a c t (&v . v e c t o r , H, R, D) ;
s t e a d y s t a t e f i n d e r (H, R, rho , D) ;
f = f o p e n ( t2 , ”wt” ) ;
f o r ( j =0; j <D; j ++){
f o r ( i =0; i <D; i ++){
f p r i n t f ( f , ” %l f \ t %l f i \n” , GSL REAL( g s l m a t r i x c o m p l e x g e t ( rho , i ,
j ) ) , GSL IMAG( g s l m a t r i x c o m p l e x g e t ( rho , i , j ) ) ) ;
}
}
fclose ( f ) ;
g s l m a t r i x c o m p l e x f r e e (H) ;
g s l m a t r i x c o m p l e x f r e e (R) ;
g s l m a t r i x c o m p l e x f r e e ( rho ) ;
}
void e x t r a c t ( const g s l v e c t o r ∗x , g s l m a t r i x c o m p l e x
unsigned i nt D) {
// Unpacks H and R from a compact v e c t o r s t o r a g e
unsigned i nt a , n ,m;
f o r (m=0; m<D;m++){
g s l m a t r i x c o m p l e x s e t (H0 , m, m, g s l c o m p l e x
}
a = D;
f o r (m=0; m<D;m++){
f o r ( n=m+1; n<D; n++){
g s l m a t r i x c o m p l e x s e t (H0 , m, n ,
gsl complex rect ( gsl vector get (x , a) ,
g s l m a t r i x c o m p l e x s e t (H0 , n , m,
gsl complex rect ( gsl vector get (x , a) ,
a += 2 ;
}
}
37
∗H0 , g s l m a t r i x c o m p l e x ∗R0 ,
r e c t ( g s l v e c t o r g e t ( x ,m) , 0 ) ) ;
g s l v e c t o r g e t ( x , a+1) ) ) ;
− g s l v e c t o r g e t ( x , a+1) ) ) ;
a =0;
f o r (m=0;m<D;m++){
f o r ( n=0;n<D; n++){
g s l m a t r i x c o m p l e x s e t (R0 , n , m,
g s l c o m p l e x r e c t ( g s l v e c t o r g e t ( x , a+D∗D) , 0 ) ) ;
a++;
}
}
}
void e n l a r g e ( double ∗ o r i g , double ∗ d e s t , unsigned i n t n , g s l r n g ∗ rng ) {
// C r e a t e s a D+1 d i m e n s i o n a l s t a t e form a D d i m e n s i o n a l one
unsigned i nt i , j , k , l ;
double a l f a =0;
f o r ( i =0; i <n ; i ++){
dest [ i ] = orig [ i ] ;
}
l=i ;
d e s t [ i ] = a l f a ∗ g s l r n g u n i f o r m ( rng ) ;
i ++;
f o r ( j =0; j <n−1; j ++){
f o r ( k=0; k<2∗(n−j −1) ; k++){
i ++;
l ++;
dest [ l ] = or ig [ i −2];
}
d e s t [ l +2] = a l f a ∗ g s l r n g u n i f o r m ( rng ) ;
d e s t [ l +1] = a l f a ∗ g s l r n g u n i f o r m ( rng ) ;
l +=2;
}
d e s t [ l +2] = a l f a ∗ g s l r n g u n i f o r m ( rng ) ;
d e s t [ l +1] = a l f a ∗ g s l r n g u n i f o r m ( rng ) ;
f o r ( i =0; i <(n+1) ∗ ( n+1) ; i ++){
j = i / ( n+1) ;
k = i %(n+1) ;
i f ( ( j <n )&&(k<n ) ) {
d e s t [ i +(n+1) ∗ ( n+1) ] = o r i g [ n∗ j+k+n∗n ] ;
} else {
d e s t [ i +(n+1) ∗ ( n+1) ] = a l f a ∗ g s l r n g u n i f o r m ( rng ) ;
}
}
}
void s p r e ( g s l m a t r i x c o m p l e x ∗A,
g s l m a t r i x c o m p l e x ∗preA , unsigned i n t D) {
// S u o e r o p e r a t o r f o r l e f t m a t r i x m u l t i p l i c a t i o n
g s l m a t r i x c o m p l e x s e t z e r o ( preA ) ;
unsigned i nt i ;
f o r ( i =0; i <D; i ++){
gsl matrix complex view block =
g s l m a t r i x c o m p l e x s u b m a t r i x ( preA , i ∗D, i ∗D, D,D) ;
g s l m a t r i x c o m p l e x m e m c p y (& b l o c k . matrix ,A) ;
38
}
}
void s p o s t ( const g s l m a t r i x c o m p l e x ∗A, g s l m a t r i x c o m p l e x ∗ postA , unsigned i n t
t r a n s , unsigned i nt D) {
// S u p e r o p e r a t o r f o r r i g h t m a t r i x m u l t i p l i c a t i o n
g s l m a t r i x c o m p l e x s e t z e r o ( postA ) ;
unsigned i nt i , n , m;
gsl complex d ;
f o r (m=0;m<D;m++){
f o r ( n=0;n<D; n++){
i f ( trans ){
d = g s l c o m p l e x c o n j u g a t e ( g s l m a t r i x c o m p l e x g e t (A, n , m) ) ;
} else {
d = g s l m a t r i x c o m p l e x g e t (A, m, n ) ;
}
f o r ( i =0; i <D; i ++){
g s l m a t r i x c o m p l e x s e t ( postA , i+D∗n , i+D∗m, d ) ;
}
}
}
}
void s t e a d y s t a t e f i n d e r ( g s l m a t r i x c o m p l e x ∗H, g s l m a t r i x c o m p l e x ∗R,
g s l m a t r i x c o m p l e x ∗ rho , unsigned i nt D) {
// Finds t h e s t e a d y s t a t e d e n s i t y m a t r i x
i n t i =0 , m, n ;
g s l c o m p l e x t r = GSL COMPLEX ZERO ;
g s l r n g ∗ rng = g s l r n g a l l o c ( g s l r n g t a u s ) ;
g s l m a t r i x c o m p l e x ∗L = g s l m a t r i x c o m p l e x a l l o c (D∗D, D∗D) ;
g s l m a t r i x c o m p l e x ∗ p o s t = g s l m a t r i x c o m p l e x a l l o c (D∗D, D∗D) ;
g s l m a t r i x c o m p l e x ∗ p r e = g s l m a t r i x c o m p l e x a l l o c (D∗D, D∗D) ;
g s l m a t r i x c o m p l e x ∗RtR = g s l m a t r i x c o m p l e x a l l o c (D, D) ;
g s l v e c t o r c o m p l e x ∗ v e c t r = g s l v e c t o r c o m p l e x a l l o c (D∗D) ;
s p r e (H, L , D) ;
s p o s t (H, post , 0 , D) ;
g s l m a t r i x c o m p l e x s u b (L , p o s t ) ;
s p r e (R, pre , D) ;
s p o s t (R, post , 1 , D) ;
g s l b l a s z g e m m ( CblasNoTrans , CblasNoTrans , g s l c o m p l e x r e c t ( 1 , 0 ) , pre , post ,
g s l c o m p l e x r e c t ( 0 , −1) , L) ;
g s l b l a s z g e m m ( CblasConjTrans , CblasNoTrans , g s l c o m p l e x r e c t ( 1 , 0 ) , R, R,
g s l c o m p l e x r e c t ( 0 , 0 ) , RtR) ;
s p r e (RtR , pre , D) ;
s p o s t (RtR , post , 0 , D) ;
g s l m a t r i x c o m p l e x a d d ( pre , p o s t ) ;
g s l m a t r i x c o m p l e x s c a l e ( pre , g s l c o m p l e x r e c t ( 0 . 5 , 0 ) ) ;
g s l m a t r i x c o m p l e x s u b (L , p r e ) ;
g s l m a t r i x c o m p l e x f r e e ( pre ) ;
g s l m a t r i x c o m p l e x f r e e (RtR) ;
gsl matrix complex free ( post ) ;
#i f d e f QR
39
g s l l i n a l g c o m p l e x Q R d e c o m p (L) ;
f o r ( i=D∗D−1; i >=0; i −−){
i f ( g s l c o m p l e x a b s ( g s l m a t r i x c o m p l e x g e t (L , i , i ) ) < e p s ) {
g s l v e c t o r c o m p l e x s e t ( vectr , i , gsl complex rect (0 ,0) ) ;
} else {
g s l c o m p l e x hh = g s l c o m p l e x r e c t ( 0 , 0 ) ;
int j ;
f o r ( j=i −1; j <D∗D; j ++){
hh = g s l c o m p l e x s u b ( hh ,
g s l c o m p l e x m u l ( g s l m a t r i x c o m p l e x g e t (L ,
i , j ) ∗ gsl vector complex get ( vectr , j ) ) ) ;
}
g s l v e c t o r c o m p l e x s e t ( v e c t r , i , g s l c o m p l e x d i v ( hh ,
g s l m a t r i x c o m p l e x g e t (L , i , i ) ) ) ;
}
}
#e l s e
f o r ( i =0; i <v e c t r −>s i z e ; i ++){
g s l v e c t o r c o m p l e x s e t ( vectr , i ,
g s l c o m p l e x r e c t ( g s l r n g u n i f o r m ( rng ) , g s l r n g u n i f o r m ( rng ) ) ) ;
}
g s l v e c t o r c o m p l e x s e t ( v e c t r , v e c t r −>s i z e −1, GSL COMPLEX ZERO) ;
powermethod (L , v e c t r , D∗D) ;
g s l r n g f r e e ( rng ) ;
#e n d i f // QR
i =0;
f o r (m=0; m<D; m++){
f o r ( n=0; n<D; n++){
g s l m a t r i x c o m p l e x s e t ( rho , n , m, g s l v e c t o r c o m p l e x g e t ( v e c t r , i ) ) ;
i f (m==n ) t r= g s l c o m p l e x a d d ( t r , g s l v e c t o r c o m p l e x g e t ( v e c t r , i ) ) ;
i ++;
}
}
g s l m a t r i x c o m p l e x s c a l e ( rho , g s l c o m p l e x i n v e r s e ( t r ) ) ;
g s l m a t r i x c o m p l e x f r e e (L) ;
gsl vector complex free ( vectr ) ;
}
double matrixnorm ( g s l m a t r i x c o m p l e x ∗A) {
/∗ Compute t h e i n f −norm o f m a t r i x A∗/
const s i z e t M = A−>s i z e 1 ;
double n = 0 , t ;
int i , j ;
f o r ( i =0; i <M; i ++){
f o r ( j =0; j <M; j ++){
t = g s l c o m p l e x a b s ( g s l m a t r i x c o m p l e x g e t (A, i , j ) ) ;
i f ( t > n) n = t ;
}
}
return n ;
}
double vectornorm ( g s l v e c t o r c o m p l e x ∗v ) {
40
/∗ Compute t h e i n f −norm o f v e c t o r v ∗/
const s i z e t M = v−>s i z e ;
double n = 0 , t ;
int i ;
f o r ( i =0; i <M; i ++){
t = gsl complex abs ( gsl vector complex get (v , i ) ) ;
i f ( t > n) n = t ;
}
return n ;
}
void powermethod ( g s l m a t r i x c o m p l e x ∗A, g s l v e c t o r c o m p l e x ∗v , unsigned i nt D) {
/∗ Compute t h e e i g e n v e c t o r whose e i g e n v a l u e i s l o w e r u s i n g t h e i n v e r s e power
method ∗/
i n t i , j , s i g =1;
double n ;
g s l m a t r i x c o m p l e x ∗L = g s l m a t r i x c o m p l e x a l l o c (D, D) ;
g s l m a t r i x c o m p l e x ∗M = g s l m a t r i x c o m p l e x a l l o c (D, D) ;
g s l v e c t o r c o m p l e x ∗w = g s l v e c t o r c o m p l e x a l l o c (D) ;
double d = matrixnorm (A) ∗ e p s ;
f o r ( i =0; i <D; i ++){
f o r ( j =0; j <D; j ++){
i f ( i==j ) {
g s l m a t r i x c o m p l e x s e t (L , i , i ,
g s l c o m p l e x a d d ( g s l m a t r i x c o m p l e x g e t (A, i , i ) ,
g s l c o m p l e x r e c t (d , 0) ) ) ;
} else {
g s l m a t r i x c o m p l e x s e t (L , i , j , g s l m a t r i x c o m p l e x g e t (A, i , j ) ) ;
}
}
}
g s l p e r m u t a t i o n ∗p = g s l p e r m u t a t i o n a l l o c (D) ;
g s l l i n a l g c o m p l e x L U d e c o m p (L , p , &s i g ) ;
g s l l i n a l g c o m p l e x L U i n v e r t (L , p , M) ;
g s l m a t r i x c o m p l e x f r e e (L) ;
gsl permutation free (p) ;
f o r ( i =0; i <19; i ++){
g s l b l a s z g e m v ( CblasNoTrans , GSL COMPLEX ONE, M, v , GSL COMPLEX ZERO, w) ;
n = vectornorm (w) ;
g s l v e c t o r c o m p l e x s c a l e (w, g s l c o m p l e x i n v e r s e ( g s l c o m p l e x r e c t ( n , 0 ) ) ) ;
g s l b l a s z g e m v ( CblasNoTrans , GSL COMPLEX ONE, A, w, GSL COMPLEX ZERO, v ) ;
n = vectornorm ( v ) ;
f o r ( j =0; j <D; j ++){
g s l v e c t o r c o m p l e x s e t ( v , j , g s l v e c t o r c o m p l e x g e t (w, j ) ) ;
}
i f ( n< e p s ) break ;
}
g s l m a t r i x c o m p l e x f r e e (M) ;
g s l v e c t o r c o m p l e x f r e e (w) ;
}
double e n e r g y d e n s i t y ( g s l m a t r i x c o m p l e x ∗H, g s l m a t r i x c o m p l e x ∗R,
41
m a t r i x c o m p l e x ∗ rho , double c , unsigned i nt D) {
m a t r i x c o m p l e x ∗Q = g s l m a t r i x c o m p l e x a l l o c (D, D) ;
m a t r i x c o m p l e x ∗C = g s l m a t r i x c o m p l e x a l l o c (D, D) ;
m a t r i x c o m p l e x ∗ aux = g s l m a t r i x c o m p l e x a l l o c (D, D) ;
m a t r i x c o m p l e x m e m c p y (Q, H) ;
b l a s z g e m m ( CblasConjTrans , CblasNoTrans , g s l c o m p l e x r e c t ( − 0.5 , 0 ) , R, R,
g s l c o m p l e x r e c t ( 0 , −1) , Q) ;
g s l b l a s z g e m m ( CblasNoTrans , CblasNoTrans , GSL COMPLEX ONE, Q, R,
GSL COMPLEX ZERO, C ) ;
g s l b l a s z g e m m ( CblasNoTrans , CblasNoTrans , g s l c o m p l e x r e c t ( −1 , 0 ) , R, Q,
GSL COMPLEX ONE, C ) ;
g s l b l a s z g e m m ( CblasNoTrans , CblasNoTrans , GSL COMPLEX ONE, R, R,
GSL COMPLEX ZERO, aux ) ;
g s l b l a s z g e m m ( CblasConjTrans , CblasNoTrans , GSL COMPLEX ONE, aux , aux ,
GSL COMPLEX ZERO, Q) ;
g s l m a t r i x c o m p l e x s c a l e (Q, g s l c o m p l e x r e c t ( c , 0 ) ) ;
g s l b l a s z g e m m ( CblasConjTrans , CblasNoTrans , GSL COMPLEX ONE, C, C,
GSL COMPLEX ZERO, aux ) ;
g s l m a t r i x c o m p l e x a d d (Q, aux ) ;
g s l b l a s z g e m m ( CblasNoTrans , CblasNoTrans , GSL COMPLEX ONE, rho , Q,
GSL COMPLEX ZERO, aux ) ;
g s l c o m p l e x z = GSL COMPLEX ZERO ;
unsigned i nt i ;
f o r ( i =0; i <D; i ++){
z = g s l c o m p l e x a d d ( z , g s l m a t r i x c o m p l e x g e t ( aux , i , i ) ) ;
}
g s l m a t r i x c o m p l e x f r e e (Q) ;
g s l m a t r i x c o m p l e x f r e e (C) ;
g s l m a t r i x c o m p l e x f r e e ( aux ) ;
return GSL REAL( z ) ;
gsl
gsl
gsl
gsl
gsl
gsl
}
p a r t i c l e n u m b e r ( g s l m a t r i x c o m p l e x ∗R, g s l m a t r i x c o m p l e x ∗ rho , unsigned
D) {
m a t r i x c o m p l e x ∗ aux = g s l m a t r i x c o m p l e x a l l o c (D, D) ;
m a t r i x c o m p l e x ∗C = g s l m a t r i x c o m p l e x a l l o c (D, D) ;
b l a s z g e m m ( CblasConjTrans , CblasNoTrans , GSL COMPLEX ONE, R, R,
GSL COMPLEX ZERO, aux ) ;
g s l b l a s z g e m m ( CblasNoTrans , CblasNoTrans , GSL COMPLEX ONE, aux , rho ,
GSL COMPLEX ZERO, C) ;
g s l c o m p l e x z = GSL COMPLEX ZERO ;
unsigned i nt i ;
f o r ( i =0; i <D; i ++){
z = g s l c o m p l e x a d d ( z , g s l m a t r i x c o m p l e x g e t (C, i , i ) ) ;
}
g s l m a t r i x c o m p l e x f r e e (C) ;
g s l m a t r i x c o m p l e x f r e e ( aux ) ;
return GSL REAL( z ) ;
double
int
gsl
gsl
gsl
}
i n t g s l l i n a l g c o m p l e x Q R d e c o m p ( g s l m a t r i x c o m p l e x ∗ A) {
/∗ Compute t h e QR d e c o m p o s i t i o n o f a complex m a t r i x
Code by Jonny T a y l o r :
h t t p : / / l i s t s . gnu . o r g / a r c h i v e / html / h e l p −g s l /2008 −01/ msg00079 . html ∗/
const s i z e t M = A−>s i z e 1 ;
42
const s i z e t N = A−>s i z e 2 ;
g s l v e c t o r c o m p l e x ∗ tau = g s l v e c t o r c o m p l e x a l l o c (GSL MIN (M, N) ) ;
size t i ;
f o r ( i = 0 ; i < GSL MIN (M, N) ; i ++)
{
/∗ Compute t h e H o u s e h o l d e r t r a n s f o r m a t i o n t o r e d u c e t h e j −t h
column o f t h e m a t r i x t o a m u l t i p l e o f t h e j −t h u n i t v e c t o r ∗/
g s l v e c t o r c o m p l e x v i e w c f u l l = g s l m a t r i x c o m p l e x c o l u m n (A, i ) ;
gsl vector complex view c = gsl vector complex subvector
(&( c f u l l . v e c t o r ) , i , M−i ) ;
gsl complex tau i =
gsl complex conjugate ( gsl linalg complex householder transform
(&( c . v e c t o r ) ) ) ;
g s l v e c t o r c o m p l e x s e t ( tau , i , t a u i ) ;
/∗ Apply t h e t r a n s f o r m a t i o n t o t h e r e m a i n i n g columns and
u p d a t e t h e norms ∗/
i f ( i + 1 < N)
{
g s l m a t r i x c o m p l e x v i e w m = g s l m a t r i x c o m p l e x s u b m a t r i x (A, i , i +
1 , M − i , N − ( i + 1) ) ;
g s l l i n a l g c o m p l e x h o u s e h o l d e r h m ( t a u i , &(c . v e c t o r ) , &(m. matrix ) ) ;
}
}
return GSL SUCCESS ;
}
B.2.
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
Cálculo de funciones de correlación
<s t d i o . h>
< s t d l i b . h>
< g s l / g s l m a t h . h>
< g s l / g s l r n g . h>//Random number g e n e r a t o r
< g s l / g s l v e c t o r . h> // Vector h a n d l i n g
< g s l / g s l m a t r i x . h> // Matrix h a n d l i n g
< g s l / g s l c o m p l e x . h> // Complex numbers
< g s l / g s l c o m p l e x m a t h . h> // Complex number o p e r a t i o n s
< g s l / g s l b l a s . h> // L i n e a r a l g e b r a e n g i n e
< g s l / g s l l i n a l g . h>
double e p s = 1 e −6;
void reprM ( g s l m a t r i x c o m p l e x ∗R0 , unsigned i n t dim ) ;
void r e p r v ( g s l v e c t o r c o m p l e x ∗v ) ;
void e x t r a c t ( double ∗x , g s l m a t r i x c o m p l e x ∗H0 , g s l m a t r i x c o m p l e x ∗R0 , unsigned
i n t D) ;
void expm ( g s l m a t r i x c o m p l e x ∗A, g s l c o m p l e x alpha , i n t dimx ) ;
43
void k r o n e c k e r ( g s l m a t r i x c o m p l e x ∗A, g s l m a t r i x c o m p l e x ∗B, unsigned i nt D,
g s l m a t r i x c o m p l e x ∗ prod ) ;
void kronAI ( g s l m a t r i x c o m p l e x ∗A, unsigned i nt D, g s l m a t r i x c o m p l e x ∗ prod ) ;
void kronIA ( g s l m a t r i x c o m p l e x ∗A, unsigned i nt D, g s l m a t r i x c o m p l e x ∗ prod ) ;
void s t e a d y s t a t e f i n d e r ( g s l m a t r i x c o m p l e x ∗H, g s l m a t r i x c o m p l e x ∗R,
g s l v e c t o r c o m p l e x ∗ rho , unsigned i nt D) ;
double matrixnorm ( g s l m a t r i x c o m p l e x ∗A) ;
double vectornorm ( g s l v e c t o r c o m p l e x ∗v ) ;
void powermethod ( g s l m a t r i x c o m p l e x ∗A, g s l v e c t o r c o m p l e x ∗v , unsigned i nt D) ;
void s p r e ( g s l m a t r i x c o m p l e x ∗A,
g s l m a t r i x c o m p l e x ∗preA , unsigned i n t D) ;
void s p o s t ( const g s l m a t r i x c o m p l e x ∗A, g s l m a t r i x c o m p l e x ∗ postA , unsigned i n t
t r a n s , unsigned i nt D) ;
i n t main ( ) {
int D = 6 , j , k ;
double x [ 2 ∗D∗D] , dx = 0 . 0 1 ;
g s l c o m p l e x c f f , cdd ;
FILE ∗ f ;
f = f o p e n ( ”KR D6 c02 . t x t ” , ” r t ” ) ;
f o r ( j =0; j <2∗(D) ∗ (D) ; j ++){
f s c a n f ( f , ” %l f ” , &x [ j ] ) ;
}
fclose ( f ) ;
gsl
gsl
gsl
gsl
gsl
gsl
gsl
gsl
gsl
gsl
gsl
gsl
gsl
matrix
matrix
matrix
vector
vector
vector
vector
matrix
matrix
matrix
matrix
matrix
matrix
complex
complex
complex
complex
complex
complex
complex
complex
complex
complex
complex
complex
complex
∗H = g s l m a t r i x c o m p l e x a l l o c (D, D) ;
∗R = g s l m a t r i x c o m p l e x a l l o c (D, D) ;
∗Q = g s l m a t r i x c o m p l e x a l l o c (D, D) ;
∗ rho = g s l v e c t o r c o m p l e x a l l o c (D∗D) ;
∗ vaux = g s l v e c t o r c o m p l e x a l l o c (D∗D) ;
∗ v f f = g s l v e c t o r c o m p l e x a l l o c (D∗D) ;
∗vdd = g s l v e c t o r c o m p l e x a l l o c (D∗D) ;
∗T = g s l m a t r i x c o m p l e x a l l o c (D∗D, D∗D) ;
∗RR = g s l m a t r i x c o m p l e x a l l o c (D∗D, D∗D) ;
∗RI = g s l m a t r i x c o m p l e x a l l o c (D∗D, D∗D) ;
∗IR = g s l m a t r i x c o m p l e x a l l o c (D∗D, D∗D) ;
∗A = g s l m a t r i x c o m p l e x a l l o c (D∗D, D∗D) ;
∗B = g s l m a t r i x c o m p l e x a l l o c (D∗D, D∗D) ;
e x t r a c t ( x , H, R, D) ;
s t e a d y s t a t e f i n d e r (H, R, rho , D) ;
g s l m a t r i x c o m p l e x m e m c p y (Q, H) ;
g s l b l a s z g e m m ( CblasConjTrans , CblasNoTrans , g s l c o m p l e x r e c t ( − 0.5 , 0 ) , R, R,
g s l c o m p l e x r e c t ( 0 , −1) , Q) ;
k r o n e c k e r (R, R, D, RR) ;
kronAI (Q, D, T) ;
kronIA (Q, D, IR ) ;
g s l m a t r i x c o m p l e x a d d (T, IR ) ;
g s l m a t r i x c o m p l e x a d d (T, RR) ;
kronAI (R, D, RI ) ;
kronIA (R, D, IR ) ;
g s l b l a s z g e m v ( CblasNoTrans , GSL COMPLEX ONE, IR , rho , GSL COMPLEX ZERO, v f f ) ;
g s l b l a s z g e m v ( CblasNoTrans , GSL COMPLEX ONE, RR, rho , GSL COMPLEX ZERO, vdd ) ;
44
expm (T, g s l c o m p l e x r e c t ( dx , 0 ) , D∗D) ;
f = f o p e n ( ” c o r r D 6 c 0 2 . t x t ” , ”wt” ) ;
g s l m a t r i x c o m p l e x m e m c p y (A, T) ;
f o r ( j =0; j <5000; j ++){
g s l b l a s z g e m m ( CblasNoTrans , CblasNoTrans , GSL COMPLEX ONE, T, A,
GSL COMPLEX ZERO, B) ;
g s l b l a s z g e m v ( CblasNoTrans , GSL COMPLEX ONE, B, v f f , GSL COMPLEX ZERO,
rho ) ;
g s l b l a s z g e m v ( CblasNoTrans , GSL COMPLEX ONE, RI , rho , GSL COMPLEX ZERO,
vaux ) ;
c f f = GSL COMPLEX ZERO ;
f o r ( k=0; k<D∗D; k+=D+1){
c f f = g s l c o m p l e x a d d ( c f f , g s l v e c t o r c o m p l e x g e t ( vaux , k ) ) ;
}
g s l b l a s z g e m v ( CblasNoTrans , GSL COMPLEX ONE, B, vdd , GSL COMPLEX ZERO,
rho ) ;
g s l b l a s z g e m v ( CblasNoTrans , GSL COMPLEX ONE, RR, rho , GSL COMPLEX ZERO,
vaux ) ;
cdd = GSL COMPLEX ZERO ;
f o r ( k=0; k<D∗D; k+=D+1){
cdd = g s l c o m p l e x a d d ( cdd , g s l v e c t o r c o m p l e x g e t ( vaux , k ) ) ;
}
f p r i n t f ( f , ” %l f \ t %l f \ t %l f \n” , j ∗dx , GSL REAL( c f f ) , GSL REAL( cdd ) ) ;
g s l m a t r i x c o m p l e x m e m c p y (A, B) ;
}
fclose ( f ) ;
return 0 ;
}
void reprM ( g s l m a t r i x c o m p l e x ∗R0 , unsigned i n t dim ) {
// A u x i l i a r f u n c t i o n t o p r i n t m a t r i c e s
unsigned i nt m, n ;
f o r (m=0; m<dim ; m++){
f o r ( n=0; n<dim ; n++){
p r i n t f ( ” %l f+ %l f i \ t ” , GSL REAL( g s l m a t r i x c o m p l e x g e t (R0 , m, n ) ) ,
GSL IMAG( g s l m a t r i x c o m p l e x g e t (R0 , m, n ) ) ) ;
}
p r i n t f ( ” \n” ) ;
}
p r i n t f ( ” \n” ) ;
}
void r e p r v ( g s l v e c t o r c o m p l e x ∗v ) {
unsigned i nt D = v−>s i z e , i ;
f o r ( i =0; i <D; i ++){
p r i n t f ( ” %.3 l f + %.3 l f i \ t ” , GSL REAL( g s l v e c t o r c o m p l e x g e t ( v , i ) ) ,
GSL IMAG( g s l v e c t o r c o m p l e x g e t ( v , i ) ) ) ;
}
p r i n t f ( ” \n” ) ;
45
}
void e x t r a c t ( double ∗x , g s l m a t r i x c o m p l e x ∗H0 , g s l m a t r i x c o m p l e x ∗R0 , unsigned
i n t D) {
unsigned i nt a , n ,m;
f o r (m=0; m<D;m++){
g s l m a t r i x c o m p l e x s e t (H0 , m, m, g s l c o m p l e x r e c t ( x [m] , 0 ) ) ;
}
a = D;
f o r (m=0; m<D;m++){
f o r ( n=m+1; n<D; n++){
g s l m a t r i x c o m p l e x s e t (H0 , m, n , g s l c o m p l e x r e c t ( x [ a ] , x [ a +1]) ) ;
g s l m a t r i x c o m p l e x s e t (H0 , n , m, g s l c o m p l e x r e c t ( x [ a ] , −x [ a +1]) ) ;
a += 2 ;
}
}
a =0;
f o r (m=0;m<D;m++){
f o r ( n=0;n<D; n++){
g s l m a t r i x c o m p l e x s e t (R0 , n , m, g s l c o m p l e x r e c t ( x [ a+D∗D] , 0 ) ) ;
a++;
}
}
}
void s p r e ( g s l m a t r i x c o m p l e x ∗A,
g s l m a t r i x c o m p l e x ∗preA , unsigned i n t D) {
g s l m a t r i x c o m p l e x s e t z e r o ( preA ) ;
unsigned i nt i ;
f o r ( i =0; i <D; i ++){
gsl matrix complex view block =
g s l m a t r i x c o m p l e x s u b m a t r i x ( preA , i ∗D, i ∗D, D,D) ;
g s l m a t r i x c o m p l e x m e m c p y (& b l o c k . matrix ,A) ;
}
}
void s p o s t ( const g s l m a t r i x c o m p l e x ∗A, g s l m a t r i x c o m p l e x ∗ postA , unsigned i n t
t r a n s , unsigned i nt D) {
g s l m a t r i x c o m p l e x s e t z e r o ( postA ) ;
unsigned i nt i , n , m;
gsl complex d ;
f o r (m=0;m<D;m++){
f o r ( n=0;n<D; n++){
i f ( trans ){
d = g s l c o m p l e x c o n j u g a t e ( g s l m a t r i x c o m p l e x g e t (A, n , m) ) ;
} else {
d = g s l m a t r i x c o m p l e x g e t (A, m, n ) ;
}
f o r ( i =0; i <D; i ++){
g s l m a t r i x c o m p l e x s e t ( postA , i+D∗n , i+D∗m, d ) ;
}
}
}
}
46
void expm ( g s l m a t r i x c o m p l e x ∗A, g s l c o m p l e x alpha , i n t dimx ) {
/∗ Code by S i j o Joseph , h t t p : / / s t a c k o v e r f l o w . com/a /14718470 ∗/
i n t j , k=0;
g s l c o m p l e x temp ;
g s l m a t r i x ∗ m a t r e a l =g s l m a t r i x a l l o c ( 2 ∗ dimx , 2 ∗ dimx ) ;
g s l m a t r i x ∗ e x p m a t r e a l =g s l m a t r i x a l l o c ( 2 ∗ dimx , 2 ∗ dimx ) ;
// C o n v e r t i n g t h e complex m a t r i x i n t o r e a l one u s i n g A=[ Areal ,
Aimag;−Aimag , A r e a l ]
f o r ( j = 0 ; j < dimx ; j ++){
f o r ( k = 0 ; k < dimx ; k++){
temp=g s l c o m p l e x m u l ( g s l m a t r i x c o m p l e x g e t (A, j , k ) , a l p h a ) ;
g s l m a t r i x s e t ( matreal , j , k , GSL REAL( temp ) ) ;
g s l m a t r i x s e t ( matreal , dimx+j , dimx+k , GSL REAL( temp ) ) ;
g s l m a t r i x s e t ( matreal , j , dimx+k , GSL IMAG( temp ) ) ;
g s l m a t r i x s e t ( matreal , dimx+j , k,−GSL IMAG( temp ) ) ;
}
}
g s l l i n a l g e x p o n e n t i a l s s ( matreal , expmatreal , . 0 1 ) ;
double r e a l p ;
double imagp ;
f o r ( j = 0 ; j < dimx ; j ++){
f o r ( k = 0 ; k < dimx ; k++){
r e a l p=g s l m a t r i x g e t ( expmatreal , j , k ) ;
imagp=g s l m a t r i x g e t ( expmatreal , j , dimx+k ) ;
g s l m a t r i x c o m p l e x s e t (A, j , k , g s l c o m p l e x r e c t ( r e a l p , imagp ) ) ;
}
}
g s l m a t r i x f r e e ( matreal ) ;
g s l m a t r i x f r e e ( expmatreal ) ;
}
void k r o n e c k e r ( g s l m a t r i x c o m p l e x ∗A, g s l m a t r i x c o m p l e x ∗B, unsigned i nt D,
g s l m a t r i x c o m p l e x ∗ prod ) {
/∗ Compute Kronecker p r o d u c t A \ o t i m e s B∗ ∗/
int i , j , k , l ;
gsl complex d ;
f o r ( i = 0 ; i < D; i ++){
f o r ( j = 0 ; j < D; j ++){
d = g s l m a t r i x c o m p l e x g e t (A, i , j ) ;
f o r ( k = 0 ; k < D; k++){
f o r ( l = 0 ; l < D; l ++){
g s l m a t r i x c o m p l e x s e t ( prod , D∗ i+k , D∗ j+l ,
gsl complex mul (d ,
g s l c o m p l e x c o n j u g a t e ( g s l m a t r i x c o m p l e x g e t (B, k , l ) ) )
);
}
}
}
}
}
void kronAI ( g s l m a t r i x c o m p l e x ∗A, unsigned i nt D, g s l m a t r i x c o m p l e x ∗ prod ) {
47
/∗ Compute Kronecker p r o d u c t A \ o t i m e s i d ∗/
int i , j , k ;
gsl complex d ;
f o r ( i =0; i <D; i ++){
f o r ( j =0; j <D; j ++){
d = g s l m a t r i x c o m p l e x g e t (A, i , j ) ;
f o r ( k=0; k<D; k++){
g s l m a t r i x c o m p l e x s e t ( prod , D∗ i+k , D∗ j+k , d ) ;
}
}
}
}
void kronIA ( g s l m a t r i x c o m p l e x ∗A, unsigned i nt D, g s l m a t r i x c o m p l e x ∗ prod ) {
/∗ Compute Kronecker p r o d u c t i d \ o t i m e s A∗ ∗/
int i , j , k ;
gsl complex d ;
f o r ( i =0; i <D; i ++){
f o r ( j =0; j <D; j ++){
d = g s l c o m p l e x c o n j u g a t e ( g s l m a t r i x c o m p l e x g e t (A, i , j ) ) ;
f o r ( k=0; k<D; k++){
g s l m a t r i x c o m p l e x s e t ( prod , i+k∗D, j+k∗D, d ) ;
}
}
}
}
void s t e a d y s t a t e f i n d e r ( g s l m a t r i x c o m p l e x ∗H, g s l m a t r i x c o m p l e x ∗R,
g s l v e c t o r c o m p l e x ∗ rho , unsigned i nt D) {
i n t i =0 , m, n ;
g s l c o m p l e x t r = GSL COMPLEX ZERO ;
g s l r n g ∗ rng = g s l r n g a l l o c ( g s l r n g t a u s ) ;
g s l m a t r i x c o m p l e x ∗L = g s l m a t r i x c o m p l e x a l l o c (D∗D, D∗D) ;
g s l m a t r i x c o m p l e x ∗ p o s t = g s l m a t r i x c o m p l e x a l l o c (D∗D, D∗D) ;
g s l m a t r i x c o m p l e x ∗ p r e = g s l m a t r i x c o m p l e x a l l o c (D∗D, D∗D) ;
g s l m a t r i x c o m p l e x ∗RtR = g s l m a t r i x c o m p l e x a l l o c (D, D) ;
s p r e (H, L , D) ;
s p o s t (H, post , 0 , D) ;
g s l m a t r i x c o m p l e x s u b (L , p o s t ) ;
s p r e (R, pre , D) ;
s p o s t (R, post , 1 , D) ;
g s l b l a s z g e m m ( CblasNoTrans , CblasNoTrans , g s l c o m p l e x r e c t ( 1 , 0 ) , pre , post ,
g s l c o m p l e x r e c t ( 0 , −1) , L) ;
g s l b l a s z g e m m ( CblasConjTrans , CblasNoTrans , g s l c o m p l e x r e c t ( 1 , 0 ) , R, R,
g s l c o m p l e x r e c t ( 0 , 0 ) , RtR) ;
s p r e (RtR , pre , D) ;
s p o s t (RtR , post , 0 , D) ;
g s l m a t r i x c o m p l e x a d d ( pre , p o s t ) ;
g s l m a t r i x c o m p l e x s c a l e ( pre , g s l c o m p l e x r e c t ( 0 . 5 , 0 ) ) ;
g s l m a t r i x c o m p l e x s u b (L , p r e ) ;
g s l m a t r i x c o m p l e x f r e e ( pre ) ;
g s l m a t r i x c o m p l e x f r e e (RtR) ;
48
gsl matrix complex free ( post ) ;
f o r ( i =0; i <rho−>s i z e ; i ++){
g s l v e c t o r c o m p l e x s e t ( rho , i ,
g s l c o m p l e x r e c t ( g s l r n g u n i f o r m ( rng ) , g s l r n g u n i f o r m ( rng ) ) ) ;
}
powermethod (L , rho , D∗D) ;
g s l m a t r i x c o m p l e x f r e e (L) ;
g s l r n g f r e e ( rng ) ;
i =0;
f o r (m=0; m<D∗D; m+= (D+1) ) {
t r= g s l c o m p l e x a d d ( t r , g s l v e c t o r c o m p l e x g e t ( rho , m) ) ;
}
g s l v e c t o r c o m p l e x s c a l e ( rho , g s l c o m p l e x i n v e r s e ( t r ) ) ;
}
double matrixnorm ( g s l m a t r i x c o m p l e x ∗A) {
/∗ Compute t h e i n f −norm o f m a t r i x A∗/
const s i z e t M = A−>s i z e 1 ;
double n = 0 , t ;
int i , j ;
f o r ( i =0; i <M; i ++){
f o r ( j =0; j <M; j ++){
t = g s l c o m p l e x a b s ( g s l m a t r i x c o m p l e x g e t (A, i , j ) ) ;
i f ( t > n) n = t ;
}
}
return n ;
}
double vectornorm ( g s l v e c t o r c o m p l e x ∗v ) {
/∗ Compute t h e i n f −norm o f v e c t o r v ∗/
const s i z e t M = v−>s i z e ;
double n = 0 , t ;
int i ;
f o r ( i =0; i <M; i ++){
t = gsl complex abs ( gsl vector complex get (v , i ) ) ;
i f ( t > n) n = t ;
}
return n ;
}
void powermethod ( g s l m a t r i x c o m p l e x ∗A, g s l v e c t o r c o m p l e x ∗v , unsigned i nt D) {
/∗ Compute t h e e i g e n v e c t o r whose e i g e n v a l u e i s l o w e r u s i n g t h e i n v e r s e power
method ∗/
i n t i , j , s i g =1;
double n ;
g s l m a t r i x c o m p l e x ∗L = g s l m a t r i x c o m p l e x a l l o c (D, D) ;
g s l m a t r i x c o m p l e x ∗M = g s l m a t r i x c o m p l e x a l l o c (D, D) ;
g s l v e c t o r c o m p l e x ∗w = g s l v e c t o r c o m p l e x a l l o c (D) ;
double d = matrixnorm (A) ∗ e p s ;
f o r ( i =0; i <D; i ++){
f o r ( j =0; j <D; j ++){
i f ( i==j ) {
49
g s l m a t r i x c o m p l e x s e t (L , i , i ,
g s l c o m p l e x a d d ( g s l m a t r i x c o m p l e x g e t (A, i , i ) ,
g s l c o m p l e x r e c t (d , 0) ) ) ;
} else {
g s l m a t r i x c o m p l e x s e t (L , i , j , g s l m a t r i x c o m p l e x g e t (A, i , j ) ) ;
}
}
}
gsl
gsl
gsl
gsl
gsl
p e r m u t a t i o n ∗p = g s l p e r m u t a t i o n a l l o c (D) ;
l i n a l g c o m p l e x L U d e c o m p (L , p , &s i g ) ;
l i n a l g c o m p l e x L U i n v e r t (L , p , M) ;
m a t r i x c o m p l e x f r e e (L) ;
permutation free (p) ;
f o r ( i =0; i <19; i ++){
g s l b l a s z g e m v ( CblasNoTrans , GSL COMPLEX ONE, M, v , GSL COMPLEX ZERO, w) ;
n = vectornorm (w) ;
g s l v e c t o r c o m p l e x s c a l e (w, g s l c o m p l e x i n v e r s e ( g s l c o m p l e x r e c t ( n , 0 ) ) ) ;
g s l b l a s z g e m v ( CblasNoTrans , GSL COMPLEX ONE, A, w, GSL COMPLEX ZERO, v ) ;
n = vectornorm ( v ) ;
f o r ( j =0; j <D; j ++){
g s l v e c t o r c o m p l e x s e t ( v , j , g s l v e c t o r c o m p l e x g e t (w, j ) ) ;
}
i f ( n< e p s ) break ;
}
g s l m a t r i x c o m p l e x f r e e (M) ;
g s l v e c t o r c o m p l e x f r e e (w) ;
}
50
Descargar