Fungsi QuantumROM

Peringatan

Dokumentasi ini mengacu pada QDK Klasik, yang telah digantikan oleh QDK Modern.

Silakan lihat https://aka.ms/qdk.api dokumentasi API untuk QDK Modern.

Namespace: Microsoft.Quantum.Preparation

Paket: Microsoft.Quantum.Standard

Peringatan

QuantumROM sudah tidak digunakan lagi. Silakan gunakan fungsi PurifiedMixedState sebagai gantinya.

Menggunakan teknik Quantum ROM untuk mewakili matriks kepadatan tertentu.

Mengingat daftar koefisien $N$ $\alpha_j$, ini mengembalikan unitary $U$ yang menggunakan teknik Quantum-ROM untuk menyiapkan perkiraan $\tilde\rho\sum_{j=0}^{N-1}p_j\ket{j}\bra{j}$ dari pemurnian matriks kepadatan $\rho=\sum_{j=0}^{N-1}\frac{|alpha_j|} {\sum_k |\alpha_k|} \ket{j}\bra{j}$. Dalam perkiraan ini, kesalahan $\epsilon$ sia-sia sehingga $|p_j-\frac{|alpha_j|} {\sum_k |\alpha_k|}|\le \epsilon / N$ dan $|\tilde\rho - \rho| \le \epsilon$. Dengan kata lain, $$ \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))

Input

targetError : Ganda

Kesalahan target $\epsilon$.

koefisien : Double[]

Array koefisien $N$ yang menentukan probabilitas status dasar. Angka negatif $-\alpha_j$ akan diperlakukan sebagai positif $|\alpha_j|$.

Output : ((Int,(Int,Int)),Double,(LittleEndian,Qubit[]) =>Unit is Adj + Ctl)

Parameter pertama

Tuple (x,(y,z)) di mana x = y + z adalah jumlah total kubit yang dialokasikan, y adalah jumlah qubit untuk LittleEndian register, dan z merupakan Jumlah qubit sampah.

Parameter kedua

$\sum_j satu norma |\alpha_j|$ dari array koefisien.

Parameter ketiga

Unitary $U$.

Contoh

Cuplikan kode berikut menyiapkan pemurnian status $3$-qubit $\rho=\sum_{j=0}^{4}\frac{|alpha_j|} {\sum_k |\alpha_k|} \ket{j}\bra{j}$, where $\vec\alpha=(1.0,2.0,3.0,4.0,5.0)$, dan kesalahannya adalah 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);
    }
}

Referensi

  • Pengodean Spektra Elektronik di Sirkuit Quantum dengan 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