Share via


Função QuantumROM

Aviso

Esta documentação refere-se ao QDK Clássico, que foi substituído pelo QDK Moderno.

https://aka.ms/qdk.api Veja a documentação da API para o QDK Moderno.

Espaço de nomes: Microsoft.Quantum.Preparation

Pacote: Microsoft.Quantum.Standard

Aviso

QuantumROM foi preterido. Em alternativa, utilize a função PurifiedMixedState .

Utiliza a técnica rom quântica para representar uma determinada matriz de densidade.

Dada uma lista de coeficientes $N$ $\alpha_j$, isto devolve um $U unitário$ que utiliza a técnica Quantum-ROM para preparar uma aproximação $\tilde\rho\sum_{j=0}^{N-1}p_j\ket{j}\bra{j}$ da purificação da matriz de densidade $\rho=\sum_{j=0}^{N-1}\frac{|alpha_j|} {\sum_k |\alpha_k|} \ket{j}\bra{j}$. Nesta aproximação, o erro $\epsilon$ é tal que $|p_j-\frac{|alpha_j|} {\sum_k |\alpha_k|}|\le \epsilon / N$ e $|\tilde\rho - \rho| \le \epsilon$. Por outras palavras, $$ \begin{align} U\ket{0}^{\lceil\log_2 N\rceil}\ket{0}^{m}=\sum_{j=0}^{N-1}\sqrt{p_j} \ket{j}\ket{\text{garbage}_j}. \end{align} $$

function QuantumROM (targetError : Double, coefficients : Double[]) : ((Int, (Int, Int)), Double, ((Microsoft.Quantum.Arithmetic.LittleEndian, Qubit[]) => Unit is Adj + Ctl))

Entrada

targetError: Duplo

O erro de destino $\epsilon$.

coeficientes: Duplo[]

Matriz de coeficientes de $N$ que especifica a probabilidade de estados de base. Os números negativos $-\alpha_j$ serão tratados como $|\alpha_j|$.

Saída: ((Int;(Int,Int)),Double,(LittleEndian,Qubit[]) =>Unit is Adj + Ctl)

Primeiro parâmetro

Uma cadeia de identificação (x,(y,z)) em que x = y + z é o número total de qubits alocados é y o número de qubits para o LittleEndian registo e z é o Número de qubits de lixo.

Segundo parâmetro

A norma única $\sum_j |\alpha_j|$ da matriz de coeficientes.

Terceiro parâmetro

O unitário $U$.

Exemplo

O fragmento de código seguinte prepara uma purificação do estado $3$-qubit $\rho=\sum_{j=0}^{4}\frac{|alpha_j|} {\sum_k |\alpha_k|} \ket{j}\bra{j}$, onde $\vec\alpha=(1.0,2.0,3.0,4.0,5.0)$, e o erro é 1e-3;

let coefficients = [1.0,2.0,3.0,4.0,5.0];
let targetError = 1e-3;
let ((nTotalQubits, (nIndexQubits, nGarbageQubits)), oneNorm, op) = QuantumROM(targetError, coefficients);
using (indexRegister = Qubit[nIndexQubits]) {
    using (garbageRegister = Qubit[nGarbageQubits]) {
        op(LittleEndian(indexRegister), garbageRegister);
    }
}

Referências

  • Encoding Electronic Spectra in Quantum Circuits with Linear T Complexity Ryan Babbush, Craig Gidney, Dominic W. Berry, Nathan Wiebe, Jarrod McClean, Alexandru Paler, Austin Fowler, Hartmut Neven https://arxiv.org/abs/1805.03662