Simulazione hamiltoniana con coefficienti complessi


12

Come parte di un algoritmo variazionale, vorrei costruire un circuito quantico (idealmente con pyQuil ) che simula un hamiltoniano della forma:

H=0.3Z3Z4+0.12Z1Z3+[...]+11.03Z310.92Z4+0.12iZ1Y5X4

Quando si tratta dell'ultimo termine, il problema è che pyQuil genera il seguente errore:

TypeError: PauliTerm coefficient must be real

Ho iniziato a immergermi nella letteratura e sembra un problema non banale. Mi sono imbattuto in questo articolo su Hamiltoniani quantistici universali in cui sono discusse codifiche complesse / reali e codifiche locali. Tuttavia, non mi è ancora chiaro come si potrebbe praticamente implementare qualcosa del genere. Qualcuno può darmi qualche consiglio pratico su come risolvere questo problema?


1
Emette un errore quando lo sostituisci con ? Sj2(XjSjXj)2
AHusain,

3
Ricorda che un hamiltoniano dovrebbe essere eremitico. Questo è vero solo per i coefficienti reali.
DaftWullie,

1
Potrei usare una definizione diversa per di te. Ma il punto è che puoi trovare una combinazione che si traduce in i I d 2 . SiId2
AHusain,

1
Non hai un altro termine da qualche parte in quelle , che è il coniugato eremitico? H = i A B - i B A H=iABiBA
AHusain

1
O tutti i termini del modulo sono tali da annullarli?
AHusain,

Risposte:


10

Un Hamiltoniano convenzionale è Hermitiano. Quindi, se contiene un termine non eremitico, deve contenere anche il suo conjuagte eremitico come altro termine o avere un peso pari a 0. In questo caso particolare, poiché è lo stesso eremitico, il coefficiente dovrebbe essere 0. Quindi, se stai parlando di hamiltoniani convenzionali, probabilmente hai fatto un errore nel tuo calcolo. Nota che se il coniugato eremitico del termine non è presente, non puoi semplicemente aggiustare le cose aggiungendolo; ti darà un risultato completamente diverso.ZXY

D'altra parte, potresti voler implementare un hamiltoniano non eremitico . Queste cose esistono, spesso per la descrizione dei processi di rumore, ma non sono così diffuse. Devi includere esplicitamente la terminologia "non eremita", altrimenti tutti penseranno semplicemente che quello che stai facendo è sbagliato perché non è eremita, e un hamiltoniano dovrebbe essere eremita. Non ho una conoscenza eccessiva delle capacità fornite dai vari simulatori, ma sarei sorpreso se hanno incorporato la non-eremita.

i×KH

eiHt+Kt
eiHt+Kt=i=1NeiHδt+Kδt
Nδt=teiHδt+KδteiHδteKδtN
eKδt=cosh(δt)I+sinh(δt)K.

|ψ=α|0+β|1K{|ψ,|ψ}ψ|ψ=0|ψ|α|2I+|β|2K(1|α|2)/|α|2=tanh(δt)


3

i0.12Z1Y2X3

z=[1 0 ; 0 -1];
x=[0 1;  1  0];
y=[0 -1i; 1i 0];

z1 = kron(z,eye(4));
y2 = kron(kron(eye(2),y),eye(2));
x3 = kron(eye(4),x);

H=0.12*1i*z1*y2*x3

L'output è H:

    0     0    0 0.12    0    0     0     0
    0     0 0.12    0    0    0     0     0
    0 -0.12    0    0    0    0     0     0
-0.12     0    0    0    0    0     0     0
    0     0    0    0    0    0     0 -0.12
    0     0    0    0    0    0 -0.12     0
    0     0    0    0    0 0.12     0     0
    0     0    0    0 0.12    0     0     0

Dal momento che è una vera matrice, Hermitian significa simmetrico, ma questo non è simmetrico e quindi non è Hermitian. Il triangolo in alto a destra non è uguale al triangolo in basso a destra.

Tuttavia, il triangolo in alto a destra è il negativo del triangolo in basso a destra, quindi è anti-Hermitian.

Quindi, facendo il suggerimento di AHussain di aggiungere la trasposizione del coniugato, si ottiene lo 0. Basta eseguire questo comando:

H + H'

e otterrai una matrice 8x8 di 0.

Quindi, quando crei il tuo eremitico hamiltoniano aggiungendo il trasposto coniugato, ottieni 0 per questo termine e quindi non hai bisogno di avere coefficienti immaginari .


HMHM+HMHM

1
Ecco perché il commento di @ DaftWullie si sbaglia senza ulteriori assunzioni.
AHusain,

1
@MarkFingerhuth: scusate il ritardo nel replay. Sono stato estremamente impegnato durante i giorni e sono tornato a casa vicino a mezzanotte ogni giorno questo mese. Se puoi mostrarmi il documento da cui provengono le equazioni, posso pensare a come i tuoi risultati diventano sostanzialmente diversi. Potrei cambiare la mia risposta per dire "PyQuil non supporta matrici non eremitiche, ma ciò non significa che un programma diverso non possa".
user1271772

1
@MarkFingerhuth: dici "L'ho generato sulla base di equazioni da un documento teorico" quali equazioni da quale documento teorico? Il documento collegato alla domanda è lungo 82 pagine, non puoi semplicemente mostrarmi quali equazioni hai usato per generare questo "hamiltoniano"?
user1271772

1
@MarkFingerhuth, sì, possiamo parlare offline, tuttavia non otterrò alcun punto lì. Ho ottenuto solo 1 voto per i miei sforzi qui, quindi l'incentivo è basso.
user1271772
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.