Skip to content

How to apply a single creation/annihilation operator to a finite MPS ? #160

@Jason-zo

Description

@Jason-zo

Dear Maartenvd,

Thanks for you and other contributors' great work!
I have a problem that how to apply a single creation/annihilation operator to a finite MPS and get a new MPS?

Usually, we need not to consider this issue because the creation operator and the annihilation operator's auxiliary legs A are connected (TensorMap(..., V ← V $\otimes$ A) and TensorMap(..., A $\otimes$ V ← V) ) that constructs a single site or two sites operator like $\hat{O_i}=c^\dagger_i c_i$ or $\hat{O_{ij}} = c^\dagger_i c_j$. In this case, it is easy to calculate expectation or correlation value $\langle 0|\hat{O}|0\rangle$.

However, when it comes to the time evolution, such as $\langle 0|S^+(t) S^-(0) |0\rangle$ or $\langle 0|c(t) c^\dagger(0) |0\rangle$, the above question makes sense that we need to evolve the MPS $S^- |0\rangle$ or $c^\dagger |0\rangle$ into $e^{-iHt} S^- |0\rangle$ or $e^{-iHt}c^\dagger|0\rangle$.

To obtain the new MPS ($S^- |0\rangle$ or $c^\dagger |0\rangle$), one need to deal with the single auxiliary vector space A of the creation/annihilation operator. Please forgive me as a beginner, my naive idea is to add identity operators on the other sites, where the left and right virtual spaces of the identity operators are the auxiliary vector space A. I construct

$c^\dagger_1 \mathbb{1}_2$
$c_1 \mathbb{1}_2$

as

    ID1 = TensorMap(ones, ComplexF64, As ⊗ Ps ← Ps)
    ID2 = TensorMap(ones, ComplexF64, Ps ← As ⊗ Ps)
    if ifdagger
        @planar twosite[-1 -2; -3 -4] := c⁺[-1; -3 1] * ID1[1 -2; -4]
    else
        @planar twosite[-1 -2; -3 -4] := c[-1 1; -3] * ID2[-2; 1 -4]
    end
    return FiniteMPO(twosite)

and

$c^\dagger_1 \mathbb{1}_2 \mathbb{1}_3 \mathbb{1}_4$
$c_1 \mathbb{1}_2 \mathbb{1}_3 \mathbb{1}_4$

as

    ID1 = TensorMap(ones, ComplexF64, As ⊗ Ps ← Ps)
    ID14 = TensorMap(ones, ComplexF64, As ⊗ Ps ← Ps ⊗ As)
    ID2 = TensorMap(ones, ComplexF64, Ps ← As ⊗ Ps)
    ID24 = TensorMap(ones, ComplexF64, Ps ⊗ As ← As ⊗ Ps)
    if ifdagger
        @planar foursite[-1 -2 -3 -4; -5 -6 -7 -8] := c⁺[-1; -5 1] * ID14[1 -2; -6 2] * ID14[2 -3; -7 3] * ID1[3 -4; -8]
    else
        @planar foursite[-1 -2 -3 -4; -5 -6 -7 -8] := c[-1 1; -5] * ID24[-2 2; 1 -6] * ID24[-3 3; 2 -7] * ID2[-4; 3 -8]
    end
    return FiniteMPO(foursite)

I check it by taking the inner product:
I wish dot(ψ₀2, $c^\dagger_1 \mathbb{1}_2$ * $c_1 \mathbb{1}_2$, ψ₀2)=1 and dot(ψ₀4, $c^\dagger_1 \mathbb{1}_2 \mathbb{1}_3 \mathbb{1}_4$ * $c_1 \mathbb{1}_2 \mathbb{1}_3 \mathbb{1}_4$, ψ₀4)=1 (both ψ₀2 and ψ₀4 have one particle per site), however, I got dot(ψ₀2, $c^\dagger_1 \mathbb{1}_2$ * $c_1 \mathbb{1}_2$, ψ₀2)=1 and dot(ψ₀4, $c^\dagger_1 \mathbb{1}_2 \mathbb{1}_3 \mathbb{1}_4$ * $c_1 \mathbb{1}_2 \mathbb{1}_3 \mathbb{1}_4$, ψ₀4) $\neq$ 1.

I am not sure if this is the right way to deal with this problem and I would be very grateful for your help.

Thanks!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions