Öğretici: Içinde Quantum Fourier Dönüşümünü Uygulama Q#
Not
Microsoft Quantum Development Kit (Klasik QDK) artık 30 Haziran 2024'e kadar desteklenmeyecektir. Mevcut bir QDK geliştiricisiyseniz kuantum çözümleri geliştirmeye devam etmek için yeni Azure'a Quantum Development Kit (Modern QDK) geçmenizi öneririz. Daha fazla bilgi için bkz. Kodunuzu Modern QDK'ye geçirmeQ#.
Bu öğreticide, tek tek kubitler üzerinde çalışan temel bir kuantum programının nasıl yazılıp benzetimini yaptığınız gösterilmektedir.
Büyük ölçekli kuantum programları için öncelikli olarak üst düzey bir programlama dili olarak oluşturulmuş olsa Q# da, kuantum programlamanın alt düzeyini, yani belirli kubitleri doğrudan ele almak için de kullanılabilir. Özellikle, bu öğretici birçok büyük kuantum algoritmasının ayrılmaz bir parçası olan Quantum Fourier Dönüşümü'ne (QFT) daha yakından bakar.
Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:
- içinde Q#kuantum işlemlerini tanımlayın.
- Quantum Fourier Dönüşüm devresini yazma
- Kubit ayırmadan ölçüm çıkışına kadar kuantum işleminin benzetimini yap.
- Kuantum sisteminin simülasyon dalga işlevinin işlem boyunca nasıl geliştiğini gözlemleyin.
Not
Kuantum bilgi işlemenin bu alt düzey görünümü genellikle bir sistemin belirli kubitlerine geçitlerin veya işlemlerin sıralı uygulamasını temsil eden kuantum devreleri açısından açıklanmaktadır. Bu nedenle, sırayla uyguladığınız tek ve çok kubitli işlemler devre diyagramlarında kolayca temsil edilebilir. Örneğin, bu öğreticide kullanılan üç kubitli kuantum Fourier dönüşümünün tamamı, devre olarak şu gösterime sahiptir:
İpucu
Kuantum bilişim yolculuğunuzu hızlandırmak istiyorsanız Azure Quantum web sitesinin benzersiz bir özelliği olan Azure Quantum ile kod bölümüne göz atın. Burada yerleşik Q# örnekleri veya kendi Q# programlarınızı çalıştırabilir, istemlerinizden yeni Q# kod oluşturabilir, kodunuzu tek tıklamayla Web için VS Code'da açıp çalıştırabilir ve Copilot'a kuantum bilişimi hakkında herhangi bir soru sorabilirsiniz.
Önkoşullar
Visual Studio Code'nin en son sürümü veya Web'de VS Code'un açılması.
Azure Quantum Development Kit uzantısının en son sürümü. Yükleme ayrıntıları için bkz . VS Code'da Modern QDK'yi yükleme.
Jupyter Notebook'ları kullanmak istiyorsanız Python ve Jupyter uzantılarını ve en son
qsharp
Python paketini de yüklemeniz gerekir. Bunu yapmak için bir terminal açın ve aşağıdaki komutu çalıştırın:$ pip install --upgrade qsharp
Yeni Q# bir dosya İçerik Oluşturucu
- VS Code'da Dosya > Yeni Metin Dosyası'na tıklayın
- Dosyayı QFTcircuit.qs olarak kaydedin. Bu dosya, programınızın kodunu içerir Q# .
- QFTcircuit.qs dosyasını açın.
içinde QFT bağlantı hattı yazma Q#
Bu öğreticinin ilk bölümü, üç kubit üzerinde kuantum Fourier dönüşümünü gerçekleştiren işlemini Perform3qubitQFT
tanımlamaktan Q# oluşur. DumpMachine
işlevi, üç kubitli sistemin simülasyon dalga işlevinin işlem genelinde nasıl geliştiğini gözlemlemek için kullanılır. Öğreticinin ikinci bölümünde ölçüm işlevselliği ekleyecek ve kubitlerin ölçüm öncesi ve sonrası durumlarını karşılaştıracaksınız.
İşlemi adım adım oluşturacaksınız. Aşağıdaki bölümlerde yer alan kodu kopyalayıp QFTcircuit.qs dosyasına yapıştırın.
Bu bölümün tam Q# kodunu başvuru olarak görüntüleyebilirsiniz.
Diğer Q# işlemlere erişmek için ad alanları
Dosyanızın Q# içinde, derleyici tarafından erişilen ad alanını NamespaceQFT
tanımlayın.
Bu işlemin mevcut Q# işlemlerden yararlanması için ilgili Microsoft.Quantum.*
ad alanlarını açın.
namespace NamespaceQFT {
open Microsoft.Quantum.Intrinsic;
open Microsoft.Quantum.Diagnostics;
open Microsoft.Quantum.Math;
open Microsoft.Quantum.Arrays;
// operations go here
}
Bağımsız değişkenler ve dönüşlerle işlemleri tanımlama
Ardından işlemi tanımlayın Perform3qubitQFT
:
operation Perform3qubitQFT() : Unit {
// do stuff
}
Şimdilik işlem hiçbir bağımsız değişken almaz ve Python'da C# dilinde veya boş bir tanımlama grubunda Tuple[()]
döndürmeye void
benzer bir nesne döndürürUnit
.
Daha sonra, bir ölçüm sonuçları dizisi döndürmek için işlemi değiştireceksiniz.
Kubit ayırma
İşlemin içinde Q# , anahtar sözcüğüyle üç kubitin bir yazmaçını use
ayırın. ile use
kubitler otomatik olarak $\ket{0}$ durumunda ayrılır.
use qs = Qubit[3]; // allocate three qubits
Message("Initial state |000>:");
DumpMachine();
Gerçek kuantum hesaplamalarında olduğu gibi, Q# kubit durumlarına doğrudan erişmenize izin vermez. DumpMachine
Ancak, işlem makinenin geçerli durumunu yazdırırtarget, böylece tam durum simülatörüyle birlikte kullanıldığında hata ayıklama ve öğrenme için değerli içgörüler sağlayabilir.
Tek kubitli ve denetlenen işlemleri uygulama
Ardından, işlemin kendisini oluşturan Perform3qubitQFT
işlemleri uygularsınız. Q# ad alanında Microsoft.Quantum.Intrinsic
bunları ve diğer birçok temel kuantum işlemini zaten içerir.
Uygulanan ilk işlem, ilk kubite (Hadamard) işlemidir H
:
Bir yazmaçtan belirli bir kubite (örneğin, bir diziden Qubit[]
tek Qubit
bir) işlem uygulamak için standart dizin gösterimini kullanın.
Bu nedenle, kayıt işleminin H
qs
ilk kubitine uygulanması şu şekilde olur:
H(qs[0]);
QFT devresi, işlemi tek tek kubitlere uygulamanın H
yanı sıra öncelikli olarak kontrollü R1
döndürmelerden oluşur. Genel olarak bir R1(θ, <qubit>)
işlem, $\ket{0}$ bileşenine $e^{i\theta}$ döndürmesi uygularken kubitin $\ket{1}$ bileşenini değiştirmeden bırakır.
Q# bir işlemin çalışmasını bir veya birden çok denetim kubitine göre koşula bağlamayı kolaylaştırır. Genel olarak, çağrısı ile başlanır Controlled
ve işlem bağımsız değişkenleri aşağıdaki gibi değişir:
Op(<normal args>)
$\to$ Controlled Op([<control qubits>], (<normal args>))
Denetim kubiti bağımsız değişkeninin tek bir kubit için olsa bile bir dizi olması gerektiğini unutmayın.
QFT'deki denetlenen işlemler, ilk kubit üzerinde işlem (ve ikinci ve üçüncü kubitler tarafından denetlenen) işlemlerdir R1
:
Dosyanızda Q# bu işlemleri şu deyimlerle çağırarak:
Controlled R1([qs[1]], (PI()/2.0, qs[0]));
Controlled R1([qs[2]], (PI()/4.0, qs[0]));
PI()
işlevi, pi radyan cinsinden döndürmeleri tanımlamak için kullanılır.
SWAP işlemi uygulama
İkinci ve üçüncü kubitlere ilgili H
işlemleri ve denetimli döndürmeleri uyguladıktan sonra bağlantı hattı şöyle görünür:
//second qubit:
H(qs[1]);
Controlled R1([qs[2]], (PI()/2.0, qs[1]));
//third qubit:
H(qs[2]);
Son olarak, bağlantı hattını tamamlamak için birinci ve üçüncü kubitlere bir SWAP
işlem uygularsınız. Kuantum Fourier dönüşümünün doğası kubitleri ters sırada çıkardığından, değiştirme işlemleri alt yordamların daha büyük algoritmalarla sorunsuz bir şekilde tümleştirilmesine olanak sağladığından bu gereklidir.
SWAP(qs[2], qs[0]);
Şimdi kuantum Fourier dönüşümünün kubit düzeyindeki işlemlerini işleminize yazmayı tamamladınız Q# :
Kubitleri serbest bırakma
Son adım, işlem sonrası durumunu görmek ve kubitleri serbest bırakmak için yeniden çağırmaktır DumpMachine()
. Kubitleri ayırdığınızda $\ket{0}$ durumundaydı ve işlemi kullanarak ResetAll
ilk durumlarına sıfırlanması gerekiyor.
Tüm kubitlerin $\ket{0}$ olarak açıkça sıfırlanması, diğer işlemlerin Q#aynı kubitleri (kıt bir kaynak) kullanmaya başladığında durumlarını tam olarak bilmesini sağladığından temel bir özelliğidir. Ayrıca bu, sistemdeki diğer kubitlerle dolanık olmadıklarını da garanti eder. Sıfırlama bir use
ayırma bloğunun sonunda gerçekleştirilmezse, bir çalışma zamanı hatası oluşturulabilir.
Dosyanıza Q# aşağıdaki satırları ekleyin:
Message("After:");
DumpMachine();
ResetAll(qs); // deallocate qubits
QFT işleminin tamamı
Program Q# tamamlandı. QFTcircuit.qs dosyanız şu şekilde görünmelidir:
namespace NamespaceQFT {
open Microsoft.Quantum.Intrinsic;
open Microsoft.Quantum.Diagnostics;
open Microsoft.Quantum.Math;
open Microsoft.Quantum.Arrays;
operation Perform3qubitQFT() : Unit {
use qs = Qubit[3]; // allocate three qubits
Message("Initial state |000>:");
DumpMachine();
//QFT:
//first qubit:
H(qs[0]);
Controlled R1([qs[1]], (PI()/2.0, qs[0]));
Controlled R1([qs[2]], (PI()/4.0, qs[0]));
//second qubit:
H(qs[1]);
Controlled R1([qs[2]], (PI()/2.0, qs[1]));
//third qubit:
H(qs[2]);
SWAP(qs[2], qs[0]);
Message("After:");
DumpMachine();
ResetAll(qs); // deallocate qubits
}
}
QFT bağlantı hattını çalıştırma
Şimdilik işlem Perform3qubitQFT
herhangi bir değer döndürmez, işlem değer döndürür Unit
. Daha sonra, bir ölçüm sonuçları dizisi (Result[]
döndürecek şekilde işlemi değiştireceksiniz.
Bir Q# programı çalıştırırken dosyaya bir
EntryPoint
Q# eklemeniz gerekir. Bu öznitelik, derleyiciye bu işlemin programın giriş noktası olduğunu bildirir. İşlemden öncePerform3qubitQFT
dosyanızın Q# en üstüne aşağıdaki satırı ekleyin:@EntryPoint() operation Perform3qubitQFT() : Unit {
Programı çalıştırmadan önce profili Sınırsız olarak ayarlamanız target gerekir. Görünüm -> Komut Paleti'ni seçin, QIR'yi arayın, öğesini seçinQ#: Azure Quantum QIR target profilini ayarlayın ve ardından : sınırsız'ı seçinQ#.
Programınızı çalıştırmak için sağ üstteki yürütme simgesi açılan listesinden Dosyayı Çalıştır'ı Q# seçin veya Ctrl+F5 tuşlarına basın. Program, varsayılan simülatörde
@EntryPoint()
özniteliğiyle işaretlenmiş işlemi veya işlevi çalıştırır.Message
veDumpMachine
çıkışları hata ayıklama konsolunda görünür.
Not
target Profil Kısıtlanmamış olarak ayarlanmamışsa, programı çalıştırdığınızda bir hata alırsınız.
QFT bağlantı hattının çıkışını anlama
Tam durum simülatöründe çağrıldığında, DumpMachine()
kuantum durumunun dalga işlevinin bu birden çok gösterimini sağlar.
bir $n$-kubit sisteminin olası durumları, her biri karşılık gelen karmaşık katsayıya (genlik ve faz) sahip $2^n$ hesaplama temel durumları ile temsil edilebilir.
Hesaplama temel durumları, $\ket$ ve $\ket{0}{1}$ kubit durumlarının olası tüm birleşimleri olan $n$ uzunluğundaki tüm olası ikili dizelere karşılık gelir ve burada her ikili rakam tek bir kubite karşılık gelir.
İlk satır, ilgili kubitlerin kimliklerini önemli sırasıyla içeren bir açıklama sağlar.
Kubitin 2
"en önemli" olması, $\ket{i}$ temel durum vektörünün ikili gösteriminde kubitin 2
durumunun en soldaki rakama karşılık geldiğini gösterir.
Örneğin, $\ket{6} = \ket{110}$ kubitleri 2
ve 1
$\ket$ içinde hem de $\ket{1}{0}$ içindeki kubitleri 0
içerir.
Satırların geri kalanı, hem Kartezyen hem de kutupsal biçimlerde $\ket{i}$ temel durum vektörünün ölçülme olasılığının genliğini açıklar. $\ket{000}$ giriş durumu için ilk satır incelenerek:
|0>:
Bu satır, hesaplama temeli durumuna karşılık gelir0
(ilk ayırma sonrası durumunun $\ket{000}$ olduğu düşünüldüğünde, bu noktada olasılık genliği olan tek durum olması beklenir).1.000000 + 0.000000 i
: Kartezyen biçimindeki olasılık genliği.==
: işareti herequal
iki eşdeğer gösterimi de ayırır.********************
: Büyüklüğün grafiksel gösterimi. sayısı*
, bu durum vektörünün ölçülme olasılığıyla orantılıdır.[ 1.000000 ]
: Büyüklüğün sayısal değeri.---
: Genlik fazının grafik gösterimi.[ 0.0000 rad ]
: Fazın sayısal değeri (radyan cinsinden).
Hem büyüklük hem de aşama grafik bir gösterimle görüntülenir. Büyük gösterim basittir: bir çubuk *
gösterir ve olasılık ne kadar yüksek olursa çubuk o kadar uzun olur.
Görüntülenen çıkış, programlanmış işlemlerin durumu
$$ \ket{\psi}_{initial} = \ket{000} $$
kullanıcısı
$$ \begin{align} \ket{\psi}_{final} &= \frac{1}{\sqrt{8}} \left( \ket{000} + \ket + \ket{010}{001} + \ket{011} + \ket + \ket + \ket{101}{100} ket{110} + \ket{111} \right) \\ &= \frac{1}{\sqrt{2^n}}\sum_{j=0}^{2^n-1} \ket{j}, \end{align} $$
bu da tam olarak üç kubitli Fourier dönüşümünün davranışıdır.
Diğer giriş durumlarının nasıl etkilendiğini merak ediyorsanız, dönüştürmeden önce diğer kubit işlemlerini uygulamayı denemeniz teşvik edilir.
QFT bağlantı hattına ölçüm ekleme
işlevinin DumpMachine
görüntüsü işlemin sonuçlarını gösterdi, ancak ne yazık ki kuantum mekaniğinin bir köşe taşı, gerçek bir kuantum sisteminin böyle bir DumpMachine
işleve sahip olamayacağını belirtir.
Bunun yerine, bilgiler ölçümler aracılığıyla ayıklanır ve bu ölçümler genel olarak yalnızca tam kuantum durumu hakkında bilgi sağlayamaz, aynı zamanda sistemin kendisini önemli ölçüde değiştirebilir.
Birçok kuantum ölçümü türü vardır, ancak buradaki örnek en temele odaklanır: tek kubitlerde yansıtıcı ölçümler. Belirli bir temelde ölçüm yapıldıktan sonra (örneğin, hesaplama temeli $ { \ket{0}, \ket{1} } $), kubit durumu ölçülen temel duruma yansıtılır ve bu nedenle ikisi arasındaki süper konum yok edilir.
QFT işlemini değiştirme
Bir Q# program içinde ölçümler uygulamak için, bir Result
tür döndüren işlemini kullanınM
.
İlk olarak, işlemi değiştirerek yerine bir ölçü sonuçları Result[]
Unit
dizisi döndürebilirsinizPerform3QubitQFT
.
operation Perform3QubitQFT() : Result[] {
Dizi tanımlama ve başlatma Result[]
Kubitleri ayırmadan önce üç öğeli bir dizi (her kubit için bir tane Result
) bildirin ve bağlayın:
mutable resultArray = [Zero, size = 3];
Anahtar mutable
sözcük önceden tanımlama resultArray
, değişkenin kodda daha sonra değiştirilmesini sağlar, örneğin ölçüm sonuçlarınızı eklerken.
Döngüde for
ölçüm yapma ve diziye sonuç ekleme
QFT dönüştürme işlemlerden sonra aşağıdaki kodu ekleyin:
for i in IndexRange(qs) {
set resultArray w/= i <- M(qs[i]);
}
IndexRange
Dizide çağrılan işlev (örneğin, kubit dizisi), qs
dizinin dizinleri üzerinde bir aralık döndürür.
Burada, deyimini kullanarak her kubiti sıralı olarak ölçmek için döngüde M(qs[i])
kullanılırfor
.
Ölçülen Result
her tür ( Zero
veya One
) içinde karşılık gelen dizin konumuna resultArray
bir update-and-reassign deyimiyle eklenir.
Not
Bu deyimin söz dizimi için Q#benzersizdir, ancak F# ve R gibi diğer dillerde görülen benzer değişken yeniden atamasına resultArray[i] <- M(qs[i])
karşılık gelir.
anahtar sözcüğü set
her zaman kullanarak mutable
bağlı değişkenleri yeniden atamak için kullanılır.
Dönüş resultArray
Üç kubitin de ölçülmüş olması ve sonuçların resultArray
öğesine eklenmesiyle, kubitleri daha önce olduğu gibi sıfırlayabilir ve serbest bırakabilirsiniz. Ölçümleri döndürmek için şunu ekleyin:
return resultArray;
QFT devresini ölçümlerle çalıştırma
Şimdi ölçülerden DumpMachine
önceki ve sonraki durumu çıkarmak için işlevlerin yerleşimini değiştirin.
Son Q# kodunuz şu şekilde görünmelidir:
namespace NamespaceQFT {
open Microsoft.Quantum.Intrinsic;
open Microsoft.Quantum.Diagnostics;
open Microsoft.Quantum.Math;
open Microsoft.Quantum.Arrays;
operation Perform3QubitQFT() : Result[] {
mutable resultArray = [Zero, size = 3];
use qs = Qubit[3];
//QFT:
//first qubit:
H(qs[0]);
Controlled R1([qs[1]], (PI()/2.0, qs[0]));
Controlled R1([qs[2]], (PI()/4.0, qs[0]));
//second qubit:
H(qs[1]);
Controlled R1([qs[2]], (PI()/2.0, qs[1]));
//third qubit:
H(qs[2]);
SWAP(qs[2], qs[0]);
Message("Before measurement: ");
DumpMachine();
for i in IndexRange(qs) {
set resultArray w/= i <- M(qs[i]);
}
Message("After measurement: ");
DumpMachine();
ResetAll(qs);
Message("Post-QFT measurement results [qubit0, qubit1, qubit2]: ");
return resultArray;
}
}
İpucu
Yeniden çalıştırmadan önce kodda her değişiklik eklediğinizde dosyanızı kaydetmeyi unutmayın.
İşlemden
Perform3qubitQFT
önce birEntryPoint
ekleyin:@EntryPoint() operation Perform3qubitQFT() : Unit {
target Profili Sınırsız olarak ayarlayın. VS Code penceresinin alt kısmındaki QIR: Temel düğmesine tıklayın ve açılan menüden Sınırsız'ı seçin. target Profil Kısıtlanmamış olarak ayarlanmamışsa, programı çalıştırdığınızda bir hata alırsınız.
Programınızı çalıştırmak için sağ üstteki yürütme simgesi açılan listesinden Dosyayı çalıştır'ı Q# seçin veya Ctrl+5 tuşlarına basın. Program, varsayılan simülatörde
@EntryPoint()
özniteliğiyle işaretlenmiş işlemi veya işlevi çalıştırır.Message
veDumpMachine
çıkışları hata ayıklama konsolunda görünür.
Çıkışınız çıkışa benzer görünmelidir:
Before measurement:
# wave function for qubits with ids (least to most significant): 0;1;2
|0>: 0.353553 + 0.000000 i == *** [ 0.125000 ] --- [ 0.00000 rad ]
|1>: 0.353553 + 0.000000 i == *** [ 0.125000 ] --- [ 0.00000 rad ]
|2>: 0.353553 + 0.000000 i == *** [ 0.125000 ] --- [ 0.00000 rad ]
|3>: 0.353553 + 0.000000 i == *** [ 0.125000 ] --- [ 0.00000 rad ]
|4>: 0.353553 + 0.000000 i == *** [ 0.125000 ] --- [ 0.00000 rad ]
|5>: 0.353553 + 0.000000 i == *** [ 0.125000 ] --- [ 0.00000 rad ]
|6>: 0.353553 + 0.000000 i == *** [ 0.125000 ] --- [ 0.00000 rad ]
|7>: 0.353553 + 0.000000 i == *** [ 0.125000 ] --- [ 0.00000 rad ]
After measurement:
# wave function for qubits with ids (least to most significant): 0;1;2
|0>: 0.000000 + 0.000000 i == [ 0.000000 ]
|1>: 0.000000 + 0.000000 i == [ 0.000000 ]
|2>: 0.000000 + 0.000000 i == [ 0.000000 ]
|3>: 1.000000 + 0.000000 i == ******************** [ 1.000000 ] --- [ 0.00000 rad ]
|4>: 0.000000 + 0.000000 i == [ 0.000000 ]
|5>: 0.000000 + 0.000000 i == [ 0.000000 ]
|6>: 0.000000 + 0.000000 i == [ 0.000000 ]
|7>: 0.000000 + 0.000000 i == [ 0.000000 ]
Post-QFT measurement results [qubit0, qubit1, qubit2]:
[One,One,Zero]
Bu çıkış birkaç farklı şeyi gösterir:
- Döndürülen sonucun ön ölçüm
DumpMachine
ile karşılaştırılması, QFT sonrası süper pozisyonu temel durumlara göre açıkça göstermez. Ölçüm, sistemin dalga işlevindeki o durumun genliği tarafından belirlenen bir olasılıkla yalnızca tek bir temel durum döndürür. - Ölçüm
DumpMachine
sonrasında ölçümün durumu değiştirdiğini ve bunu temel durumlar üzerindeki ilk süper pozisyondan ölçülen değere karşılık gelen tek temel duruma yansıttığını görürsünüz.
Bu işlemi birçok kez tekrarlarsanız, sonuç istatistiklerinin QFT sonrası durumunun her çekimde rastgele bir sonuca neden olan eşit ağırlıklı süper konumunu göstermeye başlayacağını görürsünüz. Ancak, verimsiz ve hala kusurlu olmanın yanı sıra, bu yine de aralarındaki göreli aşamaları değil, yalnızca temel durumların göreli genliklerini yeniden üretir. İkincisi bu örnekte sorun değildir, ancak QFT'ye $\ket{000}$ değerinden daha karmaşık bir giriş verildiğinde göreli aşamaların göründüğünü görürsünüz.
QFT devresini Q# basitleştirmek için işlemleri kullanma
Giriş bölümünde belirtildiği gibi, güçlerinin büyük bölümü Q#, bireysel kubitlerle ilgilenme endişelerini soyutlamanıza olanak sağlaması gerçeğinden bağımsızdır.
Gerçekten de, tam ölçekli, geçerli kuantum programları geliştirmek istiyorsanız, bir işlemin belirli bir H
döndürmeden önce mi yoksa sonra mı geçeceği konusunda endişelenmeniz sizi yalnızca yavaşlatır.
Ad Q# alanı Microsoft.Quantum.Canon
, istediğiniz sayıda kubit için kullanabileceğiniz ve uygulayabileceğiniz işlemi içerir ApplyQFT
.
İşleme erişmek
ApplyQFT
içinMicrosoft.Quantum.Canon
dosyanın başına ad alanının deyimini Q# ekleyinopen
:open Microsoft.Quantum.Canon;
İlkinden
H
değiştirilene kadar olan her şeyi şununlaSWAP
değiştirin:ApplyQFT(qs);
Q# Programı yeniden çalıştırın ve çıkışın öncekiyle aynı olduğuna dikkat edin.
İşlemleri kullanmanın Q# gerçek avantajını görmek için kubit sayısını dışında
3
bir şeyle değiştirin:
mutable resultArray = [Zero, size = 4];
use qs = Qubit[4];
//...
Böylece, her kubitte yeni H
işlemlerin ve döndürmelerin karmaşıklığı konusunda endişelenmenize gerek kalmadan, belirli sayıda kubit için uygun QFT'yi uygulayabilirsiniz.
Sonraki adımlar
Diğer Q# öğreticileri keşfedin:
- Kuantum rastgele sayı oluşturucu , süper pozisyondaki kubitlerden rastgele sayılar oluşturan bir Q# programın nasıl yazıldığını gösterir.
- Grover arama algoritması, Grover arama algoritmasını kullanan bir Q# programın nasıl yazıldığını gösterir.
- Kuantum dolanıklığı , kubitleri işleyen ve ölçen ve süper pozisyon ile dolanıklığın etkilerini gösteren bir Q# programın nasıl yazıldığını gösterir.
- Kuantum Kataları, kuantum bilişiminin ve programlamanın öğelerini aynı anda öğretmeyi amaçlayan kendi hızındaki öğreticiler ve Q# programlama alıştırmalarıdır.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin