رسم الحالات الكمومية
إصدارات الحزم
تم تطوير الشيفرة الموجودة في هذه الصفحة باستخدام المتطلبات التالية. نوصي باستخدام هذه الإصدارات أو أحدث.
qiskit[all]~=2.5.2
في كثير من الحالات – مثل التعلم أو تصحيح الأخطاء – يكون من المفيد تصور حالة الحاسوب الكمومي. هنا نفترض أن لديك بالفعل حالة معينة من المحاكاة أو من التصوير المقطعي للحالة (state tomography). لا يمكن عرض إلا حالات الأنظمة الكمومية الصغيرة.
جميع الدوال في هذه الصفحة تُعيد كائنات غنية. عندما يُخرج السطر الأخير من خلية الكود هذه الكائنات، تعرضها دفاتر Jupyter أسفل الخلية. إذا استدعيت هذه الدوال في بيئات أخرى أو في سكريبتات، ستحتاج إلى عرض المخرجات أو حفظها بشكل صريح.
معظم الدوال تُعيد صورًا هي كائنات matplotlib.Figure. خياران متاحان:
- استدعاء
.show()على الكائن المُعاد لفتح الصورة في نافذة جديدة (بافتراض أن الـ backend الخاص بـ matplotlib مُهيَّأ بوضع تفاعلي). - استدعاء
.savefig("out.png")لحفظ الشكل فيout.pngفي مجلد العمل الحالي. تقبل الدالةsavefig()مسارًا لتتمكن من تحديد موقع واسم ملف المخرج. مثلًا:plot_state_city(psi).savefig("out.png").
مخرجات LaTeX هي كائنات IPython.display.Latex. الخيار الأفضل في بيئات غير Jupyter هو تجنب هذا المخرج إما بطباعة الحالة للحصول على تمثيل نصي، أو التبديل إلى drawer الخاص بـ latex_source للحصول على سلسلة نصية بصيغة LaTeX.
الحالة الكمومية إما مصفوفة كثافة (مصفوفة هرميتية) أو متجه حالة (متجه مركب). ترتبط مصفوفة الكثافة بمتجه الحالة بالعلاقة:
وهي أكثر عمومية إذ تستطيع تمثيل الحالات المختلطة (مجموع موجب من متجهات الحالة):
يُمثل Qiskit الحالات الكمومية عبر كلاسَي Statevector وDensityMatrix، ويوفر دوال تصوير متعددة. اطلع على الأقسام التالية بعد خلية الكود لترى كيف ترسم دوال التصوير المختلفة في Qiskit الحالة الكمومية التالية.
# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util
_needed = {"qiskit": "qiskit"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
from math import pi
from qiskit import QuantumCircuit
from qiskit.quantum_info import Statevector
# Create a Bell state for demonstration
qc = QuantumCircuit(2)
qc.h(0)
qc.crx(pi / 2, 0, 1)
psi = Statevector(qc)
- LaTeX
- City
- Hinton
- Pauli vector
- Qsphere
- Bloch
رغم أنه ليس "رسمًا بيانيًا" بالمعنى الدقيق، يستطيع Qiskit عرض تمثيلات LaTeX لكلٍّ من كائنات Statevector وDensityMatrix بشكل أنيق في دفاتر Jupyter. تتبع هذه التمثيلات الاصطلاحات الرياضية المعيارية لكتابة الحالات الكمومية. اقرأ المزيد في أساسيات المعلومات الكمومية: الأنظمة الفردية.
متجهات الحالة تعرض افتراضيًا "تدوين ket"، بينما تُعرض مصفوفات الكثافة على شكل مصفوفة 2×2.
يمكنك أيضًا استبدال "latex" بـ "latex_source" للحصول على سلسلة LaTeX الخام.
يعرض هذا الرسم الأجزاء الحقيقية والتخيلية لكل عنصر في مصفوفة الكثافة على شكل مخططَين شريطيَّين ثلاثيَّي الأبعاد. يُسمى "city" لأن الأعمدة تشبه ناطحات سحاب في مدينة. الحالة التي نرسمها لها مصفوفة الكثافة التالية.
اطلع على توثيق API لمزيد من المعلومات.
هذا الرسم مشابه جدًا لرسم "city"، لكن حجم كل عنصر يُمثَّل بحجم مربع بدلًا من ارتفاع عمود. المربعات البيضاء تمثل عناصر ذات قيم موجبة، والمربعات السوداء تمثل عناصر ذات قيم سالبة. الحالة التي نرسمها لها مصفوفة الكثافة التالية.
اطلع على توثيق API لمزيد من المعلومات.
المشاهَدة (Observable) هي طريقة لقياس حالة كمومية بحيث تكون نتائج القياس المحتملة أعدادًا حقيقية. القيمة المتوقعة للناتج تُعرف أيضًا بـ"قيمة التوقع" للمشاهَدة على تلك الحالة، ويمكن التفكير فيها على أنها المتوسط لعدد لا نهائي من ملاحظات تلك الحالة.
حاصل الضرب التنسوري لمصفوفات باولي جميعها مشاهَدات تُعيد القيمة +1 أو -1. يعرض هذا الرسم قيم التوقع للحالة على مؤثرات باولي المختلفة على شكل مخطط شريطي. يمكن كتابة جميع مصفوفات الكثافة كمجموع لمصفوفات باولي هذه، مُرجَّحةً بقيم توقعها.
على سبيل المثال، يمكن كتابة هذه الحالة كمجموع حدود:
يمكنك أيضًا حساب هذه المعاملات باستخدام SparsePauliOp.
اطلع على توثيق API لمزيد من المعلومات.
"QSphere" هو عرض للحالة الكمومية خاص بـ Qiskit وحده، يُرسم فيه سعة وطور كل عنصر في متجه الحالة على سطح كرة. يمثل سمك كل نقطة السعة، ويمثل اللون الطور. أما في الحالات المختلطة، فتُعرض كرة لكل مكوِّن.
اطلع على توثيق API لمزيد من المعلومات.
متجه بلوخ لحالة كيوبت هو قيمة توقعه في مشاهَدات باولي X وY وZ، مُعيَّنة على المحاور X وY وZ في الفضاء ثلاثي الأبعاد. يُسقط هذا الرسم الحالات الكمومية متعددة الكيوبتات على فضاء الكيوبت الفردي، ويرسم كل كيوبت على كرة بلوخ. يعرض هذا التصور قيم التوقع للكيوبتات الفردية فقط، ولا يمكنه إظهار الارتباطات بين الكيوبتات، لذا لا يستطيع وصف الحالات الكمومية المتشابكة بشكل كامل.
اطلع على توثيق API لمزيد من المعلومات.
psi.draw("latex") # psi is a Statevector object
from qiskit.quantum_info import DensityMatrix
DensityMatrix(psi).draw("latex") # convert to a DensityMatrix and draw
from qiskit.visualization import plot_state_city
plot_state_city(psi)
# Alternative: psi.draw("city")
from qiskit.visualization import plot_state_hinton
plot_state_hinton(psi)
# Alternative: psi.draw("hinton")
from qiskit.visualization import plot_state_paulivec
plot_state_paulivec(psi)
# Alternative: psi.draw("paulivec")
from qiskit.quantum_info import SparsePauliOp
SparsePauliOp.from_operator(psi)
SparsePauliOp(['II', 'IX', 'XY', 'YI', 'YX', 'YZ', 'ZI', 'ZX', 'ZZ'],
coeffs=[ 0.25 +0.j, 0.1767767+0.j, -0.1767767+0.j, -0.125 +0.j,
-0.1767767+0.j, 0.125 +0.j, 0.125 +0.j, 0.1767767+0.j,
0.125 +0.j])
from qiskit.visualization import plot_state_qsphere
plot_state_qsphere(psi)
# Alternative: psi.draw("qsphere")
from qiskit.visualization import plot_bloch_multivector
plot_bloch_multivector(psi)
# Alternative: psi.draw("bloch")
خيارات دوال رسم الحالات
جميع دوال رسم الحالات تقبل المعاملات التالية (باستثناء drawer الخاص بـ LaTeX الذي لا يُعيد شكل Matplotlib، وplot_state_qsphere التي تقبل figsize فقط):
- title (str): سلسلة نصية لعنوان الرسم، تظهر في أعلاه
- figsize (tuple): حجم الشكل بالبوصة (العرض، الارتفاع)
تقبل الدالتان plot_state_city وplot_state_paulivec أيضًا معامل color (قائمة من السلاسل النصية) لتحديد ألوان الأعمدة. اطلع على توثيق API لمزيد من المعلومات.
الخطوات التالية
- هل تحتاج إلى مراجعة معلوماتك في المعلومات الكمومية؟ اطلع على دورة أساسيات المعلومات الكمومية على IBM Quantum Learning.
- اقرأ إرشادات المساهمة إذا أردت المساهمة في مشروع Qiskit SDK مفتوح المصدر.