ToolDingo

Quantencomputer-Simulator

Schreibe einen kleinen Quantenschaltkreis in JavaScript, simuliere ihn direkt im Browser und sieh Schaltkreisdiagramm, Wahrscheinlichkeiten und Zustandsvektor. Oder beschreibe eine Berechnung auf hoher Ebene (z. B. eine Addition) und sieh, wie daraus automatisch ein echter reversibler Quantenschaltkreis wird.

Rauschmodell (Noise Model)

Echte Quantencomputer rechnen nicht perfekt: Qubits sind extrem empfindlich und verlieren durch jede ungewollte Wechselwirkung mit ihrer Umgebung – Wärme, elektromagnetische Felder, benachbarte Qubits – einen Teil ihrer Information (Dekohärenz). Auch Gatter-Operationen treffen nie exakt, und selbst das Ablesen am Ende kann danebengehen. Dieser Simulator rechnet standardmäßig ideal; hier kannst du typische Fehlermodelle zuschalten und ihre Wirkung direkt in den Ergebnissen beobachten.

Gilt für jede Simulation auf dieser Seite – für High-Level-Läufe und manuell geschriebene Schaltkreise.
%
Pro Gatter und beteiligtem Qubit bzw. beim Readout-Modell pro abgelesenem Bit. Wähle einen Wert für das Szenario, das du untersuchen möchtest.

Programm-Code

Beschreibe eine Berechnung mit quantum.add, quantum.subtract, quantum.multiply, quantum.divide oder quantum.random. Strg+Enter startet die Simulation. Ausführliche Dokumentation über die Schaltfläche „Dokumentation“.

Dokumentation

Beschreibe eine Berechnung im Editor – daraus wird automatisch ein echter Quanten-Schaltkreis erzeugt und simuliert. Maximal 4000 Zeichen. Strg+Enter startet die Simulation.

FormelErklärungLimits
quantum.add({ a, b })Addition zweier ZahlenErgebnis max. 4 Bit (0–15)
quantum.subtract({ a, b })Subtraktiona ≥ b, max. 4 Bit
quantum.multiply({ a, b })MultiplikationFaktoren 0–7 (3 Bit)
quantum.divide({ a, b })Division (Quotient + Rest)b ≥ 1; sehr eng: bits(a)+bits(b)+bits(a÷b)+1 ≤ 10
quantum.random({ bits })Echte Quanten-Zufallszahlbits 1–10

Beispiel auswählen

Schaltkreiscode

Maximal 4000 Zeichen. Verfügbare QuantumCircuit-Methoden: x, y, z, h, s, sdg, t, tdg, rx, ry, rz, cnot, cz, ccnot (Alias: toffoli), swap, measureAll, run. Strg+Enter startet die Simulation.

Beispiel auswählen

Grundlagen: Wie funktioniert das?

Schematischer Aufbau eines Quantencomputers: Ein Steuercomputer führt mehrere Laserstrahlen über eine Optikbank zu einem Qubit in einer Vakuumkammer.
Vom klassischen Steuercomputer über Laser und Optik zum physikalischen Qubit.

Vom Programm zum physikalischen Qubit

Ein echter Quantencomputer besteht nicht nur aus einem Chip. Klassische Steuerelektronik übersetzt den Schaltkreis in präzise Impulse. Im gezeigten Beispiel formen Kühl-, Rückpump-, Qubit- und Ausleselaser diese Signale auf einer Optikbank und führen sie in eine abgeschirmte Vakuumkammer. Dort verändern und messen sie den Zustand des Qubits; das Messergebnis fließt anschließend zurück an den klassischen Computer.

Qubit & Basiszustände

Ein klassisches Bit ist entweder 0 oder 1. Ein Qubit kann zusätzlich in einer Überlagerung (Superposition) dieser beiden Basiszustände |0⟩ und |1⟩existieren. Bei mehreren Qubits werden alle Basiszustände als Bitstring notiert, z. B. |10⟩ für 2 Qubits – dabei ist q0 in diesem Simulator immer das höchstwertige (linke) Bit.

Superposition

Ein Qubit in Superposition trägt gleichzeitig Anteile mehrerer Basiszustände. Diese Anteile werden als komplexe Amplituden beschrieben; das Betragsquadrat einer Amplitude ergibt die Wahrscheinlichkeit, den zugehörigen Zustand bei einer Messung zu erhalten.

Die Bloch-Kugel

Der Zustand eines einzelnen Qubits lässt sich als Pfeil in einer Kugel veranschaulichen: Der Nordpol steht für |0⟩, der Südpol für |1⟩, alle Punkte auf dem Äquator sind gleichgewichtete Superpositionen – die Phase bestimmt, in welche Richtung entlang des Äquators der Pfeil zeigt. Die Rotations-Gatter rx, ryund rz drehen den Pfeil um die jeweilige Achse, Phasengatter wie S und T drehen ihn um die Z-Achse. Bei verschränkten Qubits schrumpft der Pfeil in Richtung Kugelmittelpunkt: Das einzelne Qubit hat dann keinen eigenen reinen Zustand mehr – so lässt sich Verschränkung buchstäblich sehen.

Messung & Shots

measureAll() misst alle Qubits gleichzeitig und beendet den Schaltkreis. Da eine einzelne Messung nur ein zufälliges Ergebnis liefert, wird der Schaltkreis bei run({ shots })gedanklich "shots"-mal wiederholt gemessen, damit sich die Wahrscheinlichkeitsverteilung als Histogramm zeigt. Die exakten Wahrscheinlichkeiten werden zusätzlich direkt aus dem Zustandsvektor berechnet, unabhängig vom Zufall der Shots.

Hadamard-Gate

Das Hadamard-Gate h(q) versetzt ein Qubit aus einem eindeutigen Zustand (|0⟩ oder |1⟩) in eine gleichgewichtete Superposition aus |0⟩ und |1⟩ – bei Messung also ca. 50 % / 50 %.

Phasengatter: S und T

Die Gatter s(q) und t(q) ändern keine Messwahrscheinlichkeiten eines einzelnen Qubits, sondern drehen nur die Phase der |1⟩ -Amplitude – S um 90°, T um 45°. Wirkung zeigen sie erst im Zusammenspiel mit Superposition: Zwischen zwei Hadamard-Gates entscheidet die Phase darüber, wie sich Amplituden überlagern oder auslöschen (Interferenz). Die Dagger-Varianten sdg(q) und tdg(q) drehen exakt entgegengesetzt und machen S bzw. T rückgängig. Es gilt: zwei T ergeben ein S, zwei S ergeben ein Z.

CNOT & bedingte Verschränkung

Das CNOT-Gate cnot(control, target) kippt das Target-Qubit genau dann, wenn das Control-Qubit den Zustand |1⟩hat. Befindet sich das Control-Qubit vorher in Superposition, kann dadurch Verschränkung entstehen – die beiden Qubits lassen sich dann nicht mehr unabhängig voneinander beschreiben, wie im Bell-State-Beispiel. Liegt das Control-Qubit dagegen in einem eindeutigen Basiszustand vor, bewirkt CNOT nur eine bedingte Bitumkehr ohne Verschränkung. Nicht jedes CNOT erzeugt also automatisch Verschränkung.

CZ: das symmetrische Verwandte des CNOT

Das CZ-Gate cz(a, b) kehrt das Vorzeichen der Amplitude genau dann um, wenn beide Qubits |1⟩sind. Anders als beim CNOT gibt es kein Control- und kein Target-Qubit – das Gatter wirkt auf beide Qubits identisch, weshalb es im Diagramm als zwei verbundene Punkte gezeichnet wird. CZ und CNOT lassen sich ineinander umwandeln: Ein CNOT ist ein CZ, dessen Target-Qubit vorher und nachher durch ein Hadamard-Gate geschickt wird. CZ ist ein zentraler Baustein vieler Algorithmen, etwa der Grover-Suche.

GHZ-Zustand: Verschränkung im Trio

Der GHZ-Zustand (nach Greenberger, Horne und Zeilinger) erweitert das Bell-State-Prinzip auf drei Qubits: Ein Hadamard-Gate plus zwei CNOTs verschränken alle drei so, dass die Messung nur noch |000⟩ oder |111⟩ liefert – niemals gemischte Bitketten. Kein Qubit hat mehr einen eigenen Zustand; die Information steckt ausschließlich in der gemeinsamen Korrelation.

Deutsch-Algorithmus: der kleinste Quantenvorteil

Der Deutsch-Algorithmus beantwortet mit einer einzigen Auswertung eines unbekannten Orakels eine Frage, für die ein klassischer Computer zwei Auswertungen braucht: Ist die Funktion konstant oder balanciert? Der Trick ist, die Eingabe in Superposition durch das Orakel zu schicken – die Antwort steht danach dank Interferenz eindeutig im Eingabe-Qubit. Das Prinzip dahinter (Phase-Kickback) ist der Kern fast aller Quantenalgorithmen.

Grover-Suche: Amplituden verstärken

Die Grover-Suche findet einen markierten Eintrag in einer unsortierten Menge mit deutlich weniger Anfragen als klassisch nötig. Ein Orakel markiert den gesuchten Zustand mit einem Phasenflip (hier per CZ-Gate), anschließend verstärkt der Diffusions-Operator die markierte Amplitude auf Kosten aller anderen. Bei 2 Qubits genügt eine einzige Iteration, um den Treffer mit 100 % Wahrscheinlichkeit zu messen.

Reversible Addition: von quantum.add() zum Schaltkreis

Der Programm-Code-Editor oben übersetzt quantum.add({ a, b }) in einen Schaltkreis aus X-, CNOT- und CCNOT-Gattern (Toffoli), der klassische Addition rein reversibel nachbildet: Jedes Gatter lässt sich exakt rückgängig machen, weil keine Information verworfen wird. Ein CCNOT-Gate (ccnot(c1, c2, target)) kippt das Target-Qubit nur, wenn beide Control-Qubits |1⟩ sind – das reicht als Baustein aus, um jede klassische Schaltung reversibel nachzubauen, auch einen Volladdierer mit Übertrag. Die Eingaben A und B werden dafür zunächst per X-Gattern als eindeutige Basiszustände (keine Superposition) initialisiert. Weil der gesamte Schaltkreis dadurch nur eindeutige Zustände durchläuft statt Überlagerungen, liefert die Messung am Ende mit 100 % Wahrscheinlichkeit genau ein Ergebnis – die klassisch korrekte Summe. Das ist der Grund, warum quantum.add() trotz Quanten-Simulation ein deterministisches Ergebnis liefert, statt mehrere mögliche Zustände mit Wahrscheinlichkeiten unter 100 %.

Subtraktion: die Addition rückwärts

Weil jedes Gatter eines Quanten-Schaltkreises exakt umkehrbar ist, lässt sich der komplette Addier-Schaltkreis rückwärts ausführen – und aus der Addition wird eine Subtraktion: quantum.subtract({ a, b }) nutzt exakt die Gatter des Addierers in umgekehrter Reihenfolge und rechnet damit a − b. Das ist keine Spielerei, sondern das Grundprinzip reversibler Berechnung: Kein Rechenschritt vernichtet Information, jeder lässt sich rückgängig machen. In dieser Version ist a ≥ b vorausgesetzt, damit kein negatives Ergebnis entsteht.

Multiplikation: quantum.multiply()

Multiplikation entsteht hier aus genau denselben reversiblen Bausteinen wie die Addition: Nach der Schulmethode wird der Faktor a – passend zu den gesetzten Bits des Faktors b – mehrfach verschoben aufaddiert. Jede Teiladdition ist derselbe reversible Ripple-Carry-Addierer; der Übertrag läuft jeweils ins nächste Produktbit. Weil das Ergebnisregister mit dem Produkt mitwächst, sind die Faktoren auf 3 Bit (0–7) begrenzt – nur so passen Faktor, Produkt und Übertrags-Qubit gemeinsam in die 10 Qubits dieses Simulators.

Division: quantum.divide()

Auch Division nutzt nur reversible Bausteine: quantum.divide({ a, b }) rechnet eine Langdivision aus verschobenen, reversiblen Subtraktionen des Divisors vom Rest-Register; das Ergebnis ist der Quotient und der Rest (a = quotient · b + remainder). Weil Dividend, Divisor, Quotient und ein Borrow-Qubit gemeinsam in die 10 Qubits passen müssen, ist Division die am strengsten begrenzte Operation: Es muss bits(a) + bits(b) + bits(a÷b) + 1 ≤ 10 gelten, und der Divisor b muss ≥ 1 sein (keine Division durch 0). Passt eine Eingabe nicht ins Budget, meldet der Editor das statt zu rechnen.

Echter Zufall: quantum.random()

Klassische Computer können keinen echten Zufall erzeugen – ihre „Zufallszahlen“ stammen aus deterministischen Algorithmen (Pseudozufall). Ein Quantencomputer schon: quantum.random({ bits }) versetzt jedes Bit per Hadamard-Gate in eine 50/50-Superposition, und erst die Messung entscheidet – fundamental unvorhersagbar –, welcher Wert herauskommt. Auf echter Quantenhardware ist das physikalisch echter Zufall; dieser Simulator ahmt ihn mit dem Pseudozufall deines Browsers nach.

Simulator vs. echte Quantenhardware

Dieser Simulator berechnet den Zustand exakt mit klassischer Gleitkomma-Arithmetik im Browser – das funktioniert nur, weil hier ausschließlich sehr kleine Schaltkreise mit bis zu 10 Qubits betrachtet werden. Echte Quantencomputer nutzen physikalische Qubits, sind fehleranfällig (Dekohärenz, Rauschen) und ihr Vorteil zeigt sich erst bei sehr viel größeren, praktisch nicht mehr klassisch simulierbaren Schaltkreisen. Dieses Tool ist ein Lernwerkzeug, kein echter Quantenprozessor.

Häufige Fragen

Ist das ein echter Quantencomputer?
Nein. Dieses Tool ist ein klassischer State-Vector-Simulator, der die Mathematik eines kleinen Quanten-Schaltkreises (bis 10 Qubits) exakt mit Gleitkomma-Arithmetik im Browser nachrechnet. Echte Quantenhardware nutzt physikalische Qubits und funktioniert grundlegend anders.
Welches Qubit ist q0 in einem Bitstring wie "10"?
q0 ist immer das höchstwertige (linke) Bit. Bei 2 Qubits erzeugt x(0) also den Zustand |10⟩, nicht |01⟩.
Was bedeuten "Shots"?
Shots ist die Anzahl simulierter Wiederholungsmessungen (1–10.000). Jeder Shot zieht zufällig ein Messergebnis entsprechend der exakten Wahrscheinlichkeitsverteilung des Zustandsvektors. Die exakten Wahrscheinlichkeiten selbst hängen nicht vom Zufall ab und werden separat angezeigt.
Warum wird bei manchen Beispielen eine Fehlermeldung angezeigt?
Der MVP-Umfang erlaubt genau einen Schaltkreis mit genau einem run()-Aufruf nach measureAll(). Ungültige Qubit-Indizes, Gatter nach measureAll(), ungültige Winkel oder Shot-Zahlen sowie Syntaxfehler im Code werden mit einer verständlichen deutschen Fehlermeldung abgelehnt.
Was bewirken Hadamard-, X- und CNOT-Gates?
X vertauscht |0⟩ und |1⟩. Hadamard erzeugt aus einem Basiszustand eine gleich gewichtete Superposition. CNOT kippt das Ziel-Qubit nur dann, wenn das Kontroll-Qubit |1⟩ ist, und kann zusammen mit Superposition Verschränkung erzeugen.
Wie entsteht Verschränkung?
Ein Beispiel ist ein Hadamard-Gate auf dem ersten Qubit gefolgt von CNOT auf ein zweites. Danach lassen sich die Qubits nicht mehr unabhängig beschreiben; gemessen werden korrelierte Ergebnisse wie |00⟩ oder |11⟩.