انتقل إلى المحتوى الرئيسي

تجربة ستيرن-غيرلاخ باستخدام الحواسيب الكمية

في هذه الوحدة من سلسلة Qiskit في الفصول الدراسية، يحتاج الطلاب إلى بيئة Python تعمل بشكل صحيح مع تثبيت الحزم التالية:

  • qiskit الإصدار v2.1.0 أو أحدث
  • qiskit-ibm-runtime الإصدار v0.40.1 أو أحدث
  • qiskit-aer الإصدار v0.17.0 أو أحدث
  • qiskit.visualization
  • numpy
  • pylatexenc

لإعداد وتثبيت الحزم أعلاه، راجع دليل تثبيت Qiskit. لتشغيل المهام على حواسيب كمية حقيقية، يحتاج الطلاب إلى إنشاء حساب على IBM Quantum® باتباع الخطوات في دليل إعداد حساب IBM Cloud الخاص بك.

تم اختبار هذه الوحدة واستخدمت ٢ ثانية من وقت QPU. هذا تقدير فقط، وقد يختلف استخدامك الفعلي.

# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-aer qiskit-ibm-runtime
# Uncomment and modify this line as needed to install dependencies
#!pip install 'qiskit>=2.1.0' 'qiskit-ibm-runtime>=0.40.1' 'qiskit-aer>=0.17.0' 'numpy' 'pylatexenc'

شاهد الشرح التفصيلي للوحدة مع الدكتورة كاتي ماكورميك أدناه، أو اضغط هنا لمشاهدته على YouTube.


الخلفية النظرية

في أوائل القرن العشرين، كانت الأدلة على السلوك الكمي على المستويات الذرية تتراكم. كان لكثير من التفسيرات الناجحة للبيانات، كتفسير ماكس بلانك للكارثة فوق البنفسجية، وتجارب من بينها تجربة أوتو شتيرن وفالتر غيرلاخ، دور محوري في إقناع العالم بضرورة نظام للميكانيكا الكمية، وأن ظواهر فيزيائية معينة تأتي على شكل كميات محددة. وفي حالة تجربة ستيرن-غيرلاخ (التي تصورها شتيرن عام 1921 ونفذها شتيرن وغيرلاخ عام 1922)، كان الهدف هو التحقق من تكميم الزخم الزاوي في الذرات.

في ذلك الوقت، كان النموذج السائد للذرة هو نموذج بور-زومرفيلد، وهو امتداد لنموذج بور، وكلاهما يتنبأ بأن الإلكترونات تتواجد في مدارات كمية محددة تشبه الكواكب التي تدور حول الشمس.

Diagram of Bohr-Sommerfeld model. A central dot represents the nucleus of an atom. Circles or ellipses around that point represent atomic orbitals, looking very much like planetary orbits around the sun. Higher-energy orbits are farther from the nucleus.

على الرغم من أن هذا النهج سيثبت في نهاية المطاف عدم كفايته لتفسير السلوك الكمي للذرة، إلا أنه تنبأ على نطاق واسع بكثير من الظواهر الملاحظة، كالأطياف الطيفية المنفصلة للذرات. تتوافق المدارات الكمية للإلكترونات ذات الطاقات المحددة مع قيم محددة للزخم الزاوي. وهذا هو الزخم الزاوي المداري الذي سعى ستيرن وغيرلاخ إلى رصده في تجربتهما، وإن كانت التجربة تنطبق على أي نوع من الزخم الزاوي الكمي، بما في ذلك السبين. وكثيرًا ما يُشار إلى تجربة ستيرن-غيرلاخ في سياق السبينات. وقد انصبّ تركيز التجربة الأصلية على الزخم الزاوي المداري ببساطة لأن جورج أولنبيك وصامويل غاودسميت لم يضعا نظرية وجود السبين حتى عام 1925.

بصرف النظر عن نوع الزخم الزاوي، فإن الشحنة ذات الزخم الزاوي تمتلك عزمًا مغناطيسيًا. في المعالجة الكلاسيكية للحركة المدارية، يُتوقع أن تمتلك جسيمًا بشحنة qq وكتلة mm وزخم زاوي L\vec{L} عزمًا مغناطيسيًا μ\mu يُعطى بالعلاقة:

μ=q2mL\vec{\mu} = \frac{q}{2m}\vec{L}

اتضح أن نفس المعادلة تقريبًا تنطبق على الزخم الزاوي الكمي، مع إضافة نسبة عددية مرتبطة بنوع الزخم الزاوي تُعرف بعامل g، أي العامل gg. عند دمج أنواع مختلفة من الزخم الزاوي، أو التعميم على نوع اعتباطي، يُستخدم في الغالب J\vec{J} بدلًا من L\vec{L}، فنكتب:

μ=gq2mJ\vec{\mu} = \frac{gq}{2m}\vec{J}

بالنسبة للأجسام الكلاسيكية g=1g=1. أما للإلكترونات فـg2g\approx 2، وهناك قيم عديدة لمختلف النوى والجسيمات دون الذرية. النقطة الأساسية هنا هي أن الزخم الزاوي الكمي يعني عزمًا مغناطيسيًا كميًا!

هذا العزم المغناطيسي سيتعرض لعزم دوران في مجال مغناطيسي:

τ=μ×B\vec{\tau}=\vec{\mu}\times \vec{B}

وسيتعرض لقوة في مجال مغناطيسي ذي تدرج غير صفري:

F=(μB)\vec{F} = \nabla(\vec{\mu}\cdot\vec{B})

غالبًا ما نعتبر التعبير أعلاه مكونًا واحدًا في كل مرة، لذا قد يكون من المفيد التفكير في مكونه zz:

Fz=μzdBzdzF_z = \mu_z \frac{dB_z}{dz}

بدمج التعبيرات، يمكننا الحصول على:

Fz=gq2mdBzdzJzF_z = \frac{gq}{2m} \frac{dB_z}{dz} J_z

لم يكن ستيرن وغيرلاخ يعرفان عامل gg، لكن حتى مع وجوده في التعبير، لدينا قوة تساوي عدة ثوابت معروفة أو قابلة للقياس مضروبة في الزخم الزاوي. لذا، باستخدام مجال مغناطيسي ذي تدرج معروف وقياس انحراف جسيم أثناء عبوره عبر المجال، يمكننا الحصول على معلومات حول الزخم الزاوي. هذا هو جوهر تجربة ستيرن-غيرلاخ.

Silver atoms traveling through an inhomogeneous magnetic field, and being deflected up or down depending on their spin. Classically, we would expect a continuous distribution on the screen, but in the experiment we see two distinct points.

الشكل. تجربة ستيرن-غيرلاخ[1]: ذرات الفضة تعبر من خلال مجال مغناطيسي غير متجانس، وتنحرف لأعلى أو لأسفل بحسب سبينها. كلاسيكيًا، نتوقع توزيعًا مستمرًا على الشاشة، لكن في التجربة نرى نقطتين متمايزتين.

تم تسخين ذرات الفضة المحايدة في فرن. مع تدفق حزمة من ذرات الفضة من الفرن، استُخدمت محددات الحزمة لاختيار الذرات التي تسير بالقرب من مركز المجال المغناطيسي غير المتجانس. بالطبع، تنحرف بعض الذرات قليلًا يمينًا أو يسارًا، وتتعرض لتدرج أضعف في المجال أو لا تدرج على الإطلاق. لذا، لسنا قلقين جدًا بشأن سلوك الذرات البعيدة جدًا عن اليسار أو اليمين. نحن مهتمون بما يحدث للذرات التي تسير على طول منتصف القناة، حيث سيولّد تدرج المجال المغناطيسي قوة تنحرف بالذرات في اتجاه zz فقط.

ما الذي نتوقعه كلاسيكيًا؟

كيف ستتصرف هذه الذرات لو كانت تمامًا كمغناطيسات كلاسيكية ضخمة؟ يمكنك تجربة الأمر. تخيل إطلاق مغناطيسات نيوديميوم صغيرة بالقرب من مغناطيس كبير وقوي. اتجاه المغناطيسات الصغيرة عشوائي. لكن عندما تمر بالقرب من المغناطيس الكبير، تتوجه سريعًا للتوافق مع المجال، وتنجذب نحو المغناطيس الكبير. الغالبية العظمى من المغناطيسات الصغيرة تنحرف نحو المغناطيس الكبير. وقد يتساءل المراقب الثاقب: "ماذا عن حفظ الطاقة؟"

فعلًا، عزم مغناطيسي في مجال مغناطيسي خارجي له طاقة كامنة مرتبطة به:

U=μB=μBcos(θ)U = -\vec{\mu}\cdot \vec{B} = -\mu B \cos(\theta)

لذا، إذا دار العزم المغناطيسي في المجال المغناطيسي الخارجي، سيحدث تغيير في الطاقة يُعطى بـ:

ΔU=UfUi=μB(cos(θf)cos(θi)).\Delta U = U_f - U_i = -\mu B (\cos(\theta_f) - \cos(\theta_i)).

في الحالة الخاصة التي ينقلب فيها مغناطيس صغير موجود في وضع عكس الحقل تمامًا إلى وضع التوافق معه، يتوافق ذلك مع انخفاض في الطاقة الكامنة:

ΔU=UfUi=μB(cos(0)cos(π))=2μB.\Delta U = U_f - U_i = -\mu B (\cos(0) - \cos(\pi)) = -2\mu B.

إذن أين تذهب تلك الطاقة؟ المغناطيس الكلاسيكي كمغناطيس نيوديميوم صغير لتثبيت الأشياء على الثلاجة يحتوي على جسيمات كثيرة ويستطيع تبديد أي كمية من الطاقة على شكل حرارة. ويمكن أن تكون الزوايا الأولية والنهائية بين العزم المغناطيسي والمجال المغناطيسي الخارجي أي قيمة، وعلى الأقل ستكون الاتجاهات الأولية عشوائية. لذا ستتبدد كميات مختلفة من الطاقة كحرارة لكل مغناطيس صغير. لكن كلاسيكيًا هذا لا يمثل مشكلة، إذ يمكن لمجموعة الجسيمات الكلاسيكية أن تبدد أي كمية من الطاقة كحرارة.

ما الذي نتوقعه بتطبيق التفكير الكلاسيكي على المقاييس الذرية؟

على أقل تقدير، لا يسري هذا على المغناطيسات ذات المقياس الذري، لأن هناك عددًا أقل من الجسيمات المعنية، وعددًا أقل من درجات الحرية التي يمكن من خلالها تبديد الطاقة. اقترحت نظريات الميكانيكا الكمية المبكرة أيضًا أن الطاقة التي يمكن لجسيم منفرد كالإلكترون امتصاصها ستكون كمية، بمعنى أن الإلكترون لا يستطيع امتصاص إلا كميات محددة من الطاقة. ولأن الاتجاهات الأولية العشوائية تستلزم تبديد كميات عشوائية من الطاقة، فلا ينبغي أن يكون ذلك ممكنًا لنظام ذي مستويات طاقة كمية. لا يمكن تبديد الطاقة الزائدة كحرارة. فماذا سيحدث عوضًا عن ذلك؟

اختبر فهمك

اقرأ الأسئلة أدناه، فكّر في إجاباتك، ثم اضغط على المثلثات للكشف عن الحلول.

اشرح ما تعتقد أنه سيحدث في موقف مثل الموقف الموصوف أعلاه. أي، لديك مغناطيس صغير جدًا على المستوى الذري لا يستطيع تبديد أي طاقة كحرارة. لذا، يجب أن تبقى أي طاقة كامنة مغناطيسية أولية في النظام. ومع ذلك، يُطبَّق عزم دوران بواسطة مجال مغناطيسي خارجي يحاول تدوير المغناطيس الصغير للتوافق مع المجال الخارجي. ماذا سيحدث؟

الإجابة:

سيدور العزم المغناطيسي الصغير نحو التوافق مع المجال الخارجي. لكن عندما يتوافق لحظيًا، تكون لديه طاقة حركية دورانية تجعله يستمر في الدوران متجاوزًا المجال وخارجًا عن التوافق. يمكن رؤية هذا السلوك حتى في المغناطيسات الكلاسيكية الكبيرة. لكن في تلك الأنظمة الكلاسيكية، يتوقف تذبذب العزم المغناطيسي الصغير في نهاية المطاف مع تبديد الطاقة على شكل حرارة. أما في نظام بدون آلية تبديد كهذه، فيجب أن يستمر التذبذب إلى أجل غير مسمى.

بالنظر إلى السلوك المتوقع في الإجابة أعلاه، ما توزيع الجسيمات المغناطيسية الذي تتوقع رؤيته على الشاشة؟

الإجابة:

توزيع سلس من أقصى انحراف نحو الجانب الأقوى من المجال المغناطيسي (تلك الجسيمات التي بدأت متوافقة مع المجال الخارجي) إلى أقصى انحراف نحو الجانب الأضعف من المجال (تلك الجسيمات التي بدأت في وضع عكس المجال تمامًا)، وكل انحراف بينهما يتوافق مع كل اتجاه أولي بين هذين الطرفين.

Diagram of a beam of particles passing through a magnet. They are deflected to varying degrees along the direction of the magnetic field. So when they strike a distant screen they form a line.

ماذا تتنبأ الميكانيكا الكمية؟

ربما الأغرب من بين كل الاحتمالات هو الآتي: ماذا لو كان الزخم الزاوي للإلكترون كميًا، وإسقاطه على محور ما كميًا أيضًا؟ إن تكميم الزخم الزاوي كمقدار أمر مثير للاهتمام، لكن قد يحاول المرء تفسيره بالحدس الكلاسيكي، كما استقرت المدارات الكوكبية في مسارات ثابتة لا تتقاطع، مع امتلاكها لزخوم زاوية محددة مسموح بها فقط. لكن ماذا لو كان هذا المتجه للزخم الزاوي لا يستطيع إلا أن يشير تمامًا نحو zz أو تمامًا عكس zz، دون أي مكون آخر على zz؟ وماذا لو كان عند قياسه على اتجاه مختلف، يشير إما تمامًا على xx أو تمامًا عكس xx، ولا شيء بينهما؟ سيكون ذلك غريبًا بطريقة تربك كل الحدس الكلاسيكي.

اختبر فهمك

اقرأ السؤال أدناه، فكّر في إجابتك، ثم اضغط على المثلث للكشف عن الحل.

ما نوع توزيع الجسيمات على الشاشة الذي تتوقع إيجاده في هذه الحالة الأخيرة، حيث يكون إسقاط الزخم الزاوي على اتجاه المجال كميًا؟ لا تتردد في الأخذ بعين الاعتبار فقط الجسيمات التي تمر تمامًا عبر مركز الجهاز، أو تضمين تلك التي تنحرف قليلًا عن المركز إلى حيث يكون التدرج أضعف. فقط كن واضحًا.

الإجابة:

الجسيمات في مركز الجهاز ستتعرض لمجال غير متجانس واحد وستُقاس جميعها لتمتلك أحد اتجاهين لعزومها المغناطيسية. لذا، ستنحرف إما بالحد الأقصى مع التدرج أو بالحد الأقصى ضد التدرج، ولا شيء بينهما. بالطبع، على جانبي المحور الجانبي، حيث التدرج أضعف، سيكون الانحراف أصغر. وعند مواضع جانبية كبيرة جدًا، قد تكون الجسيمات خارج نطاق التدرج كليًا، وقد يوجد مجرد منطقة واحدة من الجسيمات غير المنحرفة.

Diagram of a beam of particles being deflected either up or down, striking one of two dots on a screen, with no particles in between these two maxima

كيف ستساعدنا الكيوبتات في اختبار ذلك؟

تستخدم معظم الحواسيب الكمية "الكيوبتات" - الأنظمة الكمية المقابلة للبتات الكلاسيكية. وبشكل أكثر تحديدًا، هي مصممة لتكون أنظمة ثنائية المستوى، مماثلة لحالتي "تشغيل"/"إيقاف" للبتات الكلاسيكية. توجد نماذج للحوسبة الكمية تستخدم أنظمة ثلاثية المستويات (تُعرف بـ"الكيوتريتات") أو أنظمة متعددة المستويات (تُعرف بـ"الكيوديتات"). لكن معظم الأعمال تتمحور حول الكيوبتات. على وجه الخصوص، تستخدم الحواسيب الكمية من IBM® ما يُعرف بالكيوبتات الترانزمون ذات التردد الثابت. هذه تختلف كثيرًا عن الزخم الزاوي المداري أو السبيني للذرات. لكن مثل سبين الإلكترون، الكيوبتات من IBM® هي أنظمة ميكانيكا كمية يمكنها التفاعل مع الضوء وإجراء القياسات عليها. في الواقع، كثيرًا ما نجد تشابهات بين حالات السبين الكمية والحالات الحسابية للكيوبت. على سبيل المثال، كثيرًا ما نرى حالة "السبين للأعلى" مرتبطة بالحالة الحسابية 0، وحالة "السبين للأسفل" مرتبطة بالحالة الحسابية 1:

0|\uparrow\rangle \sim |0\rangle 1|\downarrow \rangle \sim |1\rangle

يمكننا استخدام هذه التشابهات لرصد السلوك الكمي في الحواسيب الكمية من IBM الذي يحاكي السلوك الكمي للزخم الزاوي المداري أو السبيني في الذرات. سنجري ملاحظات مماثلة باستخدام تركيبات خطية من هذه الحالات تسمح لنا بتوسيع النقاش ليشمل الزخم الزاوي في أي اتجاه.

التجربة الأولى: قياس منفرد

في هذه التجربة الأولى وطوال الوحدة، سنستخدم إطارًا للحوسبة الكمية يُعرف بـ"أنماط Qiskit"، الذي يُقسّم سير العمل إلى الخطوات التالية:

  • الخطوة 1: تعيين المدخلات الكلاسيكية إلى مسألة كمية
  • الخطوة 2: تحسين المسألة للتنفيذ الكمي
  • الخطوة 3: التنفيذ باستخدام Qiskit Runtime Primitives
  • الخطوة 4: المعالجة اللاحقة والتحليل الكلاسيكي

سنتبع هذه الخطوات عمومًا، وإن كنا قد لا نُسمّيها دائمًا صراحةً.

الخطوة 1: تعيين المدخلات الكلاسيكية إلى مسألة كمية

هنا، المدخلات الكلاسيكية هي اتجاهات السبين قبل القياس في جهاز ستيرن-غيرلاخ. لا تقلق كثيرًا بشأن الطبيعة الدقيقة للحالة الكمية قبل القياس. هذا موضوع وحدة مختلفة من وحدات Qiskit Classrooms، تتعلق بنظرية بيل.

لاحظ أن الحواسيب الكمية من IBM تقيس الحالات على طول محور zz. لذا فهذه التجربة الأولى ستكون مشابهة جدًا لتجربة ستيرن-غيرلاخ مع تدرج المجال المغناطيسي على طول zz. سنرى لاحقًا كيفية تغيير النظام للقياس على اتجاهات مختلفة.

لنبدأ بصنع الأشبه بحالة السبين، أي بعض المزيج من |\uparrow\rangle و|\downarrow\rangle أو ما يعادله 0|0\rangle و1|1\rangle. اقترحنا بعض القيم الأولية، لكن لا تتردد في تجربة قيم أخرى أو حتى قيم عشوائية.

import random
from numpy import pi
import numpy as np

# Use these lines to choose your own arbitrary state vector and normalize it.
# a = 2
# b = (1+1j)
# norm = np.sqrt(a*np.conjugate(a)+b*np.conjugate(b))
# a = a/norm
# b = b/norm
# print(a,b)

# Use these lines if you would rather look at at random spin orientations.
a = random.random()
b = random.random()
norm = np.sqrt(a * np.conjugate(a) + b * np.conjugate(b))
a = a / norm
b = b / norm
print(a, b)
0.7032089086145691 0.7109832845047109

سنستخدم الآن الزوايا أعلاه كمعاملات في دائرة كمية. نحن ننظر في جسيم واحد فقط في كل مرة، لذا سنستخدم كيوبتًا واحدًا فقط في دائرتنا، وسنحتاج إلى سجل كلاسيكي واحد فقط.

from qiskit.circuit import QuantumRegister, ClassicalRegister, QuantumCircuit, Parameter

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(1, "c")
qc = QuantumCircuit(qr, cr)

# Initialize the quantum state
qc.initialize([a, b])
qc.measure(0, 0)
qc.draw("mpl")

Output of the previous code cell

الخطوة 2: تحسين المسألة للتنفيذ الكمي

لتشغيل تجربتنا على حاسوب كمي حقيقي، نحتاج إلى تحميل Qiskit Runtime Service واختيار حاسوب كمي (أو "خلفية"). أدناه، نختار ببساطة الحاسوب الكمي الأقل ازدحامًا المتاح لنا.

يوجد أدناه كود لحفظ بياناتك الاعتمادية عند الاستخدام الأول. تأكد من حذف هذه المعلومات من دفتر الملاحظات بعد حفظها في بيئتك، حتى لا تُشارَك اعتمادياتك عن طريق الخطأ عند مشاركة دفتر الملاحظات. راجع إعداد حساب IBM Cloud الخاص بك وتهيئة الخدمة في بيئة غير موثوقة لمزيد من التوجيه.

# Load the Qiskit Runtime service
from qiskit_ibm_runtime import QiskitRuntimeService

# Syntax for first saving your token. Delete these lines after saving your credentials.
# QiskitRuntimeService.save_account(channel='ibm_quantum_platform', instance = '<YOUR_IBM_INSTANCE_CRN>', token='<YOUR-API_KEY>', overwrite=True, set_as_default=True)
# service = QiskitRuntimeService(channel='ibm_quantum_platform')

# Syntax for specifying a channel and instance (if you need to change from the default set above)
# service = QiskitRuntimeService(channel='<channel name here>', instance="<your instance name here>")

# Load saved credentials
service = QiskitRuntimeService()
# Load the Runtime primitive and session
from qiskit_ibm_runtime import Session, SamplerV2 as Sampler

# Use the least busy backend, specify options as needed
# backend = service.least_busy(operational=True, simulator=False, min_num_qubits = 127)
backend = service.least_busy()
print(backend.name)
ibm_sherbrooke

يجب الآن transpile الدائرة، بمعنى أننا يجب أن نعيّن دائرتنا على البوابات الأساسية المتاحة لحاسوبنا الكمي المختار، ونريد تحسين دائرتنا للتشغيل على ذلك الحاسوب الكمي.

# Transpile the circuit and optimize for running on the quantum computer selected
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager

pm = generate_preset_pass_manager(optimization_level=3, backend=backend)
qc_ibm = pm.run(qc)

الخطوة 3: التنفيذ باستخدام Qiskit Runtime Primitives

نريد الآن تشغيل هذا على حاسوب كمي حقيقي. كل بناء الجملة اللازم لذلك موجود في كتلة الكود أدناه. إذا كنت قد استنفدت الوقت المخصص لك على الحواسيب الكمية الحقيقية، أو إذا لم يكن لديك اتصال بالإنترنت، يمكنك إلغاء تعليق كتلة الكود التالية، التي ستشغل الكود على محاكي محلي.

# Specify that we want to use only a single shot, to represent a single measurement of a spin in a SG device.
num_shots = 1

# Evaluate the problem using a QPU via Qiskit IBM Runtime
# The best practice is to use a session as shown below. This is available to Premium Plan, Flex Plan, and On-Prem (IBM Quantum Platform API) Plan users.
with Session(backend=backend) as session:
sampler = Sampler(mode=session)
dist = sampler.run([qc_ibm], shots=num_shots).result()
session.close()
counts = dist[0].data.c.get_counts()

# Open users can still carry out this experiment, but without making use of a session, meaning repeated queuing is possible.
# from qiskit_ibm_runtime import Batch,
# batch = Batch(backend=backend)
# sampler = Sampler(mode=batch)
# dist = sampler.run([qc_ibm], shots=num_shots).result()
# Close the batch because no context manager was used.
# batch.close()
# counts = dist[0].data.c.get_counts()

استخدم الكود أدناه إذا لم تتمكن من تشغيل التجربة على حاسوب كمي حقيقي.

# This uses a local simulator
# from qiskit_aer import AerSimulator

# This generates a simulator that mimics the real quantum system
# backend_sim = AerSimulator.from_backend(backend)

# Import an estimator, this time from qiskit (we import from Runtime for real hardware)
# from qiskit.primitives import BackendSamplerV2
# sampler = BackendSamplerV2(backend = backend_sim)

# num_shots = 1

# This runs the job
# dist = sampler.run([qc_ibm], shots = num_shots).result()

# This selects measurement counts for the 0th circuit, which in this case is the only circuit
# counts=dist[0].data.c.get_counts()

الخطوة 4: المعالجة اللاحقة والتحليل الكلاسيكي

بالنسبة لهذه التجربة البسيطة جدًا، يتمثل التحليل الكلاسيكي فقط في تصور نتيجة التجربة.

from qiskit.visualization import plot_histogram

print("counts = ", counts)
plot_histogram(counts)
counts =  {'0': 1}

Output of the previous code cell

أجرينا قياسًا واحدًا وحصلنا على "0". هذا ليس مفاجئًا بالنسبة لنا. نحن نعلم أننا نستخدم حاسوبًا كميًا مؤلفًا من كيوبتات واعتدنا جدًا على البتات الكلاسيكية التي ترجع 0 أو 1. لكن ضع في بالك: هذا هو المقابل الكمي للتجارب التي أُجريت مع جسيمات ذات عزوم مغناطيسية. لو كنا نتوقع توزيعًا متساويًا بين 0 و+1، لكان من المفاجئ فعلًا حصولنا على أحد الطرفين في أول قياس. هذا التكميم المفاجئ للنتائج في تجربة ستيرن-غيرلاخ هو ما قادنا إلى فهم أعمق للطبيعة، وهو ما ساعدنا في نهاية المطاف على بناء الحواسيب الكمية.

لنرَ ما سيحدث عند إجراء مجموعة من القياسات.

التجربة الثانية: قياس جسيمات كثيرة

لجمع إحصاءات عن قياسات كثيرة كهذه، لا نحتاج إلى تكرار الخطوتين 1 و2. يمكننا ببساطة زيادة عدد اللقطات في تجربتنا. لا تتردد في تجربة عدد مختلف من اللقطات في نموذج الخطوة 3 أدناه.

from qiskit_ibm_runtime import Session, SamplerV2 as Sampler

num_shots = 100

# Evaluate the problem using a QPU via Qiskit IBM Runtime
# The best practice is to use a session as shown below. This is available to Premium Plan, Flex Plan, and On-Prem (IBM Quantum Platform API) Plan users.
with Session(backend=backend) as session:
sampler = Sampler(mode=session)
dist = sampler.run([qc_ibm], shots=num_shots).result()
session.close()
counts = dist[0].data.c.get_counts()

# Open users can still carry out this experiment, but without making use of a session, meaning repeated queuing is possible.
# batch = Batch(backend=backend)
# sampler = Sampler(mode=batch)
# dist = sampler.run([qc_ibm], shots=num_shots).result()
# Close the batch because no context manager was used.
# batch.close()
# counts = dist[0].data.c.get_counts()

كما في السابق، إذا لم تتمكن من التشغيل على حاسوب كمي حقيقي، قم بإلغاء تعليق الكتلة أعلاه من التجربة الأولى، وغيّر ببساطة num_shots = 1 إلى num_shots = 100 أو أكثر.

plot_histogram(counts)

Output of the previous code cell

نلاحظ إننا أحياناً نقيس 0 وأحياناً نقيس 1. لاحظ إننا ما نقيس أي شيء غير هذا! تقدر تغير عدد الـ shots وتلاحظ إن احتمال قياس 0 أو 1 يبدو ثابتاً إلى حد ما بين الجولات المختلفة باختلاف عدد الـ shots. يعني في شيء في طريقة تهيئة الحالة يحدد احتمالات نتائج القياس، مع إن أي قياس منفرد ممكن يعطي 0 أو 1.

التجربة الثالثة: دوران عشوائي في الفرن

في تجربة شتيرن-غيرلاخ، ما كان الباحثون يتحكمون في الزاوية التي يخرج منها متجه الزخم الزاوي من الفرن. كانت الاتجاهات عشوائية (أو في شيء أكثر غموضاً! انظر وحدة Qiskit Classroom عن نظرية بيل). النظير المنطقي لتلك التجربة يكون إننا نهيئ حالات الكيوبت بشكل عشوائي ونجري قياسات كثيرة.

الخطوة 1: تحويل المدخلات الكلاسيكية إلى مسألة كمية

الدائرة التي نريد نبنيها هي نفسها السابقة. الفرق الوحيد هو إننا هذه المرة سنبني الدائرة باستخدام بوابات بمعاملات حرة θ\theta و ϕ\phi. بعدها تُسند قيم عددية لهذه المعاملات في كل جولة جديدة.

# from qiskit.circuit import QuantumCircuit, Parameter

theta = Parameter("θ")
phi = Parameter("$\phi$")

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(1, "c")
qc = QuantumCircuit(qr, cr)

# Add rotation gates for rotating the state of qubit 0 to random orientations
qc.rx(theta, 0)
qc.rz(phi, 0)
qc.measure(0, 0)

qc.draw("mpl")

Output of the previous code cell

تشغيل دائرة كمية بـ shot واحد فقط وتكرار ذلك مع إعدادات عشوائية كثيرة هو سير عمل غير معتاد للحاسوب الكمي. ممكن يتم بالتأكيد، لكن لتبسيط الأمور سنستخدم محاكياً محلياً هنا.

# This uses a local simulator
from qiskit_aer import AerSimulator

# Import an estimator, this time from qiskit (we import from Runtime for real hardware)
from qiskit.primitives import BackendSamplerV2

# This generates a simulator that mimics the real quantum system
backend_sim = AerSimulator.from_backend(backend)
sampler_sim = BackendSamplerV2(backend=backend_sim)

# from qiskit.primitives import BackendSamplerV2
# sampler = BackendSamplerV2(backend=backend)
# A list to store the accumulated probabilities of the two possible measurement outcomes.
probslist = {"0": 0.0, "1": 0.0}

# Choose how many "particles"/measurements
measurements = 100
num_shots = 1

for i in range(measurements):
# Assign a random orientation for each measurement
phi = random.random() * 2 * pi
theta = random.random() * 2 * pi

angles = [phi, theta]
circuit = qc.assign_parameters(angles)
qc_ibm = pm.run(circuit)

# Run the circuit
# job = sampler.run([circuit],num_shots = 1)
dist = sampler_sim.run([qc_ibm], shots=num_shots).result()

# Update the list of probabilities
zeroterm = dist[0].data.c.get_counts().get("0") or 0
oneterm = dist[0].data.c.get_counts().get("1") or 0
probslist.update({"0": probslist.get("0") + zeroterm})
probslist.update({"1": probslist.get("1") + oneterm})

probslist.update({"0": probslist.get("0") / measurements})
probslist.update({"1": probslist.get("1") / measurements})
# print(probslist)
plot_histogram(probslist)

Output of the previous code cell

نلاحظ إذن إن الحالة الابتدائية العشوائية للكيوبتات (المقابلة للاتجاهات العشوائية للزخم الزاوي في تجربة شتيرن-غيرلاخ) تعطي أعداداً متقاربة من حالات 0 و1 (مثل الأعداد المتقاربة من حالات السبين للأعلى والسبين للأسفل). وهذا بالضبط ما أظهرته تجربة شتيرن-غيرلاخ الأصلية.

التجربة الرابعة: القياسات المتكررة

لما يبدأ الكيوبت في حالة عشوائية، نرى إن هناك احتمالاً تقريبياً 50-50 لقياس أحد الطرفين على الآخر. لكن ماذا يحدث لحالة الكيوبت (أو الزخم الزاوي للجسيم) بعد القياس؟ للإجابة على ذلك، نحتاج نعرّف دائرة تتيح لنا إجراء قياسات متعددة لنفس الكيوبتات. لنعرّف دائرة نستخدمها للتحقيق في هذا. سنريد إتاحة إمكانية قياس كلتا الحالتين 0|0\rangle و1|1\rangle، لذا نحتاج شيئاً يدوّر الحالة الابتدائية للكيوبت بعيداً عن الحالة الافتراضية 0|0\rangle. في هذه الحالة سنستخدم بوابة هادامار HH، إذ إن H0=12(0+1)H|0\rangle = \frac{1}{\sqrt{2}}(|0\rangle+|1\rangle). لاحظ إنه بشكل افتراضي، كلا القياسين سيكونان على طول zz.

from qiskit import QuantumCircuit

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(2, "c")
qc = QuantumCircuit(qr, cr)

# Initialize the qubit to be a mixture of 0 and 1 states.
qc.h(0)

# Add a first measurement
qc.measure(0, 0)
qc.barrier()

# Add a second measurement
qc.measure(0, 1)

qc.draw("mpl")

qc_ibm = pm.run(qc)
# Step 3: Run the job

num_shots = 1000
dist = sampler.run([qc_ibm], shots=num_shots).result()
# To run on a simulator, uncomment the line below and comment out the line above.
# dist = sampler_sim.run([qc_ibm], shots=num_shots).result()
counts = dist[0].data.c.get_counts()
print(counts)
{'00': 497, '11': 498, '01': 3, '10': 2}
# Step 4: Post-process
plot_histogram(counts)

Output of the previous code cell

في الشكل أعلاه، الأعمدة مُعنونة بـ "00" و"01" وهكذا. هنا هذه الأرقام تشير إلى "النتيجة الثانية، النتيجة الأولى". فـ"00" تعني إن كلا القياسين أعطيا حالة 0|0\rangle، و"01" تعني إن القياس الأول أعطى 1|1\rangle والثاني أعطى 0|0\rangle. الغالبية العظمى من الكيوبتات إما قِيست على أنها في 0|0\rangle مرتين، أو في 1|1\rangle مرتين. كان من النادر جداً أن يُقاس الكيوبت في حالة ثم في حالة أخرى، والحالات القليلة التي حدث فيها ذلك (~1%) سببها الضوضاء. في هذه الحالة تمت محاكاة تلك الضوضاء بما يتوافق مع سلوك النظام الكمي الحقيقي. هذا الترابط الملحوظ بين القياسات المتتالية يُلاحظ أيضاً في قياسات نوع شتيرن-غيرلاخ للجسيمات ذات الزخم الزاوي للسبين. إذا قِيس جسيم على أنه "سبين للأعلى"، فإن قياساً لاحقاً بعد وقت قصير سيعطي مرة أخرى "سبين للأعلى" (مع تغير طفيف بسبب الضوضاء).

قد يبدو هذا بديهياً. فمن وجهة نظر ما، تقدر تقول: "طبعاً! لو قِيس الكيوبت على أنه في حالة معينة، ثم قسته مرة ثانية بسرعة، ليش ما يكون لا يزال في نفس الحالة؟" نعم، هذا صحيح، لكن الأمر أعمق من ذلك. لو تمسكنا بهذه الدقة، ربما يساعدنا ذلك على اختيار أدوات رياضية مناسبة لوصف هذه الظاهرة.

تحليل التجارب حتى الآن

لنجمع بعض الملاحظات من تجاربنا حتى الآن:

  • قياس نظام ميكانيكا الكم سيعطي فقط إحدى "القيم المسموح بها". بالنسبة للأنظمة ثنائية المستوى مثل الكيوبتات أو جسيمات السبين-1/2، القياس سيعطي فقط إحدى النتيجتين الثنائيتين.
  • لما نهيئ حالة نظامنا الثنائي بشكل عشوائي (مثل جسيمات السبين-1/2 الخارجة من فرن)، أي من نتيجتي القياس الثنائيتين ممكنة.
  • بمجرد إجراء القياس ومعرفة حالة النظام، تكرار قياس نفس المتغير الفيزيائي لا يغير الحالة! يعني لو حصلنا على الحالة 0 مرة، عند القياس مرة أخرى تكون لا تزال في الحالة 0 (مع بعض الضوضاء الطفيفة ~0.1% إلى 1%).

لاحظ صراحةً إننا لم نتناول بعد الطبيعة الاحتمالية لميكانيكا الكم، ولا قلنا شيئاً عن "انهيار" الحالة إلى حالة ذاتية. باستخدام الملاحظات أعلاه فقط، قد يكون من المغري البحث عن عملية رياضية OO تترك مجموعة خاصة من الحالات الكمية ψ|\psi\rangle دون تغيير، ربما عدا ثابت: Oψ=cψO|\psi\rangle = c|\psi \rangle، إذ إن القياس على طول zz مرتين يعطي نفس النتيجة. في نهاية المطاف، هذا البحث سيفشل في وصف جميع السلوكيات التي سنراها. لكنه يستطيع وصف بعض الأشياء، لذا سنواصل هذا المسار قليلاً.

توجد فعلاً مثل هذه العملية. عملية المصفوفة على بعض المتجهات تغيرها، وعملية المصفوفة على متجهات أخرى (المتجهات الذاتية) تتركها دون تغيير عدا ثابت. خذ مثلاً المصفوفة MM والمتجه v|v\rangle حيث

M=(1221)M= \begin{pmatrix} 1 & 2 \\ 2 & 1\end{pmatrix}

و

v=(11)|v\rangle = \begin{pmatrix} 1\\1 \end{pmatrix}

لاحظ إن

Mv=(1221)(11)=(11+2121+11)=(33)=3v.M|v\rangle= \begin{pmatrix} 1 & 2 \\ 2 & 1\end{pmatrix}\begin{pmatrix} 1\\1 \end{pmatrix} = \begin{pmatrix} 1*1+2*1\\2*1+1*1 \end{pmatrix} = \begin{pmatrix} 3\\3 \end{pmatrix} = 3|v\rangle.

لكن لمتجهات أخرى، مثلاً v=(12)|v'\rangle = \begin{pmatrix} 1\\2\end{pmatrix}، لدينا

Mv=(1221)(12)=(11+2221+12)=(54)cv.M|v'\rangle= \begin{pmatrix} 1 & 2 \\ 2 & 1\end{pmatrix}\begin{pmatrix} 1\\2 \end{pmatrix} = \begin{pmatrix} 1*1+2*2\\2*1+1*2 \end{pmatrix} = \begin{pmatrix} 5\\4 \end{pmatrix} \neq c|v'\rangle.

قد نحاول وصف سبين الجسيم باستخدام مصفوفة، ونحاول وصف حالات الجسيمات بعد القياس باستخدام متجه يُسمى "متجه الحالة". ليس واضحاً على الإطلاق ما هي القيم التي ينبغي أن تدخل في مثل هذه المصفوفة أو متجه الحالة، لكن الخاصية الوحيدة المتوفرة من القياسات حتى الآن لتصنيف الحالات ستكون احتمال قياس 0 أو 1 ("سبين للأعلى" أو "سبين للأسفل" في سياق جسيمات السبين-1/2). ينبغي علينا اعتبار إن مدخلات متجهات الحالة مرتبطة بهذا الاحتمال (الاحتمال بالضبط، "سعة الاحتمال" - بمعنى نربّع المدخل للحصول على الاحتمال، وهكذا). لكن في هذه المرحلة، لسنا متأكدين إذا كانت مدخلات هذه المصفوفات ينبغي أن تكون حقيقية بحتاً، أو مركبة، أو غير ذلك. للأمان، لنحاول تطوير إطار تحقق فيه المتجهات والمصفوفات ما يلي:

  • ينبغي أن تكون مؤثرات المصفوفة مرتبطة بالتجربة قدر الإمكان. مثلاً، يمكننا ربط القيم الذاتية لمصفوفة السبين بإسقاطات السبين الملحوظة تجريبياً.
  • ينبغي ربط متجهات الحالة بالاحتمال على النحو التالي: إذا كان جسيم في متجه الحالة A|A\rangle، فإن احتمال أن يجد قياس لاحق الجسيم في الحالة B|B\rangle هو PABAB2P_{AB}\equiv |\langle A| B \rangle|^2.

هذا يمنحنا قدراً كبيراً من الحرية في تطوير مصفوفاتنا الأولى. مثلاً، يمكننا بشكل ساذج تجربة

0(10).|0\rangle \sim |\uparrow\rangle \sim \begin{pmatrix} 1 \\0 \end{pmatrix}.

هنا 0|0\rangle \sim |\uparrow\rangle تعني إن هناك حالات في الحواسيب الكمية وفي أنظمة السبين-1/2 متشابهة جداً وكثيراً ما تُطابَق مع بعضها. من الواضح إنها ليست متطابقة تماماً، إذ تشير إلى أنظمة مختلفة. لكن الجبر الواصف لهذين النظامين ثنائيي الحالة يمكن أن يتبع نفس القواعد (تلميح: يفعل ذلك بالفعل!). لاحظ إن هذا الاختيار العشوائي له ميزة جيدة واحدة. لاحظ إن

P00=002=(10)(10)2=12=1.P_{00} = |\langle 0| 0 \rangle|^2 = \vert \begin{pmatrix} 1 & 0\end{pmatrix} \begin{pmatrix} 1 \\ 0\end{pmatrix}\vert ^2 = |1|^2 = 1.

يعني لو كان الجسيم بالفعل في الحالة 0|0\rangle، فإن احتمال أن يعطي قياس لاحق 0|0\rangle أيضاً هو 1 (بصرف النظر عن تأثيرات الضوضاء). هذا ممتاز، لأننا رأينا بالفعل إنه بمجرد أن تكون الحالة في الحالة 0 أو "سبين للأعلى"، تبقى كذلك عند القياس اللاحق. الاحتمال أعلاه ينبغي أن يكون 100% فعلاً.

تحقق من فهمك

اقرأ الأسئلة أدناه، فكّر في إجاباتك، ثم اضغط على المثلثات لتكشف الحلول.

لماذا

0=(10)|0\rangle = \begin{pmatrix} 1 \\0 \end{pmatrix}

خيار أفضل من، مثلاً،

0=(20)?|0\rangle = \begin{pmatrix} 2 \\0 \end{pmatrix}?

الجواب:

محاولتنا لربط احتمال القياس بمربع الضرب الداخلي تعني إننا نحتاج أن يكون حجم كل متجه يساوي 1. يعني vv2=1|\langle v|v\rangle|^2 = 1 لكل v|v\rangle، إذ إن احتمال أن يكون شيء في الحالة v|v\rangle موجوداً في الحالة v|v\rangle هو 100%. هذا يُعرف بـ"شرط التسوية".

لماذا

0=(10)|0\rangle = \begin{pmatrix} 1 \\0 \end{pmatrix}

خيار أفضل من، مثلاً،

0=(01)?|0\rangle = \begin{pmatrix} 0 \\1 \end{pmatrix}?

الجواب:

ليس كذلك. لا يوجد سبب يجعلنا نختار في البداية 0=(10)|0\rangle = \begin{pmatrix} 1 \\0 \end{pmatrix}. بل هو اتفاق. لكن بمجرد أن نتخذ هذا الاختيار، يفرض قيوداً معينة على الاختيارات اللاحقة. انظر أدناه.

تذكّر إننا في التجارب أعلاه وجدنا إن الكيوبت الذي يبدأ في الحالة 0|0\rangle يبقى فيها عند القياس اللاحق. نفس الشيء ينطبق على 1|1\rangle. هذا يعني إن الكيوبت الذي في 0|0\rangle له احتمال صفري للقياس في الحالة 1|1\rangle (بصرف النظر عن تأثيرات الضوضاء). الصلة المطلوبة بين الضرب الداخلي واحتمالات القياسات تخبرنا إذن إن

P01=P10=0.P_{01} = P_{10}=0.

بدون فقدان للعمومية، يمكننا كتابة متجه الحالة 1=(ab)|1\rangle = \begin{pmatrix} a \\ b \end{pmatrix}. ثم يمكننا كتابة

P01=012=(10)(ab)2=a2=0.P_{01} = |\langle 0| 1 \rangle|^2 = \vert \begin{pmatrix} 1 & 0\end{pmatrix} \begin{pmatrix} a \\ b\end{pmatrix}\vert ^2 = |a|^2 = 0.

اشتراط أن يكون P11=1P_{11} = 1، المعروف بـ"شرط التسوية"، يخبرنا إن b2=1|b|^2=1. هذا وحده لا يحدد سوى b=eiϕb=e^{i\phi} لـϕR\phi \in \mathbb{R}. تبيّن إن هناك أسباباً أخرى لاختيار b=1b=1 تتجاوز هذه المقدمة في الموضوع. في الوقت الحالي، يكفي أن نقول إن b=1b=1 هي حل مقبول واحد.

لقد تقدمنا كثيراً في تحليلنا. اختيار شكل لمتجهات حالتنا يتيح لنا بناء مصفوفة تصف شيئاً عن الظواهر الفيزيائية المعمول بها هنا. بشكل خاص، لأن تجربة شتيرن-غيرلاخ الأصلية قاست انقساماً في المسارات بناءً على مكونات الزخم الزاوي للسبين على طول المحور zz، نريد مؤثراً يصف ذلك بالضبط: SzS_z. ارتباط مهم آخر بالتجربة هو إننا من مقدار الانحراف، وزمن السفر، وقوة المجال المغناطيسي المعروفة، يمكننا تحديد مقدار المكون zz للسبين. وإن كان هذا يتطلب افتراضات كثيرة حول دقة الإعداد التجريبي، فإننا هنا سنكتفي بالإشارة إلى إن مكونات الزخم الزاوي للسبين على المحور zz المقاسة هي ±/2\pm \hbar/2.

إذن نبحث عن مصفوفة بقيم ذاتية حقيقية (تحققها المصفوفات الهيرميتية) بقيم ذاتية تقابل مكونات السبين الملحوظة تجريبياً. بدون فقدان للعمومية، يمكننا كتابة Sz=(s11s12s21s22)S_z = \begin{pmatrix} s_{11} & s_{12} \\ s_{21} & s_{22}\end{pmatrix}، ويمكننا اشتراط:

Sz=(s11s12s21s22)(10)=(s11s21)=!2(10)s11=/2,s21=0S_z |\uparrow\rangle = \begin{pmatrix} s_{11} & s_{12} \\ s_{21} & s_{22}\end{pmatrix}\begin{pmatrix}1 \\0\end{pmatrix} = \begin{pmatrix} s_{11} \\ s_{21} \end{pmatrix} \overset{!}{=} \frac{\hbar}{2} \begin{pmatrix}1 \\0\end{pmatrix} \rightarrow s_{11} = \hbar/2,s_{21}=0 Sz=(s11s12s21s22)(01)=(s12s22)=!2(01)s12=0,s22=/2S_z |\downarrow\rangle = \begin{pmatrix} s_{11} & s_{12} \\ s_{21} & s_{22}\end{pmatrix}\begin{pmatrix}0 \\1\end{pmatrix} = \begin{pmatrix} s_{12} \\ s_{22} \end{pmatrix} \overset{!}{=} -\frac{\hbar}{2} \begin{pmatrix}0 \\1\end{pmatrix} \rightarrow s_{12} = 0, s_{22}=-\hbar/2

بالجمع، وبعد سحب العامل المشترك /2\hbar/2، نحصل على

Sz=2(1001).S_z = \frac{\hbar}{2} \begin{pmatrix} 1 & 0 \\ 0 & -1\end{pmatrix}.

هذا هو مؤثر السبين-z المعروف الموجود في جميع كتب ميكانيكا الكم. كثيراً ما يُرى هذا بدون /2\hbar/2، وفي هذه الحالة يُسمى مؤثر "باولي-z"، ويُرمز له عادةً بـσz\sigma_z:

σz=(1001).\sigma_z = \begin{pmatrix} 1 & 0 \\ 0 & -1\end{pmatrix}.

هذا مفيد، إذ إن مؤثر باولي هذا (والمصفوفات المرتبطة به) يمكنه وصف أنظمة فيزيائية كثيرة تتضمن مستويين أو نتيجتين محتملتين للقياس، بما في ذلك حالات كيوبتات الترانسمون في الحاسوب الكمي.

قبل أن ننتقل إلى مؤثرات وحالات أخرى مرتبطة بهذه، يجب أن نتناول حقيقة كثيراً ما يُساء فهمها. تطبيق المؤثر ليس نفس القياس. بمعنى واحد، قد تقول: "طبعاً لا! واحد يحدث على الورق كجزء من حساب رياضي، والآخر يحدث في مختبر على أنظمة فيزيائية." نعم، هذا صحيح، لكنه أكثر من ذلك. إجراء قياس للمكون zz للسبين سيعطي دائماً حالة "سبين للأعلى" أو "سبين للأسفل"، بغض النظر عن الحالة الابتدائية للنظام. رأينا هذا مع النظائر الحوسبية الكمية 0|0\rangle و1|1\rangle. هيّأنا حالات بمئات الاتجاهات العشوائية، والقياسات أعطت دائماً إما 0|0\rangle أو 1|1\rangle. هذا يُعرف بـ"انهيار الحالة" عند القياس إلى حالة ذاتية. لا يحدث هذا عند تطبيق مصفوفة على حالة. جرّب الأسئلة أدناه لاستكشاف هذا.

تحقق من فهمك

اقرأ السؤال (الأسئلة) أدناه، فكّر في إجابتك، ثم اضغط على المثلث لتكشف الحل.

لنفترض إنك تبدأ بجسيم في حالة سبين

ψ=(3/52/5).|\psi\rangle = \begin{pmatrix}\sqrt{3/5} \\ \sqrt{2/5}\end{pmatrix}.

(أ) ماذا تحصل لو طبّقت مؤثر SzS_z على متجه الحالة هذا؟ (ب) ماذا تحصل لو أجريت قياساً واحداً للمكون zz للسبين لهذا الجسيم؟ (ج) ماذا تحصل لو هيّأت جسيمات كثيرة في نفس هذه الحالة وأجريت آلاف القياسات للمكون zz للسبين؟

الأجوبة:

(أ) تحصل على

Szψ=2(1001)(3/52/5)S_z |\psi\rangle = \frac{\hbar}{2} \begin{pmatrix} 1 & 0 \\ 0 & -1\end{pmatrix} \begin{pmatrix}\sqrt{3/5} \\ \sqrt{2/5}\end{pmatrix}=2(3/52/5).= \frac{\hbar}{2} \begin{pmatrix}\sqrt{3/5} \\ -\sqrt{2/5}\end{pmatrix}.

هذا هو. لا توجد نتيجة تجريبية. فقط تطبّق المصفوفة على المتجه وتحصل على متجه مختلف قليلاً يحتوي الآن على إشارة "-" جديدة، ولم تعد له قيمة حجم تساوي 1، إذ يحتوي على معامل /2\hbar/2.

(ب) ستحصل إما على |\uparrow\rangle أو |\downarrow\rangle. يقابل هذا ملاحظة إسقاط السبين على المحور zz بمقدار /2\hbar/2 أو /2-\hbar/2 على التوالي. يمكننا أيضاً تحديد احتمال كل نتيجة، إذ

Pψ=ψ2=(10)(3/52/5)2=3/52=35P_{\uparrow\psi}=|\langle \uparrow|\psi\rangle|^2 = \vert \begin{pmatrix}1 & 0\end{pmatrix} \begin{pmatrix}\sqrt{3/5} \\ \sqrt{2/5}\end{pmatrix}\vert^2 = |\sqrt{3/5}|^2 = \frac{3}{5}Pψ=ψ2=(01)(3/52/5)2=2/52=25P_{\downarrow\psi}=|\langle \downarrow|\psi\rangle|^2 = \vert \begin{pmatrix}0 & 1\end{pmatrix} \begin{pmatrix}\sqrt{3/5} \\ \sqrt{2/5}\end{pmatrix}\vert^2 = |\sqrt{2/5}|^2 = \frac{2}{5}

فرغم أن حالة السبين للأعلى أرجح بنسبة 20%، إلا أن كلتا النتيجتين ممكنة، وسنحصل على إحدى هاتين الحالتين فقط.

(ج) ستعطي تقريباً 60% من القياسات جسيمات سبين للأعلى، وتقريباً 40% جسيمات سبين للأسفل، وفقاً لاحتمالات القياس المحسوبة في الجزء (ب).

تحقق من إجابات الجزءين (ب) و(ج) من السؤال السابق باستخدام التماثل بين حالات السبين للأعلى للذرة وحالات الكيوبت:

0.|\uparrow\rangle\sim|0\rangle.

برمج دوائر كمية لإنشاء الحالة الابتدائية المطلوبة، ثم استخدم إما أجهزة حقيقية أو محاكياً للتحقق من نتائج قياس واحد، ومن مجموعة تحتوي مئات أو حتى آلاف القياسات.

الجواب:

#Use the backend sampler for part (b) because it allows us to use a single shot.
from qiskit_aer import AerSimulator
backend_sim = AerSimulator.from_backend(backend)
from qiskit.primitives import BackendSampler
sampler = BackendSampler(backend = backend_sim)

#Create a quantum circuit to initialize the state.
import math
psi = [math.sqrt(3/5),math.sqrt(2/5)]
qc = QuantumCircuit(1,1)
qc.initialize(psi, [0])

#Add measurement to the circuit
qc.measure(0,0)
qc.draw('mpl')

#Set num_shots =1 for part (b) and num_shots = 1000 or more for part (c).
num_shots = 1000

#Run the job and print the result. You should obtain only 0 or 1 in part (b) for a single shot.
#You should obtain a probability distribution with approximately 60% 0 and 40% 1 in part (c)

dist = sampler.run([qc_ibm], shots = num_shots).result()
counts=dist[0].data.c.get_counts()
print(counts)

#You should obtain {0: 599, 1: 401} or something equivalently close to the 60%-40% distribution predicted.

التجربة الخامسة: قياس مؤثرات مراقبة مختلفة

لحد الآن، اقتصرنا على إجراء القياسات على طول المحور z. في تجربة شتيرن-غيرلاخ، لو أردنا القياس على طول المحور x مثلاً، كنا نوجّه المجال المغناطيسي غير المتجانس بحيث يشير على طول المحور xx، ونرصد الانحرافات على طول xx على الشاشة. لكن أجهزة الحوسبة الكمومية من IBM مصمَّمة لإجراء القياسات على محور واحد فقط (zz). لقياس حالة ما على طول xx، يجب أن نجري "تغيير الأساس". هذا يعني أننا بحاجة إلى عملية تأخذ الحالات على طول xx في كرة بلوخ إلى zz، والعكس صحيح. هناك عدة طرق لتطبيق هذا، لكن الطريقة المفضّلة هي بوابة هادامار:

H=12(1111)H=\frac{1}{\sqrt{2}}\begin{pmatrix}1 & 1 \\ 1 & -1\end{pmatrix}

تحقق من فهمك

اقرأ الأسئلة أدناه، فكّر في إجابتك، ثم اضغط على المثلث لكشف الحل.

أثبت أن H0=+xH|0\rangle = |+\rangle_x وأن H+x=0H|+\rangle_x = |0\rangle

الإجابة:

H0=12(1111)(10)=12(11)=+xH|0\rangle = \frac{1}{\sqrt{2}}\begin{pmatrix}1 & 1 \\ 1 & -1\end{pmatrix}\begin{pmatrix}1 \\ 0\end{pmatrix} = \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ 1\end{pmatrix} = |+\rangle_xH+x=1(2)(1111)12(11)=12(20)=(10)=0H|+\rangle_x = \frac{1}{\sqrt(2)}\begin{pmatrix}1 & 1 \\ 1 & -1\end{pmatrix}\frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ 1\end{pmatrix} = \frac{1}{2}\begin{pmatrix}2 \\ 0\end{pmatrix} = \begin{pmatrix}1 \\ 0\end{pmatrix} = |0\rangle

أثبت أن H1=xH|1\rangle = |-\rangle_x وأن Hx=1H|-\rangle_x = |1\rangle

الإجابة:

H1=12(1111)(01)=12(11)=xH|1\rangle = \frac{1}{\sqrt{2}}\begin{pmatrix}1 & 1 \\ 1 & -1\end{pmatrix}\begin{pmatrix}0 \\ 1\end{pmatrix} = \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ -1\end{pmatrix} = |-\rangle_xHx=1(2)(1111)12(11)=12(02)=(01)=1H|-\rangle_x = \frac{1}{\sqrt(2)}\begin{pmatrix}1 & 1 \\ 1 & -1\end{pmatrix}\frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ -1\end{pmatrix} = \frac{1}{2}\begin{pmatrix}0 \\ 2\end{pmatrix} = \begin{pmatrix}0 \\ 1\end{pmatrix} = |1\rangle
# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(1, "c")
qc = QuantumCircuit(qr, cr)

# Add a hadamard gate to rotate into the x-basis
qc.h(0)
qc.measure(0, 0)

qc.draw("mpl")

Output of the previous code cell

هذه الدائرة تدوّر نظامنا بحيث تُخبرنا القياسات (على طول zz) عن خصائص xx قبل عملية الدوران. نحن نعرف مسبقاً أن الحاسوب الكمومي يُهيّئ الحالات إلى 0|0\rangle والتي تقابل |\uparrow\rangle. لنرَ ما يحدث حين نقيس إسقاط الدوران على طول xx لحالة مبدئية في |\uparrow\rangle. نعرض هذه الخطوة على محاكٍ لنشجّعك على استكشاف إحصاءات دوائر أخرى بتهيئات مختلفة.

from qiskit.primitives import StatevectorSampler as Sampler

sampler_sv = Sampler()

job = sampler_sv.run([qc], shots=10000)
print(job.result()[0].data.c.get_counts())
{'1': 4977, '0': 5023}

هذا يُظهر لنا أنه بالنسبة لكيوبت مبدئي في 0|0\rangle (أو ما يعادله، دوران في |\uparrow\rangle) فإن احتمال قياس إسقاط على طول +x+x أو x-x هو تقريباً 50-50. بطريقة ما، هذا منطقي تماماً. فلو كان شيء ما يشير على طول z، فلن يكون له تفضيل خاص لـ ±x\pm x. قد نتوقع نفس الشيء لو بدأنا بالحالة 1|1\rangle (أو |\downarrow\rangle). لنتحقق:

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(1, "c")
qc = QuantumCircuit(qr, cr)

# Add a NOT gate and hadamard gate. Measure.
qc.x(0)
qc.h(0)
qc.measure(0, 0)

qc.draw("mpl")

Output of the previous code cell

job = sampler_sv.run([qc], shots=10000)
print(job.result()[0].data.c.get_counts())
{'0': 4935, '1': 5065}

أجل! مجدداً، نجد احتمالاً 50-50 لقياس الإسقاطات على طول ±x\pm x. بالقياس مع القياسات على طول zz، قد نشكّ كذلك في أن جسيماً انهار إلى حالة محددة تماماً على طول +x+x قد يكون له احتمال صفر لقياسه لاحقاً على طول x-x. لنتحقق:

from qiskit import QuantumCircuit

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(2, "c")
qc = QuantumCircuit(qr, cr)

# Rotate into x-basis using a Hadamard gate, then make two measurements in succession
qc.h(0)
qc.measure(0, 0)
qc.barrier()
qc.measure(0, 1)

qc.draw("mpl")

Output of the previous code cell

job = sampler_sv.run([qc])
print(job.result()[0].data.c.get_counts())
plot_histogram(job.result()[0].data.c.get_counts())
{'00': 504, '11': 520}

Output of the previous code cell

كما هو متوقع، نحصل على نتائج يكون فيها الإسقاط على طول +x+x، ثم لاحقاً يكون مجدداً على طول +x+x، وكذلك نحصل على نتائج يكون فيها الإسقاط مبدئياً على طول x-x ثم يبقى على x-x مرة أخرى. لا نرى حالات يتحول فيها الإسقاط من +x+x إلى x-x أو العكس. يمكننا جمع ملاحظاتنا واستخدامها لتطوير مؤثرات إضافية في صيغ مصفوفية، وكذلك متجهات حالة إضافية.

نعرف:

  • الحالات ذات الإسقاطات المحددة على طول +z+z أو z-z لها احتمال 50% لأن يُعثر عليها بإسقاط على طول +x+x و50% لأن يكون إسقاطها على طول x-x.
  • الحالات ذات الإسقاط المحدد على طول +x+x لها احتمال صفر لأن تُقاس لاحقاً بإسقاط على طول x-x، والعكس صحيح.

يمكننا استخدام هذه النتائج لبناء حالات ذات إسقاط موجب محدد على طول xx (التي نسمّيها +x|+x\rangle)، وتلك ذات الإسقاط السالب المحدد على طول xx (التي نسمّيها x|-x\rangle). من تلك الحالات، يمكننا بناء المصفوفة المقابلة لـ SxS_x، تماماً كما فعلنا مع SzS_z. نترك هذه كتمارين للمتعلم. وبالمثل، يمكن للشخص بناء تجارب لإجراء قياسات على طول المحور yy، وتحديد متجهات +y|+y\rangle و y|-y\rangle، وأخيراً الحصول على تعبير لـ SyS_y.

بجمع كل هذه المتجهات والمصفوفات معاً، لدينا

+x=12(11)x=12(11)Sx=2(0110)+y=12(1i)y=12(1i)Sy=2(0ii0)+z=(10)z=(01)Sz=2(1001)\begin{aligned} |+x\rangle &= \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ 1\end{pmatrix} & \: & |-x\rangle &=& \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ -1\end{pmatrix} & \: &S_x &=& \frac{\hbar}{2} \begin{pmatrix} 0 & 1 \\ 1 & 0\end{pmatrix}\\ |+y\rangle &= \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ i\end{pmatrix} & \: & |-y\rangle &=& \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ -i\end{pmatrix} & \: &S_y &=& \frac{\hbar}{2} \begin{pmatrix} 0 & -i \\ i & 0\end{pmatrix}\\ |+z\rangle &= \begin{pmatrix}1 \\ 0\end{pmatrix} & \: &|-z\rangle &=& \begin{pmatrix}0 \\ 1\end{pmatrix} & \: &S_z &=& \frac{\hbar}{2} \begin{pmatrix} 1 & 0 \\ 0 & 1\end{pmatrix}\\ \end{aligned}

الأسئلة

يمكن للمدرّسين طلب نسخ من هذه الدفاتر مع مفاتيح الإجابات والإرشادات حول موضعها في المناهج الشائعة عبر ملء هذا الاستطلاع السريع حول طريقة استخدام الدفاتر.

المفاهيم الأساسية:

  • بالنسبة لجسيم دوران-½، لا يمكن لقياس إسقاط الدوران على محور ما إلا أن يُعطي أحد نتيجتين، يُسمّيان في الغالب "صاعد" و"نازل".
  • لا يمكن قياس الكيوبتات إلا في أحد حالتين، يُشار إليهما في الغالب بـ 0|0\rangle و 1|1\rangle.
  • يمكننا محاكاة تجربة شتيرن-غيرلاخ على جسيمات الدوران-½ باستخدام الكيوبتات في حاسوب كمومي.
  • القياسات المتكررة لنفس المؤثر الفيزيائي المراقَب لنفس الجسيم/الكيوبت ستُعطي دائماً نفس النتيجة (ما لم يتعرّض النظام لاضطراب من الضوضاء).
  • يمكننا استخدام نتائج تجربة شتيرن-غيرلاخ أو التجارب المماثلة مع الحواسيب الكمومية لاشتقاق منظومة من متجهات الحالة ومؤثرات المصفوفات التي تصف الدوران الميكانيكي الكمومي.

أسئلة صح/خطأ:

  1. ص/خ بدءاً من الملاحظات التجريبية، الاختيار الصالح الوحيد للمتجه الذي يمثّل |\uparrow\rangle هو (10)\begin{pmatrix}1 \\ 0\end{pmatrix}
  2. ص/خ إذا كان =(10)|\uparrow\rangle = \begin{pmatrix}1 \\ 0\end{pmatrix}، فإن الاختيار الوحيد لـ |\downarrow\rangle هو (01)\begin{pmatrix}0 \\ 1\end{pmatrix} (باستثناء الطور الكوني).
  3. ص/خ جسيم قِيس في الحالة 0|0\rangle سيستمر في أن يُوجد في الحالة 0|0\rangle عند القياسات اللاحقة على طول zz.
  4. ص/خ جسيم قِيس في الحالة 0|0\rangle سيستمر في أن يُوجد في الحالة 0|0\rangle عند القياسات اللاحقة على طول xx.
  5. ص/خ جسيم قِيس في الحالة 0|0\rangle سيُوجد دائماً في الحالة +x|+\rangle_x عند القياسات اللاحقة على طول xx.

أسئلة اختيار من متعدد:

  1. جسيم مبدئياً في |\uparrow\rangle ما احتمال قياسه في الحالة +x|+x\rangle؟

    • أ. 0%
    • ب. 25%
    • ج. 50%
    • د. 71%
    • هـ. 100%
  2. جسيم مبدئياً في |\uparrow\rangle ما احتمال قياسه في الحالة |\downarrow\rangle؟

    • أ. 0%
    • ب. 25%
    • ج. 50%
    • د. 71%
    • هـ. 100%
  3. الحالة |\uparrow\rangle لجسيم دوران-½ يرتبط بشكل أكثر شيوعاً بأي حالة في الحوسبة الكمومية؟

    • أ. +|+\rangle
    • ب. |-\rangle
    • ج. 0|0\rangle
    • د. 1|1\rangle
    • هـ. لا شيء مما سبق

أسئلة للنقاش:

  1. ثلاثة أصدقاء يتناقشون حول القياسات والمؤثرات الكمومية. يقول الصديق أ: "إجراء قياس على طول zz والتصرف بمؤثر σz\sigma_z هما نفس الشيء." يقول الصديق ب: "حسناً، هما إجراءان مختلفان، لكن نتيجتهما واحدة." يقول الصديق ج: "هما مختلفان تماماً؛ حتى تأثيرهما يختلف على معظم الحالات." مع من تتفق ولماذا؟

مسائل الإجابة الحرة:

  1. بالنظر إلى الملاحظات التجريبية والصياغة المقترحة:

P+x=(10)(ab)2=a2=12P_{\uparrow+x}=\vert \begin{pmatrix}1 & 0\end{pmatrix}\begin{pmatrix}a \\ b\end{pmatrix}\vert^2 = |a|^2 =\frac{1}{2} P+x=(01)(ab)2=b2=12P_{\downarrow+x}=\vert \begin{pmatrix}0 & 1\end{pmatrix}\begin{pmatrix}a \\ b\end{pmatrix}\vert^2 = |b|^2 =\frac{1}{2}

أثبت أنه باستثناء الطور الكوني

+x=12(1eiα)|+\rangle_x = \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ e^{i\alpha}\end{pmatrix}

اختر α=0\alpha = 0 للحصول على النتيجة القياسية.

  1. بالنظر إلى الملاحظات التجريبية والصياغة المقترحة:

Px=(10)(ab)2=a2=12P_{\uparrow-x}=\vert \begin{pmatrix}1 & 0\end{pmatrix}\begin{pmatrix}a \\ b\end{pmatrix}\vert^2 = |a|^2 =\frac{1}{2} Px=(01)(ab)2=b2=12P_{\downarrow-x}=\vert \begin{pmatrix}0 & 1\end{pmatrix}\begin{pmatrix}a \\ b\end{pmatrix}\vert^2 = |b|^2 =\frac{1}{2}

وباستخدام النتيجة من مسألة التحدي 3:

P+xx=12(11)(cd)2=12c+d2=0P_{+x-x}=\vert \frac{1}{\sqrt{2}}\begin{pmatrix}1 & 1\end{pmatrix}\begin{pmatrix}c \\ d\end{pmatrix}\vert^2 = \frac{1}{2}|c+d|^2 =0

أثبت أنه باستثناء الطور الكوني

+x=12(11)|+\rangle_x = \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ -1\end{pmatrix}

الشكر والتقدير