mirror of
https://github.com/vale981/master-thesis
synced 2025-03-08 19:31:40 -05:00
550 lines
18 KiB
Org Mode
550 lines
18 KiB
Org Mode
#+PROPERTY: header-args :session rich_hops_eflow :kernel python :pandoc t :async yes
|
||
|
||
* Setup
|
||
** Jupyter
|
||
#+begin_src jupyter-python
|
||
%load_ext autoreload
|
||
%autoreload 2
|
||
%load_ext jupyter_spaces
|
||
#+end_src
|
||
|
||
#+RESULTS:
|
||
|
||
** Matplotlib
|
||
#+begin_src jupyter-python
|
||
import matplotlib
|
||
import matplotlib.pyplot as plt
|
||
|
||
#matplotlib.use("TkCairo", force=True)
|
||
%gui tk
|
||
%matplotlib inline
|
||
plt.style.use('ggplot')
|
||
#+end_src
|
||
|
||
#+RESULTS:
|
||
|
||
** Richard (old) HOPS
|
||
#+begin_src jupyter-python
|
||
import hierarchyLib
|
||
import hierarchyData
|
||
import numpy as np
|
||
|
||
from stocproc.stocproc import StocProc_FFT
|
||
import bcf
|
||
from dataclasses import dataclass
|
||
import scipy
|
||
import scipy.misc
|
||
import scipy.signal
|
||
#+end_src
|
||
|
||
#+RESULTS:
|
||
|
||
** Auxiliary Definitions
|
||
#+begin_src jupyter-python
|
||
σ1 = np.matrix([[0,1],[1,0]])
|
||
σ2 = np.matrix([[0,-1j],[1j,0]])
|
||
σ3 = np.matrix([[1,0],[0,-1]])
|
||
#+end_src
|
||
|
||
#+RESULTS:
|
||
|
||
* Model Setup
|
||
Basic parameters.
|
||
#+begin_src jupyter-python
|
||
γ = 5 # coupling ratio
|
||
ω_c = 1 # center of spect. dens
|
||
δ = 1 # breadth BCF
|
||
t_max = 10
|
||
t_steps = 500
|
||
k_max = 2
|
||
seed = 100
|
||
H_s = σ3 + np.eye(2)
|
||
L = 1 / 2 * (σ1 - 1j * σ2) * γ
|
||
ψ_0 = np.array([1, 0])
|
||
W = ω_c * 1j + δ # exponent BCF
|
||
N = 100
|
||
#+end_src
|
||
|
||
#+RESULTS:
|
||
|
||
** BCF
|
||
#+begin_src jupyter-python
|
||
@dataclass
|
||
class CauchyBCF:
|
||
δ: float
|
||
ω_c: float
|
||
|
||
def I(self, ω):
|
||
return np.sqrt(self.δ) / (self.δ + (ω - self.ω_c) ** 2 / self.δ)
|
||
|
||
def __call__(self, τ):
|
||
return np.sqrt(self.δ) * np.exp(-1j * self.ω_c * τ - np.abs(τ) * self.δ)
|
||
|
||
def __bfkey__(self):
|
||
return self.δ, self.ω_c
|
||
|
||
α = CauchyBCF(δ, ω_c)
|
||
#+end_src
|
||
|
||
#+RESULTS:
|
||
|
||
*** Plot
|
||
#+begin_src jupyter-python
|
||
%%space plot
|
||
t = np.linspace(0, t_max, 1000)
|
||
ω = np.linspace(ω_c - 10, ω_c + 10, 1000)
|
||
fig, axs = plt.subplots(2)
|
||
axs[0].plot(t, np.real(α(t)))
|
||
axs[0].plot(t, np.imag(α(t)))
|
||
axs[1].plot(ω, α.I(ω))
|
||
#+end_src
|
||
|
||
#+RESULTS:
|
||
:RESULTS:
|
||
| <matplotlib.lines.Line2D | at | 0x7f32d17675e0> |
|
||
| <matplotlib.lines.Line2D | at | 0x7f32d1767880> |
|
||
| <matplotlib.lines.Line2D | at | 0x7f32d1767df0> |
|
||
[[file:./.ob-jupyter/252b4713c37e957d1909f4354fd107d3803ecda2.png]]
|
||
:END:
|
||
|
||
** Hops setup
|
||
#+begin_src jupyter-python
|
||
HierachyParam = hierarchyData.HiP(
|
||
k_max=k_max,
|
||
# g_scale=None,
|
||
# sample_method='random',
|
||
seed=seed,
|
||
nonlinear=False,
|
||
# normalized=False,
|
||
# terminator=False,
|
||
result_type=hierarchyData.RESULT_TYPE_ALL,
|
||
# accum_only=None,
|
||
# rand_skip=None
|
||
)
|
||
#+end_src
|
||
|
||
#+RESULTS:
|
||
|
||
Integration.
|
||
#+begin_src jupyter-python
|
||
IntegrationParam = hierarchyData.IntP(
|
||
t_max=t_max,
|
||
t_steps=t_steps,
|
||
# integrator_name='zvode',
|
||
# atol=1e-8,
|
||
# rtol=1e-8,
|
||
# order=5,
|
||
# nsteps=5000,
|
||
# method='bdf',
|
||
# t_steps_skip=1
|
||
)
|
||
#+end_src
|
||
|
||
#+RESULTS:
|
||
|
||
And now the system.
|
||
#+begin_src jupyter-python
|
||
SystemParam = hierarchyData.SysP(
|
||
H_sys=H_s,
|
||
L=L,
|
||
psi0=ψ_0, # excited qubit
|
||
g=np.array([np.sqrt(δ)]),
|
||
w=np.array([W]),
|
||
H_dynamic=[],
|
||
bcf_scale=1, # some coupling strength (scaling of the fit parameters 'g_i')
|
||
gw_hash=None, # this is used to load g,w from some database
|
||
len_gw=1,
|
||
)
|
||
#+end_src
|
||
|
||
#+RESULTS:
|
||
|
||
The quantum noise.
|
||
#+begin_src jupyter-python
|
||
Eta = StocProc_FFT(
|
||
α.I,
|
||
t_max,
|
||
α,
|
||
negative_frequencies=True,
|
||
seed=seed,
|
||
intgr_tol=1e-2,
|
||
intpl_tol=1e-2,
|
||
scale=1,
|
||
)
|
||
#+end_src
|
||
|
||
#+RESULTS:
|
||
#+begin_example
|
||
stocproc.stocproc - INFO - use neg freq
|
||
stocproc.method_ft - INFO - get_dt_for_accurate_interpolation, please wait ...
|
||
stocproc.method_ft - INFO - acc interp N 33 dt 2.88e-01 -> diff 7.57e-03
|
||
stocproc.method_ft - INFO - requires dt < 2.878e-01
|
||
stocproc.method_ft - INFO - get_N_a_b_for_accurate_fourier_integral, please wait ...
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-02 N 32 yields: interval [-8.95e+00,1.09e+01] diff 2.01e-01
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-03 N 32 yields: interval [-3.06e+01,3.26e+01] diff 6.40e-01
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-02 N 64 yields: interval [-8.95e+00,1.09e+01] diff 2.00e-01
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-04 N 32 yields: interval [-9.90e+01,1.01e+02] diff 1.90e+00
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-03 N 64 yields: interval [-3.06e+01,3.26e+01] diff 1.31e-01
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-02 N 128 yields: interval [-8.95e+00,1.09e+01] diff 2.00e-01
|
||
stocproc.method_ft - INFO - increasing N while shrinking the interval does lower the error -> try next level
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-05 N 32 yields: interval [-3.15e+02,3.17e+02] diff 2.68e+00
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-04 N 64 yields: interval [-9.90e+01,1.01e+02] diff 1.15e+00
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-03 N 128 yields: interval [-3.06e+01,3.26e+01] diff 6.33e-02
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-02 N 256 yields: interval [-8.95e+00,1.09e+01] diff 2.00e-01
|
||
stocproc.method_ft - INFO - increasing N while shrinking the interval does lower the error -> try next level
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-06 N 32 yields: interval [-9.99e+02,1.00e+03] diff 2.99e+00
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-05 N 64 yields: interval [-3.15e+02,3.17e+02] diff 2.29e+00
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-04 N 128 yields: interval [-9.90e+01,1.01e+02] diff 4.21e-01
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-03 N 256 yields: interval [-3.06e+01,3.26e+01] diff 6.33e-02
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-02 N 512 yields: interval [-8.95e+00,1.09e+01] diff 2.00e-01
|
||
stocproc.method_ft - INFO - increasing N while shrinking the interval does lower the error -> try next level
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-07 N 32 yields: interval [-3.16e+03,3.16e+03] diff 3.09e+00
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-06 N 64 yields: interval [-9.99e+02,1.00e+03] diff 2.84e+00
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-05 N 128 yields: interval [-3.15e+02,3.17e+02] diff 1.66e+00
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-04 N 256 yields: interval [-9.90e+01,1.01e+02] diff 5.63e-02
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-03 N 512 yields: interval [-3.06e+01,3.26e+01] diff 6.33e-02
|
||
stocproc.method_ft - INFO - increasing N while shrinking the interval does lower the error -> try next level
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-08 N 32 yields: interval [-1.00e+04,1.00e+04] diff 3.13e+00
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-07 N 64 yields: interval [-3.16e+03,3.16e+03] diff 3.04e+00
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-06 N 128 yields: interval [-9.99e+02,1.00e+03] diff 2.57e+00
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-05 N 256 yields: interval [-3.15e+02,3.17e+02] diff 8.81e-01
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-04 N 512 yields: interval [-9.90e+01,1.01e+02] diff 2.00e-02
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-03 N 1024 yields: interval [-3.06e+01,3.26e+01] diff 6.33e-02
|
||
stocproc.method_ft - INFO - increasing N while shrinking the interval does lower the error -> try next level
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-09 N 32 yields: interval [-3.16e+04,3.16e+04] diff 3.14e+00
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-08 N 64 yields: interval [-1.00e+04,1.00e+04] diff 3.11e+00
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-07 N 128 yields: interval [-3.16e+03,3.16e+03] diff 2.95e+00
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-06 N 256 yields: interval [-9.99e+02,1.00e+03] diff 2.10e+00
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-05 N 512 yields: interval [-3.15e+02,3.17e+02] diff 2.47e-01
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-04 N 1024 yields: interval [-9.90e+01,1.01e+02] diff 2.00e-02
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-03 N 2048 yields: interval [-3.06e+01,3.26e+01] diff 6.33e-02
|
||
stocproc.method_ft - INFO - increasing N while shrinking the interval does lower the error -> try next level
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-10 N 32 yields: interval [-1.00e+05,1.00e+05] diff 3.14e+00
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-09 N 64 yields: interval [-3.16e+04,3.16e+04] diff 3.13e+00
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-08 N 128 yields: interval [-1.00e+04,1.00e+04] diff 3.08e+00
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-07 N 256 yields: interval [-3.16e+03,3.16e+03] diff 2.77e+00
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-06 N 512 yields: interval [-9.99e+02,1.00e+03] diff 1.41e+00
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-05 N 1024 yields: interval [-3.15e+02,3.17e+02] diff 1.94e-02
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-04 N 2048 yields: interval [-9.90e+01,1.01e+02] diff 2.00e-02
|
||
stocproc.method_ft - INFO - increasing N while shrinking the interval does lower the error -> try next level
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-11 N 32 yields: interval [-3.16e+05,3.16e+05] diff 3.14e+00
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-10 N 64 yields: interval [-1.00e+05,1.00e+05] diff 3.14e+00
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-09 N 128 yields: interval [-3.16e+04,3.16e+04] diff 3.12e+00
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-08 N 256 yields: interval [-1.00e+04,1.00e+04] diff 3.02e+00
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-07 N 512 yields: interval [-3.16e+03,3.16e+03] diff 2.44e+00
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-06 N 1024 yields: interval [-9.99e+02,1.00e+03] diff 6.29e-01
|
||
stocproc.method_ft - INFO - J_w_min:1.00e-05 N 2048 yields: interval [-3.15e+02,3.17e+02] diff 6.32e-03
|
||
stocproc.method_ft - INFO - return, cause tol of 0.01 was reached
|
||
stocproc.method_ft - INFO - requires dx < 3.088e-01
|
||
stocproc.stocproc - INFO - Fourier Integral Boundaries: [-3.152e+02, 3.172e+02]
|
||
stocproc.stocproc - INFO - Number of Nodes : 2048
|
||
stocproc.stocproc - INFO - yields dx : 3.088e-01
|
||
stocproc.stocproc - INFO - yields dt : 9.935e-03
|
||
stocproc.stocproc - INFO - yields t_max : 2.034e+01
|
||
#+end_example
|
||
|
||
* Actual Hops
|
||
Generate the key for binary caching.
|
||
#+begin_src jupyter-python
|
||
hi_key = hierarchyData.HIMetaKey_type(
|
||
HiP=HierachyParam,
|
||
IntP=IntegrationParam,
|
||
SysP=SystemParam,
|
||
Eta=Eta,
|
||
EtaTherm=None,
|
||
)
|
||
#+end_src
|
||
|
||
#+RESULTS:
|
||
|
||
Initialize Hierarchy.
|
||
#+begin_src jupyter-python
|
||
myHierarchy = hierarchyLib.HI(hi_key, number_of_samples=N, desc="run a test case")
|
||
#+end_src
|
||
|
||
#+RESULTS:
|
||
: init Hi class, use 6 equation
|
||
: /home/hiro/Documents/Projects/UNI/master/masterarb/python/richard_hops/hierarchyLib.py:1058: UserWarning: sum_k_max is not implemented! DO SO BEFORE NEXT USAGE (use simplex).HierarchyParametersType does not yet know about sum_k_max
|
||
: warnings.warn(
|
||
|
||
Run the integration.
|
||
#+begin_src jupyter-python
|
||
myHierarchy.integrate_simple(data_name="energy_flow_new.data", overwrite=True)
|
||
#+end_src
|
||
|
||
#+RESULTS:
|
||
#+begin_example
|
||
samples :0.0%
|
||
integration :0.0%
|
||
[2A[8m[0msamples :2.0%
|
||
integration :40.4%
|
||
[2A[8m[0msamples :5.0%
|
||
integration :19.0%
|
||
[2A[8m[0msamples :8.0%
|
||
integration :4.6%
|
||
[2A[8m[0msamples :11.0%
|
||
integration :1.8%
|
||
[2A[8m[0msamples :14.0%
|
||
integration :1.0%
|
||
[2A[8m[0msamples :16.0%
|
||
integration :99.8%
|
||
[2A[8m[0msamples :19.0%
|
||
integration :99.8%
|
||
[2A[8m[0msamples :23.0%
|
||
integration :0.8%
|
||
[2A[8m[0msamples :25.0%
|
||
integration :87.8%
|
||
[2A[8m[0msamples :28.0%
|
||
integration :69.0%
|
||
[2A[8m[0msamples :31.0%
|
||
integration :62.0%
|
||
[2A[8m[0msamples :34.0%
|
||
integration :55.6%
|
||
[2A[8m[0msamples :37.0%
|
||
integration :49.8%
|
||
[2A[8m[0msamples :40.0%
|
||
integration :39.6%
|
||
[2A[8m[0msamples :43.0%
|
||
integration :39.4%
|
||
[2A[8m[0msamples :46.0%
|
||
integration :28.2%
|
||
[2A[8m[0msamples :49.0%
|
||
integration :28.0%
|
||
[2A[8m[0msamples :52.0%
|
||
integration :20.4%
|
||
[2A[8m[0msamples :55.0%
|
||
integration :17.2%
|
||
[2A[8m[0msamples :58.0%
|
||
integration :12.6%
|
||
[2A[8m[0msamples :61.0%
|
||
integration :18.6%
|
||
[2A[8m[0msamples :64.0%
|
||
integration :10.2%
|
||
[2A[8m[0msamples :66.0%
|
||
integration :82.8%
|
||
[2A[8m[0msamples :69.0%
|
||
integration :55.6%
|
||
[2A[8m[0msamples :72.0%
|
||
integration :44.8%
|
||
[2A[8m[0msamples :75.0%
|
||
integration :41.2%
|
||
[2A[8m[0msamples :78.0%
|
||
integration :33.2%
|
||
[2A[8m[0msamples :81.0%
|
||
integration :27.8%
|
||
[2A[8m[0msamples :84.0%
|
||
integration :30.0%
|
||
[2A[8m[0msamples :87.0%
|
||
integration :20.0%
|
||
[2A[8m[0msamples :90.0%
|
||
integration :11.2%
|
||
[2A[8m[0msamples :93.0%
|
||
integration :10.2%
|
||
[2A[8m[0msamples :96.0%
|
||
integration :7.8%
|
||
[2A[8m[0msamples :99.0%
|
||
integration :0.8%
|
||
[2A[8m[0msamples : 100%
|
||
integration :0.0%
|
||
[0A[8m[0m
|
||
#+end_example
|
||
Get the samples.
|
||
#+begin_src jupyter-python
|
||
# to access the data the 'hi_key' is used to find the data in the hdf5 file
|
||
with hierarchyData.HIMetaData(hid_name="energy_flow_new.data", hid_path=".") as metaData:
|
||
with metaData.get_HIData(hi_key, read_only=True) as data:
|
||
smp = data.get_samples()
|
||
print("{} samples found in database".format(smp))
|
||
τ = data.get_time()
|
||
rho_τ = data.get_rho_t()
|
||
s_proc = np.array(data.stoc_proc)
|
||
states = np.array(data.aux_states).copy()
|
||
ψ_1 = np.array(data.aux_states)[:, :, 0:2]
|
||
ψ_0 = np.array(data.stoc_traj)
|
||
y = np.array(data.y)
|
||
#+end_src
|
||
|
||
#+RESULTS:
|
||
: 200 samples found in database
|
||
|
||
Calculate energy.
|
||
#+begin_src jupyter-python
|
||
energy = np.array([np.trace(ρ * H_s).real/np.trace(ρ).real for ρ in rho_τ])
|
||
plt.plot(τ, energy)
|
||
#+end_src
|
||
|
||
#+RESULTS:
|
||
:RESULTS:
|
||
| <matplotlib.lines.Line2D | at | 0x7f32e51e6d00> |
|
||
[[file:./.ob-jupyter/be6c2de12726698c7cc02ae53a819ba08e14f319.png]]
|
||
:END:
|
||
|
||
#+begin_src jupyter-python
|
||
%%space plot
|
||
plt.plot(τ, np.trace(rho_τ.T).real)
|
||
#+end_src
|
||
|
||
#+RESULTS:
|
||
:RESULTS:
|
||
| <matplotlib.lines.Line2D | at | 0x7f32e5154ca0> |
|
||
[[file:./.ob-jupyter/3f92fa53823636bc644ef2400693567d7f641b4e.png]]
|
||
:END:
|
||
|
||
* Energy Flow
|
||
:PROPERTIES:
|
||
:ID: eefb1594-e399-4d24-9dd7-a57addd42e65
|
||
:END:
|
||
#+begin_src jupyter-python
|
||
ψ_1.shape
|
||
#+end_src
|
||
|
||
#+RESULTS:
|
||
| 160 | 500 | 2 |
|
||
|
||
Let's look at the norm.
|
||
#+begin_src jupyter-python
|
||
plt.plot(τ, (ψ_1[0].conj() * ψ_1[0]).sum(axis=1).real)
|
||
#+end_src
|
||
|
||
#+RESULTS:
|
||
:RESULTS:
|
||
| <matplotlib.lines.Line2D | at | 0x7f32e50c4a90> |
|
||
[[file:./.ob-jupyter/05059610be839a612c11be140a5ad0e2d6bd2ab4.png]]
|
||
:END:
|
||
|
||
And try to calculate the energy flow.
|
||
#+begin_src jupyter-python
|
||
def flow_for_traj(ψ_0, ψ_1):
|
||
a = np.array((L @ ψ_0.T).T)
|
||
return np.array(2 * (1j * -W * np.sum(a.conj() * ψ_1, axis=1)).real).flatten()
|
||
|
||
|
||
def flow_for_traj_alt(ψ_0, y):
|
||
Eta.new_process(y)
|
||
eta_dot = scipy.misc.derivative(Eta, τ, dx=1e-8)
|
||
a = np.array((L @ ψ_0.T).T)
|
||
|
||
return -(
|
||
2j * eta_dot.conj() * np.array((np.sum(ψ_0.conj() * a, axis=1))).flatten()
|
||
).real
|
||
#+end_src
|
||
|
||
#+RESULTS:
|
||
|
||
Now we calculate the average over all trajectories.
|
||
#+begin_src jupyter-python
|
||
j = np.zeros_like(τ)
|
||
for i in range(0, N):
|
||
j += flow_for_traj(ψ_0[i], ψ_1[i])
|
||
j /= N
|
||
#+end_src
|
||
|
||
#+RESULTS:
|
||
|
||
And do the same with the alternative implementation.
|
||
#+begin_src jupyter-python
|
||
ja = np.zeros_like(τ)
|
||
for i in range(0, N):
|
||
ja += flow_for_traj_alt(ψ_0[i], y[i])
|
||
ja /= N
|
||
#+end_src
|
||
|
||
#+RESULTS:
|
||
|
||
And plot it :)
|
||
#+begin_src jupyter-python
|
||
%matplotlib inline
|
||
plt.plot(τ, j)
|
||
#plt.plot(τ, ja)
|
||
plt.show()
|
||
#+end_src
|
||
|
||
#+RESULTS:
|
||
[[file:./.ob-jupyter/750be1a5e9455c104056c0615334e80853388e20.png]]
|
||
|
||
Let's calculate the integrated energy.
|
||
#+begin_src jupyter-python
|
||
E_t = np.array([0] + [scipy.integrate.simpson(j[0:n], τ[0:n]) for n in range(1, len(τ))])
|
||
E_t[-1]
|
||
#+end_src
|
||
|
||
#+RESULTS:
|
||
: 1.999601704648048
|
||
|
||
With this we can retrieve the energy of the interaction Hamiltonian.
|
||
#+begin_src jupyter-python
|
||
E_I = 2 - energy - E_t
|
||
#+end_src
|
||
|
||
#+RESULTS:
|
||
|
||
#+begin_src jupyter-python
|
||
%%space plot
|
||
plt.rcParams['figure.figsize'] = [15, 10]
|
||
#plt.plot(τ, j, label="$J$", linestyle='--')
|
||
plt.plot(τ, E_t, label=r"$\langle H_{\mathrm{B}}\rangle$")
|
||
plt.plot(τ, E_I, label=r"$\langle H_{\mathrm{I}}\rangle$")
|
||
plt.plot(τ, energy, label=r"$\langle H_{\mathrm{S}}\rangle$")
|
||
|
||
plt.xlabel("τ")
|
||
plt.legend()
|
||
plt.show()
|
||
#+end_src
|
||
|
||
#+RESULTS:
|
||
:RESULTS:
|
||
| <matplotlib.lines.Line2D | at | 0x7f32e501ec40> |
|
||
| <matplotlib.lines.Line2D | at | 0x7f32e502d070> |
|
||
| <matplotlib.lines.Line2D | at | 0x7f32e502d3a0> |
|
||
: Text(0.5, 0, 'τ')
|
||
: <matplotlib.legend.Legend at 0x7f32e50892e0>
|
||
[[file:./.ob-jupyter/45f86f6728fd17bb4bfc0b6d9e8f5ad1fc14898b.png]]
|
||
:END:
|
||
#+RESULTS:
|
||
|
||
* System + Interaction Energy
|
||
:PROPERTIES:
|
||
:ID: cbc95df0-609d-4b1f-a51d-ebca7b680ec7
|
||
:END:
|
||
#+begin_src jupyter-python
|
||
def h_si_for_traj(ψ_0, ψ_1):
|
||
a = np.array((L @ ψ_0.T).T)
|
||
b = np.array((H_s @ ψ_0.T).T)
|
||
E_i = np.array(2 * (-1j * np.sum(a.conj() * ψ_1, axis=1)).real).flatten()
|
||
E_s = np.array(np.sum(b.conj() * ψ_0, axis=1)).flatten().real
|
||
|
||
return E_i + E_s
|
||
|
||
def h_si_for_traj_alt(ψ_0, y):
|
||
Eta.new_process(y)
|
||
|
||
a = np.array((L.conj().T @ ψ_0.T).T)
|
||
b = np.array((H_s @ ψ_0.T).T)
|
||
E_i = np.array(2 * (Eta(τ) * 1j * np.sum(a.conj() * ψ_0, axis=1)).real).flatten()
|
||
E_s = np.array(np.sum(b.conj() * ψ_0, axis=1)).flatten().real
|
||
|
||
return E_i + E_s
|
||
#+end_src
|
||
|
||
#+RESULTS:
|
||
|
||
#+begin_src jupyter-python
|
||
e_si = np.zeros_like(τ)
|
||
for i in range(0, N):
|
||
e_si += h_si_for_traj(ψ_0[i], ψ_1[i])
|
||
e_si /= N
|
||
#+end_src
|
||
|
||
#+RESULTS:
|
||
|
||
Checks out.
|
||
#+begin_src jupyter-python
|
||
plt.plot(τ, e_si)
|
||
plt.plot(τ, E_I + energy)
|
||
#+end_src
|
||
|
||
#+RESULTS:
|
||
:RESULTS:
|
||
| <matplotlib.lines.Line2D | at | 0x7f32e4ebbc10> |
|
||
[[file:./.ob-jupyter/db7e2b07936c085337617799cbca51600a0ad57e.png]]
|
||
:END:
|