import%20marimo%0A%0A__generated_with%20%3D%20%220.23.16%22%0Aapp%20%3D%20marimo.App(width%3D%22medium%22)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20import%20marimo%20as%20mo%20%20%23%20wird%20nur%20ben%C3%B6tigt%2C%20wenn%20Sie%20mit%20marimo%20Notebooks%20arbeiten%0A%0A%20%20%20%20return%20(mo%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%20Einf%C3%BChrung%20in%20Qiskit%0A%0A%20%20%20%20In%20diesem%20Notebook%20machen%20Sie%20Ihre%20ersten%20Schritte%20mit%20%5BQiskit%5D(https%3A%2F%2Fwww.ibm.com%2Fquantum%2Fqiskit)%2C%0A%20%20%20%20dem%20Python-Framework%2C%20mit%20dem%20wir%20im%20Laufe%20dieses%20Kurses%20Quantenalgorithmen%20wie%20QAOA%20umsetzen.%0A%0A%20%20%20%20Am%20Ende%20dieses%20Notebooks%20k%C3%B6nnen%20Sie%0A%0A%20%20%20%201.%20einen%20**Quantenschaltkreis**%20anlegen%2C%20zeichnen%20und%20um%20Gatter%20erweitern%2C%0A%20%20%20%202.%20einen%20Schaltkreis%20mit%20dem%20**Simulator**%20ausf%C3%BChren%20und%20das%20Messergebnis%20als%20Histogramm%20darstellen%2C%0A%20%20%20%203.%20den%20**Zustandsvektor**%20eines%20Qubits%20auf%20der%20Bloch-Kugel%20ansehen%2C%0A%20%20%20%204.%20einen%20**verschr%C3%A4nkten%20Zustand**%20(Bell-Zustand)%20erzeugen%2C%0A%20%20%20%205.%20Qubits%20in%20**Registern**%20organisieren.%0A%0A%20%20%20%20Die%20Zellen%20mit%20Code%20k%C3%B6nnen%20Sie%20beliebig%20ver%C3%A4ndern%20und%20neu%20ausf%C3%BChren.%20Probieren%20Sie%20ruhig%20aus%2C%20was%20passiert!%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%201.%20Vorbereitung%0A%0A%20%20%20%20Zun%C3%A4chst%20m%C3%BCssen%20einige%20Module%20importiert%20werden.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20platform%0A%0A%20%20%20%20import%20matplotlib%0A%20%20%20%20import%20pylatexenc%0A%20%20%20%20import%20qiskit%0A%20%20%20%20import%20qiskit_aer%0A%20%20%20%20from%20qiskit%20import%20QuantumCircuit%2C%20QuantumRegister%0A%20%20%20%20from%20qiskit.quantum_info%20import%20Statevector%0A%20%20%20%20from%20qiskit.visualization%20import%20plot_bloch_multivector%2C%20plot_histogram%0A%20%20%20%20from%20qiskit_aer%20import%20AerSimulator%0A%0A%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20AerSimulator%2C%0A%20%20%20%20%20%20%20%20QuantumCircuit%2C%0A%20%20%20%20%20%20%20%20QuantumRegister%2C%0A%20%20%20%20%20%20%20%20Statevector%2C%0A%20%20%20%20%20%20%20%20matplotlib%2C%0A%20%20%20%20%20%20%20%20platform%2C%0A%20%20%20%20%20%20%20%20plot_bloch_multivector%2C%0A%20%20%20%20%20%20%20%20plot_histogram%2C%0A%20%20%20%20%20%20%20%20pylatexenc%2C%0A%20%20%20%20%20%20%20%20qiskit%2C%0A%20%20%20%20%20%20%20%20qiskit_aer%2C%0A%20%20%20%20)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(matplotlib%2C%20mo%2C%20platform%2C%20pylatexenc%2C%20qiskit%2C%20qiskit_aer)%3A%0A%20%20%20%20mo.md(rf%22%22%22%0A%20%20%20%20Pr%C3%BCfen%20Sie%2C%20dass%20Ihre%20installierten%20Versionen%20nicht%20zu%20weit%20von%20diesen%20hier%20abweichen%3A%0A%0A%20%20%20%20%7C%20Paket%20%7C%20Version%20%7C%0A%20%20%20%20%7C---%7C---%7C%0A%20%20%20%20%7C%20Python%20%7C%20%7Bplatform.python_version()%7D%20%7C%0A%20%20%20%20%7C%20qiskit%20%7C%20%7Bqiskit.__version__%7D%20%7C%0A%20%20%20%20%7C%20qiskit-aer%20%7C%20%7Bqiskit_aer.__version__%7D%20%7C%0A%20%20%20%20%7C%20matplotlib%20%7C%20%7Bmatplotlib.__version__%7D%20%7C%0A%20%20%20%20%7C%20pylatexenc%20%7C%20%7Bpylatexenc.__version__%7D%20%7C%0A%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20Hinweis%0A%20%20%20%20%20%20%20%20type%3A%20info%0A%0A%20%20%20%20%60matplotlib%60%20und%20%60pylatexenc%60%20werden%20nur%20f%C3%BCr%20das%20Zeichnen%20der%20Schaltkreise%20(%60draw(%22mpl%22)%60)%20ben%C3%B6tigt.%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%202.%20Der%20erste%20Schaltkreis%0A%0A%20%20%20%20In%20Qiskit%20dreht%20sich%20alles%20um%20**Quantenschaltkreise**%20(%60QuantumCircuit%60).%0A%20%20%20%20Ein%20Schaltkreis%20besteht%20aus%20Qubits%2C%20auf%20die%20nacheinander%20Gatter%20und%20Messungen%20angewendet%20werden.%0A%20%20%20%20Was%20das%20genau%20bedeutet%2C%20lernen%20Sie%20im%20Laufe%20dieses%20Kurses%20noch%20genauer.%0A%0A%20%20%20%20Wir%20beginnen%20mit%20dem%20einfachsten%20Fall%3A%20**ein%20Qubit**%2C%20auf%20das%20nichts%20angewendet%20wird%2C%20das%20aber%20gemessen%20wird.%0A%20%20%20%20Jedes%20Qubit%20startet%20in%20Qiskit%20im%20Zustand%20%24%7C0%5Crangle%24.%0A%20%20%20%20%60measure_all()%60%20f%C3%BCgt%20am%20Ende%20eine%20Messung%20f%C3%BCr%20alle%20Qubits%20hinzu%20und%20legt%20daf%C3%BCr%20ein%20klassisches%20Register%0A%20%20%20%20%60meas%60%20an%2C%20in%20dem%20die%20Messergebnisse%20gespeichert%20werden.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(QuantumCircuit)%3A%0A%20%20%20%20qc%20%3D%20QuantumCircuit(1)%0A%20%20%20%20qc.measure_all()%0A%20%20%20%20qc.draw(%22mpl%22)%0A%20%20%20%20return%20(qc%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Das%20Diagramm%20zeigt%20ein%20Qubit%20%60q%60%2C%20ein%20klassisches%20Register%20%60meas%60%20und%20die%20Messung%20dazwischen.%0A%0A%20%20%20%20%23%23%23%20Simulation%0A%0A%20%20%20%20Ausgef%C3%BChrt%20wird%20der%20Schaltkreis%20mit%20dem%20%60AerSimulator%60%20aus%20dem%20Modul%20%60qiskit_aer%60.%0A%20%20%20%20%60run(qc)%60%20f%C3%BChrt%20den%20Schaltkreis%20aus.%20Pro%20Ausf%C3%BChrung%20(*Shot*)%20wird%20das%20Qubit%20einmal%20gemessen%2C%0A%20%20%20%20standardm%C3%A4%C3%9Fig%20werden%201024%20Shots%20durchgef%C3%BChrt.%0A%20%20%20%20Das%20Ergebnis%20ist%20die%20H%C3%A4ufigkeit%20jedes%20Messergebnisses%2C%20die%20sogenannten%20%60counts%60.%0A%0A%20%20%20%20%60run%60%20liefert%20zun%C3%A4chst%20ein%20%60Job%60-Objekt%20zur%C3%BCck%2C%20denn%20der%20Simulator%20bietet%20dieselbe%20API%20wie%20ein%20echtes%20Quantencomputer-Backend%2C%0A%20%20%20%20bei%20dem%20Sie%20auf%20das%20Ergebnis%20warten%20m%C3%BCssten.%20%60job.result().get_counts()%60%20liefert%20die%20Z%C3%A4hlwerte.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(AerSimulator%2C%20qc)%3A%0A%20%20%20%20simulator%20%3D%20AerSimulator()%0A%20%20%20%20job%20%3D%20simulator.run(qc%2C%20shots%3D1024)%0A%20%20%20%20counts%20%3D%20job.result().get_counts()%0A%20%20%20%20counts%0A%20%20%20%20return%20counts%2C%20simulator%0A%0A%0A%40app.cell%0Adef%20_(counts%2C%20plot_histogram)%3A%0A%20%20%20%20plot_histogram(counts)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Wie%20erwartet%20wird%20immer%20%600%60%20gemessen%2C%20denn%20das%20Qubit%20befindet%20sich%20im%20Zustand%20%24%7C0%5Crangle%24.%0A%0A%20%20%20%20%23%23%203.%20Superposition%20mit%20dem%20Hadamard-Gatter%0A%0A%20%20%20%20Interessant%20wird%20es%20mit%20Gattern.%20Das%20**Hadamard-Gatter**%20%24H%24%20erzeugt%20aus%20%24%7C0%5Crangle%24%20eine%20gleichm%C3%A4%C3%9Fige%20Superposition%3A%0A%0A%20%20%20%20%24%24H%7C0%5Crangle%20%3D%20%5Cfrac%7B1%7D%7B%5Csqrt%7B2%7D%7D%5Cleft(%7C0%5Crangle%20%2B%20%7C1%5Crangle%5Cright)%24%24%0A%0A%20%20%20%20F%C3%BCr%20die%20meisten%20Gatter%20bietet%20%60QuantumCircuit%60%20eine%20Methode%2C%20die%20das%20Gatter%20einf%C3%BCgt%2C%20hier%20%60h(qubit)%60.%0A%20%20%20%20Qiskit%20beginnt%20dabei%20bei%200%20zu%20z%C3%A4hlen%2C%20das%20erste%20Qubit%20hat%20also%20den%20Index%200.%0A%20%20%20%20Wir%20bauen%20zun%C3%A4chst%20den%20Schaltkreis%20**ohne%20Messung**%2C%20damit%20wir%20uns%20den%20Zustandsvektor%20ansehen%20k%C3%B6nnen.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(QuantumCircuit)%3A%0A%20%20%20%20qc_h%20%3D%20QuantumCircuit(1)%0A%20%20%20%20qc_h.h(0)%0A%20%20%20%20qc_h.draw(%22mpl%22)%0A%20%20%20%20return%20(qc_h%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Da%20wir%20hier%20im%20Simulator%20arbeiten%2C%20k%C3%B6nnen%20wir%20den%20exakten%20Zustandsvektor%20berechnen%2C%20ohne%20zu%20messen.%0A%20%20%20%20Auf%20echter%20Hardware%20ist%20das%20**nicht**%20m%C3%B6glich%2C%20dort%20bleiben%20nur%20Messungen.%0A%20%20%20%20Die%20%60Statevector%60-Klasse%20berechnet%20den%20Zustand%20direkt%20aus%20dem%20Schaltkreis%3A%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(Statevector%2C%20qc_h)%3A%0A%20%20%20%20sv_h%20%3D%20Statevector(qc_h)%0A%20%20%20%20print(sv_h.draw(%22text%22))%0A%20%20%20%20return%20(sv_h%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Ein%20einzelnes%20Qubit%20l%C3%A4sst%20sich%20als%20Punkt%20auf%20der%20**Bloch-Kugel**%20darstellen.%0A%20%20%20%20%24%7C0%5Crangle%24%20ist%20der%20Nordpol%2C%20%24%7C1%5Crangle%24%20der%20S%C3%BCdpol%2C%20und%20der%20Zustand%20%24H%7C0%5Crangle%24%20liegt%20auf%20dem%20%C3%84quator%20(Richtung%20%24%2Bx%24).%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(plot_bloch_multivector%2C%20sv_h)%3A%0A%20%20%20%20plot_bloch_multivector(sv_h)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%204.%20Interaktiv%3A%20Wahrscheinlichkeiten%20und%20Shots%0A%0A%20%20%20%20Mit%20dem%20Gatter%20%24R_y(%5Ctheta)%24%20l%C3%A4sst%20sich%20das%20Qubit%20um%20einen%20beliebigen%20Winkel%20um%20die%20%24y%24-Achse%20drehen.%0A%20%20%20%20Es%20entsteht%20der%20Zustand%0A%0A%20%20%20%20%24%24R_y(%5Ctheta)%7C0%5Crangle%20%3D%20%5Ccos%5Cleft(%5Ctfrac%7B%5Ctheta%7D%7B2%7D%5Cright)%7C0%5Crangle%20%2B%20%5Csin%5Cleft(%5Ctfrac%7B%5Ctheta%7D%7B2%7D%5Cright)%7C1%5Crangle%2C%24%24%0A%0A%20%20%20%20die%20Wahrscheinlichkeit%2C%20eine%20%241%24%20zu%20messen%2C%20ist%20also%20%24P(1)%20%3D%20%5Csin%5E2(%5Ctheta%2F2)%24.%0A%0A%20%20%20%20Ver%C3%A4ndern%20Sie%20den%20Winkel%20und%20die%20Anzahl%20der%20Shots%20und%20beobachten%20Sie%20das%20Histogramm.%0A%20%20%20%20Bei%20wenigen%20Shots%20weicht%20die%20gemessene%20Verteilung%20deutlich%20von%20der%20theoretischen%20ab.%20Das%20ist%20das%20**Shot-Rauschen**.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20theta_slider%20%3D%20mo.ui.slider(%0A%20%20%20%20%20%20%20%20start%3D0%2C%20stop%3D360%2C%20step%3D5%2C%20value%3D90%2C%20label%3D%22Winkel%20%CE%B8%20(in%20Grad)%22%2C%20show_value%3DTrue%0A%20%20%20%20)%0A%20%20%20%20shots_slider%20%3D%20mo.ui.slider(%0A%20%20%20%20%20%20%20%20steps%3D%5B1%2C%2010%2C%20100%2C%201000%2C%2010000%5D%2C%20value%3D100%2C%20label%3D%22Shots%22%2C%20show_value%3DTrue%0A%20%20%20%20)%0A%20%20%20%20mo.hstack(%5Btheta_slider%2C%20shots_slider%5D%2C%20justify%3D%22start%22%2C%20gap%3D2)%0A%20%20%20%20return%20shots_slider%2C%20theta_slider%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20AerSimulator%2C%0A%20%20%20%20QuantumCircuit%2C%0A%20%20%20%20mo%2C%0A%20%20%20%20plot_histogram%2C%0A%20%20%20%20shots_slider%2C%0A%20%20%20%20theta_slider%2C%0A)%3A%0A%20%20%20%20import%20numpy%20as%20np%0A%0A%20%20%20%20_theta%20%3D%20np.deg2rad(theta_slider.value)%0A%0A%20%20%20%20_qc%20%3D%20QuantumCircuit(1)%0A%20%20%20%20_qc.ry(_theta%2C%200)%0A%20%20%20%20_qc.measure_all()%0A%0A%20%20%20%20_counts%20%3D%20AerSimulator().run(_qc%2C%20shots%3Dshots_slider.value).result().get_counts()%0A%20%20%20%20_p1%20%3D%20np.sin(_theta%20%2F%202)%20**%202%0A%0A%20%20%20%20mo.vstack(%0A%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20f%22Theoretisch%3A%20%24P(1)%20%3D%20%5C%5Csin%5E2(%5C%5Ctheta%2F2)%20%3D%20%7B_p1%3A.3f%7D%24%2C%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20f%22gemessen%3A%20%24%7B_counts.get('1'%2C%200)%20%2F%20shots_slider.value%3A.3f%7D%24%22%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20plot_histogram(_counts%2C%20figsize%3D(6%2C%203))%2C%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20Zustand%20direkt%20vorgeben%0A%20%20%20%20%20%20%20%20type%3A%20tip%0A%0A%20%20%20%20Alternativ%20k%C3%B6nnen%20Sie%20ein%20Qubit%20mit%20%60qc.initialize(zustandsvektor%2C%200)%60%20direkt%20in%20einen%20beliebigen%20Zustand%20versetzen%2C%0A%20%20%20%20z.%20B.%20mit%20%60qiskit.quantum_info.random_statevector(2)%60%20in%20einen%20zuf%C3%A4lligen.%0A%20%20%20%20Der%20Vektor%20hat%20die%20Dimension%20%242%5En%24%2C%20bei%20einem%20Qubit%20also%20%242%5E1%20%3D%202%24.%0A%20%20%20%20In%20den%20meisten%20F%C3%A4llen%20reicht%20es%20aber%2C%20Gatter%20auf%20%24%7C0%5Crangle%24%20anzuwenden.%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%205.%20Mehrere%20Qubits%20und%20Verschr%C3%A4nkung%0A%0A%20%20%20%20Schaltkreise%20werden%20mit%20dem%20Builder-Pattern%20aufgebaut%3A%20Jeder%20Methodenaufruf%20h%C3%A4ngt%20ein%20Gatter%20an.%0A%20%20%20%20Das%20**CNOT-Gatter**%20%60cx(steuer%2C%20ziel)%60%20ist%20ein%20Zwei-Qubit-Gatter.%20Es%20invertiert%20das%20Zielqubit%2C%0A%20%20%20%20genau%20dann%20wenn%20das%20Steuerqubit%20%24%7C1%5Crangle%24%20ist.%0A%0A%20%20%20%20Kombiniert%20man%20ein%20Hadamard-Gatter%20mit%20einem%20CNOT%2C%20entsteht%20der%20**Bell-Zustand**%0A%0A%20%20%20%20%24%24%7C%5CPhi%5E%2B%5Crangle%20%3D%20%5Cfrac%7B1%7D%7B%5Csqrt%7B2%7D%7D%5Cleft(%7C00%5Crangle%20%2B%20%7C11%5Crangle%5Cright).%24%24%0A%0A%20%20%20%20Die%20beiden%20Qubits%20sind%20verschr%C3%A4nkt%3A%20Das%20Messergebnis%20jedes%20einzelnen%20Qubits%20ist%20zuf%C3%A4llig%2C%0A%20%20%20%20beide%20Ergebnisse%20sind%20aber%20immer%20gleich.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(QuantumCircuit)%3A%0A%20%20%20%20bell%20%3D%20QuantumCircuit(2)%0A%20%20%20%20bell.h(0)%0A%20%20%20%20bell.cx(0%2C%201)%0A%20%20%20%20bell.measure_all()%0A%20%20%20%20bell.draw(%22mpl%22)%0A%20%20%20%20return%20(bell%2C)%0A%0A%0A%40app.cell%0Adef%20_(bell%2C%20plot_histogram%2C%20simulator)%3A%0A%20%20%20%20bell_counts%20%3D%20simulator.run(bell%2C%20shots%3D1024).result().get_counts()%0A%20%20%20%20plot_histogram(bell_counts)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Es%20treten%20nur%20die%20Ergebnisse%20%6000%60%20und%20%6011%60%20auf%2C%20jeweils%20etwa%20gleich%20oft%2C%20aber%20**nie**%20%6001%60%20oder%20%6010%60.%0A%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20Achtung%3A%20Bit-Reihenfolge%0A%20%20%20%20%20%20%20%20type%3A%20warning%0A%0A%20%20%20%20Qiskit%20verwendet%20die%20*little-endian*-Konvention%3A%20Qubit%200%20steht%20in%20Bitstrings%20**ganz%20rechts**.%0A%20%20%20%20Ein%20Ergebnis%20%60'01'%60%20bedeutet%20also%3A%20Qubit%200%20wurde%20als%20%601%60%20und%20Qubit%201%20als%20%600%60%20gemessen.%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%206.%20Gatter%20hinzuf%C3%BCgen%3A%20zwei%20Wege%0A%0A%20%20%20%20Neben%20den%20Komfortmethoden%20wie%20%60qc.h(0)%60%20k%C3%B6nnen%20Sie%20Gatter%20auch%20als%20Objekte%20anlegen%20und%20mit%20%60append%60%20einf%C3%BCgen.%0A%20%20%20%20Das%20ist%20dann%20n%C3%BCtzlich%2C%20wenn%20man%20Gatter%20aus%20der%20Bibliothek%20%60qiskit.circuit.library%60%20programmatisch%20ausw%C3%A4hlt.%0A%20%20%20%20Beide%20Schaltkreise%20unten%20sind%20identisch.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(QuantumCircuit)%3A%0A%20%20%20%20from%20qiskit.circuit.library%20import%20HGate%0A%0A%20%20%20%20qc_append%20%3D%20QuantumCircuit(3)%0A%20%20%20%20qc_append.append(HGate()%2C%20%5B0%5D)%0A%20%20%20%20qc_append.append(HGate()%2C%20%5B1%5D)%0A%0A%20%20%20%20qc_method%20%3D%20QuantumCircuit(3)%0A%20%20%20%20qc_method.h(0)%0A%20%20%20%20qc_method.h(1)%0A%0A%20%20%20%20print(%22Identisch%3A%22%2C%20qc_append%20%3D%3D%20qc_method)%0A%20%20%20%20qc_method.draw(%22mpl%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%207.%20Register%0A%0A%20%20%20%20Qubits%20lassen%20sich%20in%20**Registern**%20organisieren%20und%20benennen.%0A%20%20%20%20So%20bleiben%20gr%C3%B6%C3%9Fere%20Schaltkreise%20%C3%BCbersichtlich.%20Einzelne%20Qubits%20werden%20%C3%BCber%20%60register%5Bindex%5D%60%20angesprochen.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(QuantumCircuit%2C%20QuantumRegister)%3A%0A%20%20%20%20qreg_a%20%3D%20QuantumRegister(2%2C%20%22a%22)%0A%20%20%20%20qreg_b%20%3D%20QuantumRegister(3%2C%20%22b%22)%0A%0A%20%20%20%20qc_reg%20%3D%20QuantumCircuit(qreg_a%2C%20qreg_b)%0A%20%20%20%20qc_reg.h(qreg_a%5B0%5D)%0A%20%20%20%20qc_reg.h(qreg_b%5B1%5D)%0A%20%20%20%20qc_reg.cx(qreg_a%5B0%5D%2C%20qreg_b%5B2%5D)%0A%20%20%20%20qc_reg.draw(%22mpl%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%208.%20%C3%9Cbungen%0A%0A%20%20%20%20Legen%20Sie%20unterhalb%20dieser%20Zelle%20neue%20Zellen%20an%20und%20l%C3%B6sen%20Sie%20die%20folgenden%20Aufgaben.%0A%0A%20%20%20%201.%20Erzeugen%20Sie%20einen%20Schaltkreis%20mit%20einem%20Qubit%2C%20der%20**immer**%20%601%60%20liefert.%0A%20%20%20%202.%20Erzeugen%20Sie%20den%20**GHZ-Zustand**%20%24%5Cfrac%7B1%7D%7B%5Csqrt%7B2%7D%7D(%7C000%5Crangle%20%2B%20%7C111%5Crangle)%24%20mit%20drei%20Qubits%0A%20%20%20%20%20%20%20und%20%C3%BCberpr%C3%BCfen%20Sie%20das%20Ergebnis%20im%20Histogramm.%0A%20%20%20%203.%20Wenden%20Sie%20auf%20ein%20Qubit%20zweimal%20hintereinander%20das%20Hadamard-Gatter%20an.%0A%20%20%20%20%20%20%20Was%20messen%20Sie%3F%20Wie%20erkl%C3%A4ren%20Sie%20das%20Ergebnis%3F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.accordion(%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22L%C3%B6sungshinweise%22%3A%20mo.md(r%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%201.%20%60qc%20%3D%20QuantumCircuit(1)%3B%20qc.x(0)%3B%20qc.measure_all()%60%0A%20%20%20%20%20%20%20%20%20%20%20%202.%20%60qc.h(0)%3B%20qc.cx(0%2C%201)%3B%20qc.cx(1%2C%202)%60%3A%20Erwartet%20werden%20nur%20%60000%60%20und%20%60111%60.%0A%20%20%20%20%20%20%20%20%20%20%20%203.%20%24H%5E2%20%3D%20I%24%2C%20das%20Qubit%20ist%20wieder%20im%20Zustand%20%24%7C0%5Crangle%24%20und%20Sie%20messen%20immer%20%600%60.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Die%20Superposition%20hebt%20sich%20durch%20Interferenz%20wieder%20auf.%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22)%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20Zusammenfassung%0A%0A%20%20%20%20%7C%20Konzept%20%7C%20Qiskit%20%7C%0A%20%20%20%20%7C---%7C---%7C%0A%20%20%20%20%7C%20Schaltkreis%20anlegen%20%7C%20%60QuantumCircuit(n)%60%20%7C%0A%20%20%20%20%7C%20Gatter%20hinzuf%C3%BCgen%20%7C%20%60qc.h(0)%60%2C%20%60qc.cx(0%2C%201)%60%2C%20%60qc.ry(theta%2C%200)%60%20%7C%0A%20%20%20%20%7C%20Messen%20%7C%20%60qc.measure_all()%60%20%7C%0A%20%20%20%20%7C%20Zeichnen%20%7C%20%60qc.draw(%22mpl%22)%60%20%7C%0A%20%20%20%20%7C%20Simulieren%20%7C%20%60AerSimulator().run(qc%2C%20shots%3D...).result().get_counts()%60%20%7C%0A%20%20%20%20%7C%20Exakter%20Zustand%20%7C%20%60Statevector(qc)%60%20(nur%20ohne%20Messung%2C%20nur%20im%20Simulator)%20%7C%0A%20%20%20%20%7C%20Visualisieren%20%7C%20%60plot_histogram%60%2C%20%60plot_bloch_multivector%60%20%7C%0A%0A%20%20%20%20Im%20n%C3%A4chsten%20Notebook%20geht%20es%20mit%20der%20Alternative%20**PennyLane**%20weiter.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
3a5fa543c7eac9c1e168071b68c5a5dd