ציון אובזרבבלים בבסיס פאולי
גרסאות חבילות
הקוד בדף זה פותח תוך שימוש בדרישות הבאות. אנו ממליצים להשתמש בגרסאות אלו או בגרסאות חדשות יותר.
qiskit[all]~=2.3.0
במכניקת הקוונטים, אובזרבבלים מתאימים לתכונות פיזיקליות שניתן למדוד. כשבוחנים מערכת של ספינים, למשל, אפשר להתעניין במדידת האנרגיה של המערכת או בקבלת מידע על יישור הספינים, כמו המגנטיזציה או הקורלציות בין ספינים.
כדי למדוד אובזרבבל -Qubit על מחשב קוונטי, יש לייצג אותו כסכום של מכפלות טנסוריות של אופרטורי פאולי, כלומר
כאשר
ומשתמשים בעובדה שאובזרבבל הוא הרמיטי, כלומר . אם אינו הרמיטי, עדיין ניתן לפרק אותו כסכום של פאולים, אך המקדם הופך מרוכב.
במקרים רבים, האובזרבבל מוגדר באופן טבעי בייצוג זה לאחר מיפוי המערכת המעניינת ל-Qubits. לדוגמה, מערכת ספין-1/2 ניתנת למיפוי להמילטוניאן איזינג
כאשר האינדקסים רצים על ספינים מקיימי אינטראקציה, והספינים כפופים לשדה רוחבי ב-. אינדקס המשנה מציין על איזה Qubit פועל אופרטור פאולי, כלומר מפעיל אופרטור על Qubit ומשאיר את השאר ללא שינוי.
ב-Qiskit SDK, ניתן לבנות את ההמילטוניאן הזה עם הקוד הבא.
# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit
from qiskit.quantum_info import SparsePauliOp
# define the number of qubits
n = 12
# define the single Pauli terms as ("Paulis", [indices], coefficient)
interactions = [
("ZZ", [i, i + 1], 1) for i in range(n - 1)
] # we assume spins on a 1D line
field = [("X", [i], -1) for i in range(n)]
# build the operator
hamiltonian = SparsePauliOp.from_sparse_list(
interactions + field, num_qubits=n
)
print(hamiltonian)
SparsePauliOp(['IIIIIIIIIIZZ', 'IIIIIIIIIZZI', 'IIIIIIIIZZII', 'IIIIIIIZZIII', 'IIIIIIZZIIII', 'IIIIIZZIIIII', 'IIIIZZIIIIII', 'IIIZZIIIIIII', 'IIZZIIIIIIII', 'IZZIIIIIIIII', 'ZZIIIIIIIIII', 'IIIIIIIIIIIX', 'IIIIIIIIIIXI', 'IIIIIIIIIXII', 'IIIIIIIIXIII', 'IIIIIIIXIIII', 'IIIIIIXIIIII', 'IIIIIXIIIIII', 'IIIIXIIIIIII', 'IIIXIIIIIIII', 'IIXIIIIIIIII', 'IXIIIIIIIIII', 'XIIIIIIIIIII'],
coeffs=[ 1.+0.j, 1.+0.j, 1.+0.j, 1.+0.j, 1.+0.j, 1.+0.j, 1.+0.j, 1.+0.j,
1.+0.j, 1.+0.j, 1.+0.j, -1.+0.j, -1.+0.j, -1.+0.j, -1.+0.j, -1.+0.j,
-1.+0.j, -1.+0.j, -1.+0.j, -1.+0.j, -1.+0.j, -1.+0.j, -1.+0.j])
אם נרצה למדוד את האנרגיה, האובזרבבל הוא ההמילטוניאן עצמו. לחלופין, אפשר להתעניין במדידת תכונות המערכת כמו המגנטיזציה הממוצעת על ידי ספירת מספר הספינים המיושרים בכיוון עם האובזרבבל
עבור אובזרבבלים שאינם נתונים במונחי אופרטורי פאולי אלא בצורת מטריצה, יש קודם לנסח אותם מחדש בבסיס פאולי כדי לחשב אותם על מחשב קוונטי. תמיד ניתן למצוא ייצוג כזה שכן מטריצות פאולי מהוות בסיס למטריצות ההרמיטיות . מפרקים את האובזרבבל כ-
כאשר הסכום רץ על כל איברי פאולי -Qubit האפשריים ו- הוא העקבה של מטריצה, הפועלת כמכפלה פנימית.
ניתן לממש פירוק זה ממטריצה לאיברי פאולי באמצעות מתודת SparsePauliOp.from_operator, כך:
import numpy as np
from qiskit.quantum_info import SparsePauliOp
matrix = np.array(
[[-1, 0, 0.5, -1], [0, 1, 1, 0.5], [0.5, 1, -1, 0], [-1, 0.5, 0, 1]]
)
observable = SparsePauliOp.from_operator(matrix)
print(observable)
SparsePauliOp(['IZ', 'XI', 'YY'],
coeffs=[-1. +0.j, 0.5+0.j, 1. -0.j])
משמעות הדבר היא שניתן לכתוב את המטריצה כאיברי פאולי: .