Rotação no eixo YZ

Para fechar a última análise sobre rotações na esfera de Bloch, vamos analisar a rotação no eixo YZ.

Postagens anteriores:

rotação em XY

Rotação em XZ

As rotações nas situações acima têm aspectos que simplificam o entendimento. A rotação no eixo Y (plano XZ) pode ser pensada como uma em 2D. A rotação no eixo Z (plano XY) pode ser considerada uma rotação de fase (multiplicar por i, no caso de ângulo pi/2).

Vamos usar a definição de rotação da porta u3 do qiskit, para ficar de acordo com uma porta implementável na linguagem citada:  https://qiskit-staging.mybluemix.net/documentation/terra/summary_of_quantum_operations.html

No documento citado, a porta u3 é dada por:

R_x(\theta) = \begin{pmatrix} \cos(\theta/2) & -i\sin(\theta/2)\\ -i\sin(\theta/2) & \cos(\theta/2) \end{pmatrix} = u3(\theta, -\pi/2,\pi/2)

A porta u3 é a porta genérica de rotações do qiskit, e tem três ângulos (theta, phi e lambda).

O theta é a rotação em 2D, no eixo Y.  O phi é a fase, ou seja, a rotação no eixo Z.

Ora, uma coisa que sempre achei esquisita. O theta e o phi são suficientes para descrever qualquer ponto na esfera de Bloch. É como se eu estivesse na superfície do globo terrestre, e precisasse achar as coordenadas de onde estou. Para tal, latitude e longitude são suficientes, não preciso de mais uma informação (guarde esta informação, vamos voltar no final).

Escrevi no braço uma implementação da porta U3, para poder explorar esses conceitos no detalhe. Convido o leitor a rodar o código em seu IDE favorito.

import numpy as np

from qiskit.visualization import plot_bloch_multivector

def u3_0(theta, phi, lamb):

    out =[[np.cos(theta/2), -np.exp(lamb*1.j)*np.sin(theta/2)], [np.exp(phi*1.j)*np.sin(theta/2), np.exp(lamb*1.j + phi*1.j)*np.cos(theta/2)]]

    return (out)

Vamos começar com rotação u3(0,0,0), ou seja, identidade, e vetor inicial na posição |0>.

U = u3_0(0,0)

vetorIni = np.zeros((2))

vetorIni [0]=1

vetorIni [1]=0

estado = np.dot(U,vetorIni)

print(estado)

plot_bloch_multivector(estado)

Rodando o programa, chegamos à posição |0>, como esperado.

Vamos acrescentar uma rotação de pi/2 no eixo real (lembre-se, dentro da equação é pi/4, ou seja, 45 graus).

U = u3_0(np.pi/2,0,0)

Resultado, chego em [1, 1]/sqrt(2), o estado |+>.

[0.70710678+0.j 0.70710678+0.j]

Quero jogar esse vetor no plano YZ, que é o plano inexplorado até agora. Para tal, adiciono uma rotação de -pi/2 na fase.

U = u3_0(np.pi/2,-np.pi/2,0)

O resultado do estado é [7.07106781e-01+0.j         4.32978028e-17-0.70710678j].

Ou seja, não precisei usar o lambda.

Vamos brincar um pouco. Que tal jogar lambda = pi/2 na equação?

U = u3_0(np.pi/2,-np.pi/2,np.pi/2)

Rodando, dá exatamente o mesmo resultado de lambda = 0.

[7.07106781e-01+0.j         4.32978028e-17-0.70710678j].

E a mesma coisa se usar lambda = pi, ou 2*pi/3 ou qualquer outro resultado.

Ou seja, só preciso mesmo da latitude e longitude para descrever um ponto do plano, e esse fator lambda é como se fosse uma fase global – que para descrever o efeito final, pode ser desprezada.

Afinal, para que serve esse lambda?

O documento das operações básicas do qiskit ajuda a entender a diferença.

https://qiskit-staging.mybluemix.net/documentation/terra/summary_of_quantum_operations.html

Realmente, para descrever o estado de um qubit, só preciso de dois ângulos.

|\psi\rangle = \cos(\theta/2)|0\rangle + \sin(\theta/2)e^{i\phi}|1\rangle 

Outra coisa a se pensar, na implementação de um computador quântico de verdade, é que as portas lógicas genéricas U devem ser decompostas em componentes mais básicos. Fazendo uma analogia, em computação tradicional, portas mais complexas sendo decompostas em postas básicas AND, XOR, etc.

O computador vai ter meios de implementar as portas básicas,  e as demais portas serão combinações dessas portas universais.

Portanto, U descreve a ação de uma porta genérica.

|\psi'\rangle = U|\psi\rangle 

E é útil decompor a mesma em componentes básicos, digamos, rotações.

Já temos a representação de um qubit, acima, e falta descrever dois fatores de uma porta U genérica.

U = \begin{pmatrix}  \cos(\theta/2) & a \\  e^{i\phi}\sin(\theta/2) & b \end{pmatrix} 

Outra restrição é a de que a porta deve ser unitária,

U^\dagger U = I 

O que resulta em

U = \begin{pmatrix}\cos(\theta/2) & -e^{i\lambda}\sin(\theta/2) \\ e^{i\phi}\sin(\theta/2) & e^{i\lambda+i\phi}\cos(\theta/2) \end{pmatrix} 

Porém, se o lambda não ajuda na rotação, ele ajuda no que?

A resposta é que ele ajuda a descrever exatamente a porta U genérica original. Sem ele, eu chegaria numa porta U’ equivalente em efeito, porém com valores componentes diferentes do U original. Bom, pelo menos, é assim que interpreto, à luz do que conheço hoje.

Aliás, um dos desafios da computação quântica atual é exatamente esse. Como decompor um mega circuito complexo, ou um estado U genérico e complicado, com o menor número de componentes básicos? Essa decomposição é extremamente útil, porque quanto menos componentes, menor a possibilidade de erros por decoerência – além do que cada operação em qubits hoje em dia é extremamente cara.

É bastante útil saber o que está sendo feito e as consequências disso. Este ramo do conhecimento ainda está na infância, lembrando bastante a eletrônica dos anos 50 e 60, no início da computação.

Um comentário sobre “Rotação no eixo YZ

  1. Pingback: Portas Z, S e T – Computação e Informação Quântica

Deixe um comentário

Faça o login usando um destes métodos para comentar:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s