Simulação Hamiltoniana com coeficientes complexos

12

Como parte de um algoritmo variacional, eu gostaria de construir um circuito quântico (idealmente com pyQuil ) que simule um hamiltoniano da forma:

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

Quando se trata do último termo, o problema é que o pyQuil lança o seguinte erro:

TypeError: PauliTerm coefficient must be real

Comecei a mergulhar na literatura e parece um problema não trivial. Encontrei este artigo sobre Hamiltonianos quânticos universais, onde são discutidas codificações complexas e reais, bem como codificações locais. No entanto, ainda não está claro para mim como alguém praticamente implementaria algo assim. Alguém pode me dar alguns conselhos práticos sobre como resolver esse problema?

Mark Fingerhuth
fonte
11
Isso gera um erro quando você substitui i por ? Sj2(XjSjXj)2
AHusain
3
Lembre-se de que um hamiltoniano deve ser hermitiano. Isso é verdade apenas se os coeficientes forem reais.
DaftWullie
11
Eu posso estar usando uma definição diferente para que você é. Mas o ponto é que você pode encontrar alguma combinação que resulta em i I d 2 . SiId2
AHusain
11
Você não tem outro termo em algum lugar , que é o conjugado hermitiano? H = i A B - i B A H=iABiBA
AHusain
11
Ou são todos os termos do formulário que os cancelam?
AHusain

Respostas:

10

Um hamiltoniano convencional é hermitiano. Portanto, se contiver um termo não eremita, também deverá conter seu conjunto eremita como outro termo ou ter 0 peso. Nesse caso em particular, como é o próprio hermitiano, o coeficiente teria que ser 0. Portanto, se você está falando de hamiltonianos convencionais, provavelmente cometeu um erro no cálculo. Observe que, se o conjugado hermitiano do termo não estiver presente, você não pode simplesmente consertar as coisas adicionando-o; isso lhe dará um resultado completamente diferente.ZXY

Por outro lado, você pode querer implementar um hamiltoniano não hermitiano . Essas coisas existem, geralmente para a descrição de processos de ruído, mas não são tão difundidas. Você precisa incluir explicitamente a terminologia "não-eremita"; caso contrário, todos pensarão que o que você está fazendo está errado porque não é eremita, e um hamiltoniano deve ser eremita. Não estou muito familiarizado com quais recursos os vários simuladores oferecem, mas ficaria surpreso se eles tiverem o não-Hermiticity incorporado.

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)

DaftWullie
fonte
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

A saída é 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

Como é uma matriz real, hermitiano significa simétrico, mas isso não é simétrico e, portanto, não é hermitiano. O triângulo superior direito não é igual ao triângulo inferior direito.

No entanto, o triângulo superior direito é o negativo do triângulo inferior direito, por isso é anti-hermitiano.

Assim, seguindo a sugestão de AHussain de adicionar a transposição do conjugado, resulta em 0. Basta executar este comando:

H + H'

e você obterá uma matriz 8x8 de zeros.

Portanto, quando você cria seu hermitiano hamiltoniano adicionando a transposição conjugada, obtém 0 para este termo e, portanto, não precisa ter nenhum coeficiente imaginário .

user1271772
fonte
HMHM+HMHM
11
É por isso que o comentário de @ DaftWullie é confundido sem outras suposições.
AHusain
11
@ MarkFingerhuth: Desculpe pelo atraso na repetição. Eu estive extremamente ocupado durante os dias e tenho chegado em casa perto da meia-noite todos os dias deste mês. Se você pode me mostrar o papel de onde vêm as equações, posso pensar em como seus resultados são fundamentalmente diferentes. Posso mudar minha resposta para dizer "PyQuil não suporta matrizes não-eremitas, mas isso não significa que um programa diferente não possa".
user1271772
11
@ MarkFingerhuth: você diz "Eu o criei com base em equações de um artigo teórico" quais equações a partir de qual artigo teórico? O artigo vinculado na pergunta tem 82 páginas. Você não pode apenas me mostrar quais equações usou para gerar esse "Hamiltoniano"?
User1271772
11
@ MarkFingerhuth, sim, podemos conversar off-line, no entanto, não receberei pontos por isso. Eu recebi apenas 1 voto positivo pelo meu esforço aqui, então o incentivo é baixo.
user1271772