ข้ามไปยังเนื้อหาหลัก

การทดลอง Stern-Gerlach บนคอมพิวเตอร์ควอนตัม

สำหรับโมดูล Qiskit in Classrooms นี้ นักเรียนต้องมีสภาพแวดล้อม Python ที่ใช้งานได้พร้อมติดตั้งแพ็คเกจต่อไปนี้:

  • qiskit v2.1.0 หรือใหม่กว่า
  • qiskit-ibm-runtime v0.40.1 หรือใหม่กว่า
  • qiskit-aer v0.17.0 หรือใหม่กว่า
  • qiskit.visualization
  • numpy
  • pylatexenc

เพื่อตั้งค่าและติดตั้งแพ็คเกจข้างต้น ดูคู่มือ ติดตั้ง Qiskit เพื่อรัน job บนคอมพิวเตอร์ควอนตัมจริง นักเรียนจะต้องสร้างบัญชีกับ IBM Quantum® โดยทำตามขั้นตอนในคู่มือ ตั้งค่าบัญชี IBM Cloud ของคุณ

โมดูลนี้ถูกทดสอบและใช้เวลา QPU 2 วินาที นี่เป็นการประมาณเท่านั้น การใช้งานจริงของคุณอาจแตกต่างกัน

# 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'

ดูการนำเสนอโมดูลโดย Dr. Katie McCormick ด้านล่าง หรือคลิก ที่นี่ เพื่อดูบน YouTube


พื้นหลัง

ในช่วงต้นทศวรรษที่ 1900 หลักฐานของพฤติกรรมเชิงควอนตัมในระดับอะตอมสะสมมากขึ้นเรื่อยๆ การตีความข้อมูลที่ประสบความสำเร็จมากมาย เช่น คำอธิบายของ Max Planck เกี่ยวกับ ultraviolet catastrophe และการทดลองของ Otto Stern และ Walther Gerlach มีบทบาทสำคัญในการโน้มน้าวให้โลกยอมรับว่าระบบกลศาสตร์ควอนตัมเป็นสิ่งจำเป็น และปรากฏการณ์ทางกายภาพบางอย่างมีลักษณะเชิงควอนตัม ในกรณีของการทดลอง Stern-Gerlach (คิดขึ้นโดย Stern ในปี 1921 และดำเนินการโดย Stern และ Gerlach ในปี 1922) เป้าหมายคือการตรวจสอบการควอนตัมของโมเมนตัมเชิงมุมในอะตอม

ในช่วงเวลาเดียวกัน แบบจำลองอะตอมที่แพร่หลายในขณะนั้นคือแบบจำลอง Bohr-Sommerfeld ซึ่งเป็นการขยายจากแบบจำลอง Bohr และเช่นเดียวกับแบบจำลอง Bohr มันทำนายว่าอิเล็กตรอนอยู่ในวงโคจรควอนตัมบางวงที่คล้ายกับดาวเคราะห์โคจรรอบดวงอาทิตย์

ภาพแผนผังของแบบจำลอง Bohr-Sommerfeld จุดศูนย์กลางแทนนิวเคลียสของอะตอม วงกลมหรือวงรีรอบจุดนั้นแทนออร์บิทัลของอะตอม ดูคล้ายกับวงโคจรของดาวเคราะห์รอบดวงอาทิตย์มาก วงโคจรที่มีพลังงานสูงกว่าอยู่ห่างจากนิวเคลียสมากกว่า

แม้ว่าในท้ายที่สุดการอธิบายนี้จะไม่เพียงพอที่จะอธิบายพฤติกรรมเชิงกลศาสตร์ควอนตัมของอะตอม แต่โดยรวมแล้วมันทำนายปรากฏการณ์ที่สังเกตได้หลายอย่าง เช่น เส้นสเปกตรัมแยกของอะตอม วงโคจรควอนตัมของอิเล็กตรอนที่มีพลังงานเฉพาะสอดคล้องกับค่าโมเมนตัมเชิงมุมที่เป็นควอนตัม นี่คือโมเมนตัมเชิงมุมของวงโคจรที่ Stern และ Gerlach ต้องการสังเกตในการทดลองของพวกเขา แม้ว่าการทดลองนี้ใช้ได้กับโมเมนตัมเชิงมุมประเภทใดก็ตาม รวมถึงสปิน คุณมักได้ยินเกี่ยวกับการทดลอง Stern-Gerlach ที่นำไปใช้กับสปิน จุดเน้นของการทดลองดั้งเดิมคือโมเมนตัมเชิงมุมของวงโคจรเพียงเพราะ George Uhlenbeck และ Samuel Goudsmit จะยังไม่ตั้งทฤษฎีเกี่ยวกับการมีอยู่ของสปินจนถึงปี 1925

ไม่ว่าจะเป็นโมเมนตัมเชิงมุมประเภทใด ประจุที่มีโมเมนตัมเชิงมุมจะมีโมเมนต์แม่เหล็ก ในการอธิบายแบบคลาสสิกของการเคลื่อนที่แบบวงโคจร เราคาดว่าอนุภาคที่มีประจุ qq มวล mm และโมเมนตัมเชิงมุม L\vec{L} จะมีโมเมนต์แม่เหล็ก μ\mu ดังนี้

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

ปรากฏว่าสูตรเกือบเดียวกันนี้ใช้ได้กับโมเมนตัมเชิงมุมในกลศาสตร์ควอนตัม โดยมีเงื่อนไขเพิ่มอัตราส่วนตัวเลขที่เกี่ยวข้องกับประเภทของโมเมนตัมเชิงมุม เรียกว่า g-factor 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

Stern และ Gerlach ไม่ทราบเกี่ยวกับ gg factor แต่แม้จะมีมันในสมการ เราก็มีแรงที่เท่ากับค่าคงที่ที่รู้จักหรือวัดได้หลายตัวคูณกับโมเมนตัมเชิงมุม ดังนั้นโดยใช้สนามแม่เหล็กที่มีความชันที่รู้จัก และวัดการเบี่ยงเบนของอนุภาคขณะผ่านสนาม เราควรได้ข้อมูลเกี่ยวกับโมเมนตัมเชิงมุม นี่คือแก่นของการทดลอง Stern-Gerlach

อะตอมของซิลเวอร์เดินทางผ่านสนามแม่เหล็กที่ไม่สม่ำเสมอ และถูกเบี่ยงเบนขึ้นหรือลงขึ้นอยู่กับสปินของมัน แบบคลาสสิกเราคาดว่าจะเห็นการกระจายต่อเนื่องบนหน้าจอ แต่ในการทดลองเราเห็นสองจุดที่แตกต่างกัน

ภาพ การทดลอง Stern-Gerlach[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.

แล้วพลังงานนั้นไปไหน? แม่เหล็กคลาสสิกอย่างแม่เหล็กติดตู้เย็นนีโอดิเมียมขนาดเล็กมีอนุภาคจำนวนมากและสามารถกระจายพลังงานจำนวนเกือบใดก็ได้ออกเป็นความร้อน มุมเริ่มต้นและสุดท้ายระหว่างโมเมนต์แม่เหล็กและสนามแม่เหล็กภายนอกอาจเป็นอะไรก็ได้ และอย่างน้อยการวางแนวเริ่มต้นก็จะสุ่ม ดังนั้นพลังงานที่แตกต่างกันจะถูกกระจายออกเป็นความร้อนสำหรับแม่เหล็กขนาดเล็กแต่ละชิ้น แต่ในเชิงคลาสสิกนี่ไม่ใช่ปัญหา เนื่องจากกลุ่มของอนุภาคคลาสสิกสามารถกระจายพลังงานจำนวนใดก็ได้ออกเป็นความร้อน

เราควรคาดหวังอะไรเมื่อนำการคิดแบบคลาสสิกไปใช้กับระดับอะตอม?

อย่างน้อยก็ไม่เหมือนกันสำหรับแม่เหล็กระดับอะตอม เพราะมีอนุภาคน้อยกว่า มีระดับความเสรีน้อยกว่าที่พลังงานจะถ่ายเทออกไปได้ ข้อเสนอของกลศาสตร์ควอนตัมยุคแรกแนะนำเพิ่มเติมว่าพลังงานที่สามารถดูดซับโดยอนุภาคแต่ละตัว เช่น อิเล็กตรอน จะเป็นควอนตัม หมายความว่าอิเล็กตรอนสามารถดูดซับพลังงานได้เฉพาะบางปริมาณที่แน่นอนเท่านั้น เนื่องจากการวางแนวสุ่มเริ่มต้นจะต้องการการกระจายพลังงานในปริมาณสุ่ม สิ่งนี้ไม่ควรเป็นไปได้สำหรับระบบที่มีระดับพลังงานเป็นควอนตัม พลังงานส่วนเกินไม่สามารถกระจายออกเป็นความร้อนได้ แล้วจะเกิดอะไรขึ้นแทน?

ตรวจสอบความเข้าใจของคุณ

อ่านคำถามด้านล่าง คิดคำตอบของคุณ จากนั้นคลิกสามเหลี่ยมเพื่อดูคำตอบ

อธิบายสิ่งที่คุณคิดว่าจะเกิดขึ้นในสถานการณ์ที่อธิบายข้างต้น นั่นคือ คุณมีแม่เหล็กขนาดอะตอมที่ไม่สามารถกระจายพลังงานออกเป็นความร้อนได้ ดังนั้นพลังงานศักย์แม่เหล็กเริ่มต้นใดๆ จะต้องอยู่ในระบบ แต่แรงบิดถูกใช้โดยสนามแม่เหล็กภายนอก ซึ่งพยายามหมุนแม่เหล็กขนาดเล็กให้สอดคล้องกับสนามภายนอก จะเกิดอะไรขึ้น?

คำตอบ:

โมเมนต์แม่เหล็กขนาดเล็กจะหมุนไปสู่การสอดคล้องกับสนามภายนอก แต่เมื่อมันสอดคล้องกันชั่วคราว มันจะมีพลังงานจลน์การหมุนที่จะทำให้มันหมุนต่อผ่านสนามและกลับออกจากการสอดคล้อง พฤติกรรมนี้สามารถเห็นได้แม้ในแม่เหล็กคลาสสิกขนาดใหญ่ แต่ในระบบคลาสสิกเหล่านั้น การแกว่งของโมเมนต์แม่เหล็กขนาดเล็กจะหยุดในที่สุดเมื่อพลังงานถูกกระจายออกเป็นความร้อน แต่ในระบบที่ไม่มีกลไกการกระจายดังกล่าว การแกว่งควรดำเนินต่อไปอย่างไม่มีกำหนด

จากพฤติกรรมที่คาดหวังในคำตอบข้างต้น คุณคาดว่าจะเห็นการกระจายของอนุภาคแม่เหล็กแบบใดบนหน้าจอ?

คำตอบ:

การกระจายที่ราบรื่นตั้งแต่การเบี่ยงเบนสูงสุดไปทางด้านที่แข็งแกร่งกว่าของสนามแม่เหล็ก (อนุภาคเหล่านั้นที่เริ่มต้นในแนวเดียวกับสนามภายนอก) ไปจนถึงการเบี่ยงเบนสูงสุดไปทางด้านที่อ่อนแอกว่าของสนาม (อนุภาคที่เริ่มต้นในแนวตรงข้ามกับสนามภายนอก) และทุกการเบี่ยงเบนระหว่างนั้น สอดคล้องกับทุกการวางแนวเริ่มต้นระหว่างขีดสุดเหล่านั้น

ภาพแผนผังของลำอนุภาคที่ผ่านแม่เหล็ก พวกมันถูกเบี่ยงเบนในระดับต่างๆ ตามทิศทางของสนามแม่เหล็ก ดังนั้นเมื่อกระทบหน้าจอที่อยู่ไกลออกไปจะก่อตัวเป็นเส้น

กลศาสตร์ควอนตัมจะทำนายอะไร?

บางทีความเป็นไปได้ที่แปลกที่สุดคือ: ถ้าโมเมนตัมเชิงมุมของอิเล็กตรอนเป็นควอนตัม แต่การฉายภาพของมันบนแกนใดๆ ก็เป็นควอนตัมด้วย? การควอนตัมของโมเมนตัมเชิงมุมในฐานะขนาดนั้นน่าสนใจ แต่อาจพยายามโต้แย้งผ่านมันโดยใช้สัญชาตญาณคลาสสิก ในแบบที่วงโคจรของดาวเคราะห์ตั้งอยู่ในเส้นทางที่คงที่ที่ไม่ตัดกัน มีเฉพาะโมเมนตัมเชิงมุมบางค่าที่อนุญาต แต่ถ้าเวกเตอร์โมเมนตัมเชิงมุมนั้นสามารถชี้ตรงตาม zz หรือตรงข้าม zz เท่านั้น แต่ไม่มีองค์ประกอบอื่นตาม zz? ถ้าเมื่อวัดในทิศทางอื่น เวกเตอร์สามารถชี้ตาม xx ทั้งหมดหรือตรงข้าม xx ทั้งหมด และไม่มีกลาง? นั่นจะแปลกในแบบที่ขัดกับสัญชาตญาณคลาสสิกทั้งหมด

ตรวจสอบความเข้าใจของคุณ

อ่านคำถามด้านล่าง คิดคำตอบของคุณ จากนั้นคลิกสามเหลี่ยมเพื่อดูคำตอบ

คุณคาดว่าจะเห็นการกระจายของอนุภาคบนหน้าจอแบบใดในกรณีสุดท้ายนี้ ที่การฉายภาพของโมเมนตัมเชิงมุมตามทิศทางของสนามเป็นควอนตัม รู้สึกอิสระที่จะพิจารณาเฉพาะอนุภาคที่ผ่านตรงกลางของอุปกรณ์ หรือรวมอนุภาคที่เบี่ยงเบนเล็กน้อยออกไปด้านข้างที่ความชันอ่อนแอกว่า แค่ระบุให้ชัดเจน

คำตอบ:

อนุภาคที่อยู่ตรงกลางของอุปกรณ์จะสัมผัสกับสนามที่ไม่สม่ำเสมอเพียงสนามเดียวและทั้งหมดจะถูกวัดให้มีหนึ่งในสองการวางแนวของโมเมนต์แม่เหล็ก ดังนั้น พวกมันจะถูกเบี่ยงเบนสูงสุดตามความชันหรือสูงสุดขัดต่อความชัน และไม่มีอะไรระหว่างนั้น แน่นอน ด้านข้างทั้งสอง ที่ความชันอ่อนกว่า การเบี่ยงเบนจะน้อยกว่า ที่ตำแหน่งด้านข้างที่ใหญ่มาก อาจอยู่นอกความชันทั้งหมด และอาจมีเพียงพื้นที่เดียวของอนุภาคที่ไม่ถูกเบี่ยงเบน

ภาพแผนผังของลำอนุภาคที่ถูกเบี่ยงเบนขึ้นหรือลง กระทบหนึ่งในสองจุดบนหน้าจอ โดยไม่มีอนุภาคระหว่างค่าสูงสุดทั้งสอง

Qubit จะช่วยให้เราทดสอบสิ่งนี้ได้อย่างไร?

คอมพิวเตอร์ควอนตัมส่วนใหญ่ใช้ "Qubit" — อนาล็อกควอนตัมของบิตคลาสสิก โดยเฉพาะอย่างยิ่ง พวกมันถูกออกแบบให้เป็นระบบสองระดับ คล้ายกับสถานะ "เปิด"/"ปิด" ของบิตคลาสสิก กระบวนทัศน์การคำนวณควอนตัมที่ใช้ระบบสามระดับ (เรียกว่า "qutrits") หรือระบบหลายระดับ (เรียกว่า "qudits") มีอยู่จริง แต่งานส่วนใหญ่มุ่งเน้นที่ Qubit โดยเฉพาะอย่างยิ่ง คอมพิวเตอร์ควอนตัม IBM® ใช้สิ่งที่เรียกว่า fixed-frequency transmon qubits สิ่งเหล่านี้แตกต่างอย่างมากจากโมเมนตัมเชิงมุมของวงโคจรหรือสปินของอะตอม แต่เช่นเดียวกับสปินของอิเล็กตรอน Qubit ของ IBM® เป็นระบบกลศาสตร์ควอนตัมที่สามารถโต้ตอบกับแสงและสามารถทำการวัดได้ อันที่จริง มักพบการเปรียบเทียบระหว่างสถานะของสปินกลศาสตร์ควอนตัมและสถานะเชิงคำนวณของ Qubit ตัวอย่างเช่น มักเห็นสถานะ "spin-up" เชื่อมโยงกับสถานะเชิงคำนวณ 0 และ "spin-down" เชื่อมโยงกับสถานะเชิงคำนวณ 1:

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

เราสามารถใช้ความคล้ายคลึงเหล่านี้เพื่อสังเกตพฤติกรรมกลศาสตร์ควอนตัมในคอมพิวเตอร์ควอนตัม IBM ที่เลียนแบบพฤติกรรมกลศาสตร์ควอนตัมของโมเมนตัมเชิงมุมของวงโคจรหรือสปินในอะตอม เราจะทำการสังเกตที่คล้ายกันโดยใช้การรวมเชิงเส้นของสถานะเหล่านี้ที่ช่วยให้เราขยายการอภิปรายไปยังโมเมนตัมเชิงมุมในทิศทางใดก็ตาม

การทดลองที่หนึ่ง: การวัดครั้งเดียว

ในการทดลองแรกนี้และตลอดทั้งโมดูล เราจะใช้กรอบสำหรับการคำนวณควอนตัมที่รู้จักกันในชื่อ "Qiskit patterns" ซึ่งแบ่งเวิร์กโฟลว์ออกเป็นขั้นตอนดังต่อไปนี้:

  • ขั้นตอนที่ 1: แมป input แบบคลาสสิกไปยังปัญหาควอนตัม
  • ขั้นตอนที่ 2: ปรับปัญหาให้เหมาะสมสำหรับการรันบนควอนตัม
  • ขั้นตอนที่ 3: รันโดยใช้ Qiskit Runtime Primitives
  • ขั้นตอนที่ 4: การประมวลผลภายหลังและการวิเคราะห์แบบคลาสสิก

เราจะทำตามขั้นตอนเหล่านี้โดยทั่วไป แม้ว่าเราอาจไม่ได้ระบุชื่ออย่างชัดเจนเสมอไป

ขั้นตอนที่ 1: แมป input แบบคลาสสิกไปยังปัญหาควอนตัม

ที่นี่ input แบบคลาสสิกคือการวางแนวของสปินก่อนการวัดในอุปกรณ์ Stern-Gerlach ไม่ต้องกังวลมากเกินไปเกี่ยวกับลักษณะที่แท้จริงของสถานะควอนตัมก่อนการวัด นั่นเป็นหัวข้อของโมดูล Qiskit Classrooms อื่น เกี่ยวกับทฤษฎีบทของ Bell

โปรดทราบว่าคอมพิวเตอร์ควอนตัม IBM วัดสถานะตามแกน zz ดังนั้นการทดลองแรกนี้จะคล้ายกับการทดลอง Stern-Gerlach ที่มีความชันของสนามแม่เหล็กตาม 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

ตอนนี้เราจะใช้มุมข้างต้นเป็นพารามิเตอร์ใน Circuit ควอนตัม เราพิจารณาอนุภาคเพียงหนึ่งตัวในแต่ละครั้ง ดังนั้นเราจะใช้เพียง Qubit เดียวใน Circuit ของเรา และเราต้องการเพียง classical register เดียว

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 และเลือกคอมพิวเตอร์ควอนตัม (หรือ "Backend") ด้านล่าง เราเพียงแค่เลือกคอมพิวเตอร์ควอนตัมที่ไม่ยุ่งที่สุดที่มีอยู่

มีโค้ดด้านล่างสำหรับบันทึก credentials ของคุณในการใช้งานครั้งแรก อย่าลืมลบข้อมูลนี้ออกจาก notebook หลังจากบันทึกลงในสภาพแวดล้อมของคุณ เพื่อไม่ให้ credentials ของคุณถูกแบ่งปันโดยไม่ตั้งใจเมื่อคุณแบ่งปัน notebook ดู ตั้งค่าบัญชี 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 Circuit ซึ่งหมายความว่าเราต้องแมป Circuit ของเราบน Gate พื้นฐานที่มีอยู่ในคอมพิวเตอร์ควอนตัมที่เลือก และเราต้องการปรับปรุง Circuit ของเราสำหรับการรันบนคอมพิวเตอร์ควอนตัมนั้น

# 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

ตอนนี้เราต้องการรันบนคอมพิวเตอร์ควอนตัมจริง syntax ที่จำเป็นทั้งหมดสำหรับนั้นอยู่ในบล็อกโค้ดด้านล่าง หากคุณหมดเวลาที่จัดสรรบนคอมพิวเตอร์ควอนตัมจริง หรือหากคุณไม่มีการเชื่อมต่ออินเทอร์เน็ต คุณสามารถ uncomment บล็อกโค้ดถัดไป ซึ่งจะรันโค้ดบน local simulator

# 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" ซึ่งไม่น่าแปลกใจสำหรับเรา เรารู้ว่าเรากำลังใช้คอมพิวเตอร์ควอนตัมที่ประกอบด้วย Qubit และเราคุ้นเคยกับบิตคลาสสิกที่ส่งคืน 0 หรือ 1 แต่จำไว้ว่า: นี่คืออนาล็อกการคำนวณควอนตัมของการทดลองที่ทำกับอนุภาคที่มีโมเมนต์แม่เหล็ก หากเราคาดหวังการกระจายสม่ำเสมอระหว่าง 0 และ +1 มันอาจทำให้เราแปลกใจที่ได้ค่าขีดสุดบนการวัดครั้งแรก การควอนตัมที่น่าประหลาดใจของผลลัพธ์ในการทดลอง Stern-Gerlach นำเราไปสู่ความเข้าใจที่ดีขึ้นเกี่ยวกับธรรมชาติ และในที่สุดก็ช่วยให้เราสร้างคอมพิวเตอร์ควอนตัมได้

มาดูว่าจะเกิดอะไรขึ้นเมื่อเราทำการวัดกลุ่ม

การทดลองที่สอง: การวัดอนุภาคหลายตัว

เพื่อรวบรวมสถิติจากการวัดดังกล่าวจำนวนมาก เราไม่จำเป็นต้องทำซ้ำขั้นตอนที่ 1 และ 2 เราสามารถเพิ่มจำนวน shots ในการทดลองของเราได้ รู้สึกอิสระที่จะทดลองจำนวน shots ในตัวอย่างของขั้นตอนที่ 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()

เช่นเดียวกับก่อนหน้า หากคุณไม่สามารถรันบนคอมพิวเตอร์ควอนตัมจริงได้ ให้ uncomment บล็อกด้านบนจากการทดลองแรก และเพียงเปลี่ยน num_shots = 1 เป็น num_shots = 100 หรือมากกว่า

plot_histogram(counts)

Output of the previous code cell

เราเห็นว่าบางครั้งวัดได้ 0 และบางครั้งวัดได้ 1 โปรดสังเกตว่าเราไม่เคยวัดได้อย่างอื่น! คุณสามารถเปลี่ยนจำนวน shots และสังเกตว่าความน่าจะเป็นของการวัด 0 หรือ 1 ดูเหมือนค่อนข้างสม่ำเสมอระหว่างการรันที่แตกต่างกันด้วยจำนวน shots ที่แตกต่างกัน ดังนั้น บางอย่างเกี่ยวกับการเตรียมสถานะดูเหมือนจะกำหนดความน่าจะเป็นของผลลัพธ์การวัด แม้ว่าการวัดใดๆ ครั้งหนึ่งอาจให้ 0 หรือ 1

การทดลองที่สาม: สปินสุ่มในเตาอบ

ในการทดลอง Stern-Gerlach นักวิจัยไม่สามารถระบุมุมที่เวกเตอร์โมเมนตัมเชิงมุมจะออกมาจากเตาอบได้ การวางแนวนั้นสุ่ม (หรืออะไรที่ลึกลับกว่านั้น! ดูโมดูล Qiskit Classroom เกี่ยวกับทฤษฎีบทของ Bell) อนาล็อกที่สมเหตุสมผลของการทดลองนั้นคือให้เราเริ่มต้นสถานะของ Qubit โดยสุ่มและทำการวัดหลายครั้ง

ขั้นตอนที่ 1: แมป input แบบคลาสสิกไปยังปัญหาควอนตัม

Circuit ที่เราต้องการสร้างนั้นเหมือนกับก่อนหน้า ความแตกต่างเพียงอย่างเดียวคือครั้งนี้เราจะสร้าง Circuit โดยใช้ Gate ที่มีพารามิเตอร์อิสระ θ\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

การรัน Circuit ควอนตัมสำหรับเพียง shot เดียวและทำเช่นนั้นสำหรับการกำหนดค่าสุ่มจำนวนมากเป็นเวิร์กโฟลว์ที่ผิดปกติสำหรับคอมพิวเตอร์ควอนตัม แน่นอนว่าสามารถทำได้ แต่เพื่อความง่าย เราจะใช้ local simulator ที่นี่

# 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

เราจึงเห็นว่าสถานะเริ่มต้นสุ่มของ Qubit (สอดคล้องกับการวางแนวสุ่มของโมเมนตัมเชิงมุมในการทดลอง Stern-Gerlach) ให้จำนวน 0 และ 1 ที่คล้ายคลึงกัน (เช่นเดียวกับจำนวนสถานะ spin up และ spin down ที่คล้ายกัน) นี่คือสิ่งที่การทดลอง Stern-Gerlach ดั้งเดิมแสดงให้เห็น

การทดลองที่สี่: การวัดซ้ำ

เมื่อ Qubit เริ่มต้นในสถานะสุ่ม เราเห็นว่ามีโอกาสประมาณ 50-50 ในการวัดค่าขีดสุดหนึ่งมากกว่าอีกค่าหนึ่ง แต่จะเกิดอะไรขึ้นกับสถานะของ Qubit (หรือโมเมนตัมเชิงมุมของอนุภาค) หลังจากการวัด? เพื่อตอบคำถามนั้น เราต้องกำหนด Circuit ที่ช่วยให้เราทำการวัดหลายครั้งบน Qubit เดียวกัน มาสร้าง Circuit ที่เราสามารถใช้ตรวจสอบสิ่งนี้ เราต้องการอนุญาตให้วัดได้ทั้งสถานะ 0|0\rangle และ 1|1\rangle ดังนั้นเราต้องการอะไรบางอย่างเพื่อหมุนสถานะเริ่มต้นของ Qubit จากสถานะ 0|0\rangle เริ่มต้น ในกรณีนี้ เราจะใช้ Hadamard gate 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" เป็นต้น ที่นี่ ตัวเลขเหล่านี้หมายถึง "ผลลัพธ์ที่ 2, ผลลัพธ์ที่ 1" ดังนั้น "00" หมายความว่าการวัดทั้งสองให้สถานะ 0|0\rangle และ "01" หมายความว่าการวัดแรกให้ 1|1\rangle และครั้งที่สองให้ 0|0\rangle Qubit ส่วนใหญ่ถูกวัดให้อยู่ในสถานะ 0|0\rangle สองครั้ง หรือถูกวัดให้เป็น 1|1\rangle สองครั้ง มันเป็นเรื่องหายากมากที่ Qubit จะถูกวัดในสถานะหนึ่งแล้วถูกวัดในสถานะอื่น และกรณีไม่กี่กรณีที่เกิดขึ้น (~1%) เกิดจากสัญญาณรบกวน ในกรณีนี้สัญญาณรบกวนนั้นถูกจำลองให้สอดคล้องกับพฤติกรรมของระบบควอนตัมจริง ความสัมพันธ์ที่สังเกตได้นี้ระหว่างการวัดต่อเนื่องกันยังพบในการวัดแบบ Stern-Gerlach ของอนุภาคที่มีโมเมนตัมเชิงมุมสปินด้วย หากอนุภาคถูกวัดให้เป็น "spin-up" การวัดครั้งต่อมาในไม่ช้าจะให้ "spin-up" อีกครั้ง (โดยมีความแปรปรวนเล็กน้อยเนื่องจากสัญญาณรบกวน)

สิ่งนี้อาจดูเหมือนเรื่องธรรมดา ท้ายที่สุด ถ้า Qubit ถูกวัดให้อยู่ในสถานะหนึ่ง แล้วฉันวัดมันอีกครั้งอย่างรวดเร็ว ทำไมมันจะไม่อยู่ในสถานะนั้นอีก? แต่ถ้าเราจับความละเอียดนี้ได้อย่างแท้จริง มันอาจช่วยให้เราเลือกเครื่องมือทางคณิตศาสตร์เพื่ออธิบายปรากฏการณ์นี้

การวิเคราะห์การทดลองจนถึงตอนนี้

มาสรุปข้อสังเกตจากการทดลองของเราจนถึงตอนนี้:

  • การวัดระบบกลศาสตร์ควอนตัมจะให้ค่าหนึ่งในชุดของ "ค่าที่อนุญาต" เท่านั้น สำหรับระบบสองระดับอย่าง Qubit หรืออนุภาค spin-1/2 การวัดจะให้เพียงหนึ่งในผลลัพธ์แบบไบนารี
  • เมื่อเราเริ่มต้นสถานะของระบบไบนารีของเราโดยสุ่ม (เช่น อนุภาค spin-1/2 ที่ออกมาจากเตาอบ) ผลลัพธ์การวัดแบบไบนารีทั้งสองเป็นไปได้
  • เมื่อทำการวัดแล้วและรู้สถานะของระบบ การทำซ้ำการวัด physical observable เดียวกันจะไม่เปลี่ยนสถานะ! นั่นคือ ถ้าเราได้สถานะ 0 หนึ่งครั้ง เมื่อเราวัดอีกครั้งมันยังคงอยู่ในสถานะ 0 (โดยมีสัญญาณรบกวนเล็กน้อยในระบบ ~0.1% ถึง 1%)

โปรดสังเกตอย่างชัดเจนว่าเรายังไม่ได้พูดถึงลักษณะความน่าจะเป็นของกลศาสตร์ควอนตัม หรือกล่าวถึงการ "collapse" สถานะไปยัง eigenstate โดยใช้เพียงข้อสังเกตข้างต้น อาจดึงดูดใจให้มองหาการดำเนินการทางคณิตศาสตร์ OO ที่ปล่อยให้ชุดพิเศษของสถานะกลศาสตร์ควอนตัม ψ|\psi\rangle ไม่เปลี่ยนแปลงจนถึงบางค่าคงที่: Oψ=cψO|\psi\rangle = c|\psi \rangle เนื่องจากการวัดตาม zz สองครั้งให้ผลลัพธ์เดียวกัน ในท้ายที่สุด การค้นหานั้นจะล้มเหลวในการอธิบายพฤติกรรมทั้งหมดที่เราจะเห็น แต่มันสามารถอธิบายบางสิ่งได้ ดังนั้นเราจะดำเนินต่อไปสักครู่

มีการดำเนินการดังกล่าวอยู่จริง การดำเนินการเมทริกซ์บนเวกเตอร์บางตัวเปลี่ยนเวกเตอร์ และการดำเนินการเมทริกซ์บนเวกเตอร์อื่น (eigenvectors) ปล่อยให้เวกเตอร์ไม่เปลี่ยนแปลงจนถึงค่าคงที่ ตัวอย่างเช่น เมทริกซ์ 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.

เราอาจพยายามอธิบายสปินของอนุภาคโดยใช้เมทริกซ์ และเราอาจพยายามอธิบายสถานะของอนุภาคหลังการวัดโดยใช้เวกเตอร์ที่เรียกว่า "state vector" ไม่ชัดเจนเลยว่าค่าใดควรอยู่ในเมทริกซ์หรือ state vector ดังกล่าว แต่คุณสมบัติเดียวที่เรามีจากการวัดจนถึงตอนนี้ที่เราสามารถใช้ระบุสถานะคือความน่าจะเป็นของการวัด 0 หรือ 1 ("spin-up" หรือ "spin-down" ในบริบทของอนุภาค spin-1/2) เราควรพิจารณาว่ารายการใน state vectors ควรเกี่ยวข้องกับความน่าจะเป็นนี้ (ความน่าจะเป็นที่แน่นอน "probability amplitude" — หมายความว่าเรายกกำลังสองรายการเพื่อได้ความน่าจะเป็น เป็นต้น) แต่ในขณะนี้ เราไม่แน่ใจว่ารายการในเมทริกซ์เหล่านี้ควรเป็นจำนวนจริงล้วนๆ จำนวนเชิงซ้อน หรืออะไร เพื่อความปลอดภัย ลองพัฒนากรอบที่เวกเตอร์และเมทริกซ์ตอบสนองสิ่งต่อไปนี้:

  • ตัวดำเนินการเมทริกซ์เชื่อมต่อกับการทดลองมากที่สุดเท่าที่เป็นไปได้ ตัวอย่างเช่น เราสามารถเชื่อมโยง eigenvalues ของเมทริกซ์สปินกับการฉายภาพสปินที่สังเกตได้จากการทดลอง
  • State vectors ควรเชื่อมต่อกับความน่าจะเป็นในแบบต่อไปนี้: ถ้าอนุภาคอยู่ใน state vector 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 หมายความว่ามีสถานะในคอมพิวเตอร์ควอนตัมและในระบบ spin-1/2 ที่คล้ายกันมากและมักถูกแมปซึ่งกันและกัน พวกมันเห็นได้ชัดว่าไม่เหมือนกันทุกประการ เนื่องจากพวกมันอ้างถึงระบบที่แตกต่างกัน แต่พีชคณิตที่อธิบายระบบสองสถานะเหล่านี้อาจสอดคล้องกับกฎเดียวกัน (spoiler: มันสอดคล้องกัน!) โปรดสังเกตว่าการเลือกแบบสุ่มนี้มีคุณลักษณะที่ดีอยู่แล้ว โปรดสังเกตว่า

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 หรือสถานะ "spin-up" มันจะอยู่ที่นั่นเมื่อวัดซ้ำ ความน่าจะเป็นข้างต้นควรเป็น 100%

ตรวจสอบความเข้าใจของคุณ

อ่านคำถามด้านล่าง คิดคำตอบของคุณ จากนั้นคลิกสามเหลี่ยมเพื่อดูคำตอบ

เหตุใด

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

จึงเป็นตัวเลือกที่ดีกว่า เช่น

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

คำตอบ:

ความพยายามของเราที่จะเชื่อมโยงความน่าจะเป็นของการวัดกับ inner product ยกกำลังสองหมายความว่าเราต้องการขนาดของเวกเตอร์แต่ละตัวเป็น 1 นั่นคือ vv2=1|\langle v|v\rangle|^2 = 1 สำหรับทุก v|v\rangle เนื่องจากความน่าจะเป็นที่สิ่งที่อยู่ในสถานะ v|v\rangle จะอยู่ในสถานะ v|v\rangle คือ 100% สิ่งนี้เรียกว่า "normalization condition"

เหตุใด

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} ตั้งแต่แรก แต่เป็นข้อตกลง อย่างไรก็ตาม เมื่อเราทำการเลือกนั้น มันกำหนดข้อจำกัดบางอย่างสำหรับการเลือกต่อมา ดูด้านล่าง

จำไว้ว่าในการทดลองข้างต้น เราพบว่า Qubit ที่เริ่มต้นในสถานะ 0|0\rangle ยังคงอยู่ในสถานะนั้นเมื่อวัดซ้ำ เช่นเดียวกับ 1|1\rangle ซึ่งหมายความว่า Qubit ที่อยู่ใน 0|0\rangle มีความน่าจะเป็นเป็นศูนย์ที่จะถูกวัดในสถานะ 1|1\rangle (ยกเว้นผลกระทบจากสัญญาณรบกวน) การเชื่อมต่อที่จำเป็นระหว่าง inner products และความน่าจะเป็นของการวัดบอกเราว่า

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

โดยไม่เสียความทั่วไป เราสามารถเขียน state vector 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 ที่เรียกว่า "normalization condition" บอกเราว่า b2=1|b|^2=1 สิ่งนี้เพียงอย่างเดียวจำกัดเราที่ b=eiϕb=e^{i\phi} สำหรับ ϕR\phi \in \mathbb{R} ปรากฏว่ามีเหตุผลอื่นสำหรับการเลือก b=1b=1 ที่เกินขอบเขตของการแนะนำหัวข้อนี้ ตอนนี้ให้เพียงพอที่ว่า b=1b=1 เป็นคำตอบที่ยอมรับได้หนึ่งข้อ

เราได้ก้าวหน้าไปมากในการวิเคราะห์ของเรา การเลือกรูปแบบสำหรับ state vectors ของเราช่วยให้เราสร้างเมทริกซ์ที่อธิบายบางอย่างเกี่ยวกับปรากฏการณ์ทางกายภาพที่เกิดขึ้นที่นี่ โดยเฉพาะอย่างยิ่ง เนื่องจากการทดลอง Stern-Gerlach ดั้งเดิมวัดการแยกของวิถีโคจรตามองค์ประกอบโมเมนตัมเชิงมุมสปินตามแกน zz เราต้องการตัวดำเนินการที่อธิบายสิ่งนั้นอย่างแน่ชัด: SzS_z การเชื่อมต่อที่สำคัญอีกอย่างกับการทดลองคือจากปริมาณการเบี่ยงเบน เวลาเดินทาง และความแข็งแกร่งของสนามแม่เหล็กที่ทราบ เราสามารถกำหนดขนาดขององค์ประกอบ zz ของสปินได้ แม้ว่าสิ่งนี้ต้องการสมมติฐานมากมายเกี่ยวกับความแม่นยำของการตั้งค่าการทดลอง ที่นี่เราจะเพียงแต่ทำซ้ำว่าองค์ประกอบ z ที่วัดได้ของโมเมนตัมเชิงมุมสปินคือ ±/2\pm \hbar/2

จากนั้นเรากำลังมองหาเมทริกซ์ที่มี eigenvalues จริง (ตอบสนองโดยเมทริกซ์ Hermitian) ที่มี eigenvalues สอดคล้องกับองค์ประกอบสปินที่สังเกตได้จากการทดลองเหล่านี้ โดยไม่เสียความทั่วไป เราสามารถเขียน 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}.

นี่คือตัวดำเนินการ spin-z ที่รู้จักกันดีซึ่งพบในตำราเรียนกลศาสตร์ควอนตัมทั้งหมด มักเห็นสิ่งนี้โดยลบ /2\hbar/2 ออก ซึ่งในกรณีนั้นคือตัวดำเนินการ "Pauli-z" มักแสดงด้วย σz\sigma_z:

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

สิ่งนี้มีประโยชน์ เนื่องจากตัวดำเนินการ Pauli นี้ (และเมทริกซ์ที่เกี่ยวข้อง) สามารถอธิบายระบบทางกายภาพจำนวนมากที่เกี่ยวข้องกับสองระดับหรือสองผลลัพธ์ที่เป็นไปได้ของการวัด รวมถึงสถานะของ transmon qubits ในคอมพิวเตอร์ควอนตัม

ก่อนที่เราจะหันไปหาตัวดำเนินการและสถานะอื่นที่เกี่ยวข้องกับสิ่งนี้ เราต้องกล่าวถึงข้อเท็จจริงหนึ่งที่คนจำนวนมากเข้าใจผิด การกระทำของตัวดำเนินการไม่เหมือนกับการวัด ในแง่หนึ่ง คุณอาจพูดว่า "แน่นอนไม่ใช่! อย่างหนึ่งเกิดขึ้นบนกระดาษเป็นส่วนหนึ่งของการคำนวณทางคณิตศาสตร์ และอีกอย่างเกิดขึ้นในห้องปฏิบัติการบนระบบทางกายภาพ" ใช่ นั่นเป็นความจริง แต่มันมากกว่านั้น การวัดองค์ประกอบ zz ของสปินจะให้สถานะ "spin-up" หรือ "spin-down" เสมอ ไม่ว่าสถานะเริ่มต้นของระบบจะเป็นอย่างไร เราเห็นสิ่งนี้กับอนาล็อกการคำนวณควอนตัม 0|0\rangle และ 1|1\rangle เราเริ่มต้นสถานะเป็นการวางแนวสุ่มหลายร้อยแบบ และการวัดให้ 0|0\rangle หรือ 1|1\rangle เสมอ สิ่งนี้เรียกว่าการวัด "collapse the state" ไปยัง eigenstate สิ่งนี้ไม่เกิดขึ้นเมื่อคุณนำเมทริกซ์ไปใช้กับสถานะ ลองคำถามด้านล่างเพื่อสำรวจสิ่งนี้

ตรวจสอบความเข้าใจของคุณ

อ่านคำถามด้านล่าง คิดคำตอบของคุณ จากนั้นคลิกสามเหลี่ยมเพื่อดูคำตอบ

สมมติว่าคุณเริ่มต้นด้วยอนุภาคในสถานะสปิน

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

(a) คุณได้อะไรถ้าคุณกระทำด้วยตัวดำเนินการ SzS_z บน state vector นี้? (b) คุณได้อะไรถ้าคุณทำการวัดองค์ประกอบ zz ของสปินของอนุภาคนี้ครั้งเดียว? (c) คุณได้อะไรถ้าคุณเตรียมอนุภาคจำนวนมากที่เหมือนกันกับสถานะนี้และทำการวัดองค์ประกอบ zz ของสปินหลายพันครั้ง?

คำตอบ:

(a) คุณได้

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

(b) คุณจะได้ |\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}

แม้ว่าสถานะ spin-up มีโอกาส 20% มากกว่า แต่ผลลัพธ์ทั้งสองเป็นไปได้ และเราจะได้เพียงหนึ่งในสองสถานะเหล่านี้

(c) ประมาณ 60% ของการวัดจะให้อนุภาค spin-up และประมาณ 40% จะให้อนุภาค spin-down ตามความน่าจะเป็นการวัดที่คำนวณในส่วน (b)

ตรวจสอบคำตอบของส่วน (b) และ (c) ของคำถามก่อนหน้าโดยใช้การเปรียบเทียบระหว่างสถานะ spin-up ของอะตอมและสถานะ Qubit:

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

เขียน Circuit ควอนตัมเพื่อสร้างสถานะเริ่มต้นที่ต้องการ จากนั้นใช้ฮาร์ดแวร์จริงหรือ simulator เพื่อตรวจสอบผลลัพธ์ของการวัดครั้งเดียว และจากกลุ่มของการวัดหลายร้อยหรือหลายพันครั้ง

คำตอบ:

#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.

การทดลองที่ห้า: การวัด observables ต่างๆ

จนถึงตอนนี้เราวัดตามแกน z เท่านั้น ในการทดลอง Stern-Gerlach หากเราต้องการวัดตาม เช่น แกน x เราจะวางแนวสนามแม่เหล็กที่ไม่สม่ำเสมอให้ชี้ตามแกน xx และมองหาการเบี่ยงเบนตาม xx บนหน้าจอ อย่างไรก็ตาม คอมพิวเตอร์ควอนตัม IBM ได้รับการออกแบบให้วัดตามแกนเดียวเท่านั้น (zz) เพื่อวัดสถานะตาม xx เราต้องทำ "change of basis" ซึ่งหมายความว่าเราต้องทำการดำเนินการที่นำสถานะตาม xx ใน Bloch sphere ไปยัง zz และในทางกลับกัน มีหลายวิธีในการดำเนินการนี้ แต่วิธีที่ต้องการคือ Hadamard gate:

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

Circuit นี้หมุนระบบของเราเพื่อให้การวัด (ตาม zz) บอกเราเกี่ยวกับลักษณะ xx ก่อนการหมุน เรารู้อยู่แล้วว่าคอมพิวเตอร์ควอนตัมเริ่มต้นสถานะเป็น 0|0\rangle ซึ่งสอดคล้องกับ |\uparrow\rangle มาดูว่าจะเกิดอะไรขึ้นเมื่อเราวัดการฉายภาพสปินตาม xx สำหรับสถานะที่เริ่มต้นใน |\uparrow\rangle เราแสดงขั้นตอนนี้บน simulator เพื่อกระตุ้นให้คุณสำรวจสถิติของ Circuit อื่นที่มีการเริ่มต้นค่าต่างๆ

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}

สิ่งนี้แสดงให้เราเห็นว่าสำหรับ Qubit ที่เริ่มต้นใน 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 เราอาจสงสัยต่อไปว่าอนุภาคที่ collapse เข้าสู่สถานะที่ชัดเจนตาม +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 หรือในทางกลับกัน เราสามารถรวบรวมข้อสังเกตของเราและใช้มันเพื่อพัฒนาตัวดำเนินการในรูปแบบเมทริกซ์เพิ่มเติม และ state vectors เพิ่มเติม

เรารู้:

  • สถานะที่มีการฉายภาพที่ชัดเจนตาม +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}

คำถาม

ผู้สอนสามารถขอเวอร์ชันของ notebook เหล่านี้พร้อมคำเฉลยและคำแนะนำในการวางในหลักสูตรทั่วไปได้โดยกรอกแบบสำรวจสั้นๆ เกี่ยวกับวิธีการใช้ notebook

แนวคิดสำคัญ:

  • สำหรับอนุภาค spin-1/2 การวัดการฉายภาพของสปินบนแกนใดๆ สามารถให้เพียงหนึ่งในสองผลลัพธ์ มักเรียกว่า "up" และ "down"
  • Qubit สามารถวัดได้ในหนึ่งในสองสถานะเท่านั้น มักเรียกว่า 0|0\rangle และ 1|1\rangle
  • เราสามารถจำลองการทดลอง Stern-Gerlach บนอนุภาค spin-1/2 โดยใช้ Qubit ในคอมพิวเตอร์ควอนตัม
  • การวัดซ้ำของ physical observable เดียวกันของอนุภาค/Qubit เดียวกันจะให้ผลลัพธ์เดียวกัน (ยกเว้นระบบถูกรบกวนโดยสัญญาณรบกวน)
  • เราสามารถใช้ผลลัพธ์จากการทดลอง Stern-Gerlach หรือจากการทดลองที่คล้ายคลึงกันกับคอมพิวเตอร์ควอนตัมเพื่อสร้างระบบของ state vectors และตัวดำเนินการเมทริกซ์ที่อธิบายสปินกลศาสตร์ควอนตัม

คำถาม T/F:

  1. T/F เริ่มจากการสังเกตการทดลอง การเลือกเวกเตอร์เพื่อแทน |\uparrow\rangle ที่ถูกต้องเพียงอย่างเดียวคือ (10)\begin{pmatrix}1 \\ 0\end{pmatrix}
  2. T/F ถ้า =(10)|\uparrow\rangle = \begin{pmatrix}1 \\ 0\end{pmatrix} การเลือกเพียงอย่างเดียวสำหรับ |\downarrow\rangle คือ (01)\begin{pmatrix}0 \\ 1\end{pmatrix} (ถึง global phase)
  3. T/F อนุภาคที่ถูกวัดให้อยู่ในสถานะ 0|0\rangle จะยังคงพบในสถานะ 0|0\rangle เมื่อวัดซ้ำตาม zz
  4. T/F อนุภาคที่ถูกวัดให้อยู่ในสถานะ 0|0\rangle จะยังคงพบในสถานะ 0|0\rangle เมื่อวัดซ้ำตาม xx
  5. T/F อนุภาคที่ถูกวัดให้อยู่ในสถานะ 0|0\rangle จะพบในสถานะ +x|+\rangle_x เสมอเมื่อวัดซ้ำตาม xx

คำถาม MC:

  1. อนุภาคที่เริ่มต้นใน |\uparrow\rangle มีความน่าจะเป็นเท่าใดในการถูกวัดในสถานะ +x|+x\rangle?

    • a. 0%
    • b. 25%
    • c. 50%
    • d. 71%
    • e. 100%
  2. อนุภาคที่เริ่มต้นใน |\uparrow\rangle มีความน่าจะเป็นเท่าใดในการถูกวัดในสถานะ |\downarrow\rangle?

    • a. 0%
    • b. 25%
    • c. 50%
    • d. 71%
    • e. 100%
  3. สถานะ |\uparrow\rangle ของอนุภาค spin-1/2 มักเชื่อมโยงกับสถานะการคำนวณควอนตัมใด?

    • a. +|+\rangle
    • b. |-\rangle
    • c. 0|0\rangle
    • d. 1|1\rangle
    • e. ไม่มีข้อใดข้างต้น

คำถามอภิปราย:

  1. เพื่อนสามคนกำลังอภิปรายเกี่ยวกับการวัดและตัวดำเนินการควอนตัม เพื่อน A บอกว่า "การวัดตาม zz และการกระทำด้วยตัวดำเนินการ σz\sigma_z เป็นสิ่งเดียวกัน" เพื่อน B บอกว่า "พวกมันเป็นขั้นตอนที่แตกต่างกัน แต่ให้ผลลัพธ์เหมือนกัน" เพื่อน C บอกว่า "พวกมันแตกต่างกันอย่างสิ้นเชิง แม้แต่มีผลกระทบต่างกันกับสถานะส่วนใหญ่" คุณเห็นด้วยกับใครและทำไม?

โจทย์ตอบอิสระ:

  1. จากการสังเกตการทดลองและ syntax ที่เสนอ:

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}

แสดงว่าถึง global phase

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

เลือก α=0\alpha = 0 เพื่อให้ได้ผลลัพธ์มาตรฐาน

  1. จากการสังเกตการทดลองและ syntax ที่เสนอ:

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}

และโดยใช้ผลลัพธ์จากโจทย์ challenge ข้อ 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

แสดงว่าถึง global phase

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

กิตติกรรมประกาศ

[1] By Tatoute - Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=34095239

Source: IBM Quantum docs — updated 20 เม.ย. 2569
English version on doQumentation — updated 7 พ.ค. 2569
This translation based on the English version of approx. 26 มี.ค. 2569