ToolDingo

Kwantumcomputer Simulator

Schrijf een klein quantumcircuit in JavaScript, simuleer het direct in je browser en bekijk het circuitschema, de waarschijnlijkheden en de toestandsvector. Of beschrijf een berekening op hoog niveau (bijvoorbeeld optellen) en kijk hoe deze automatisch wordt omgezet in een echte, terugdraaibare quantumcircuit.

Ruis Model

Echte quantumcomputers berekenen niet perfect: qubits zijn uiterst gevoelig en verliezen een deel van hun informatie (decoherentie) door elke ongewenste interactie met hun omgeving – warmte, elektromagnetische velden, naburige qubits. Poortbewerkingen zijn ook nooit perfect precies, en zelfs de uiteindelijke uitlezing kan fout gaan. Deze simulator berekent standaard ideaal; hier kun je typische foutmodellen inschakelen en direct het effect in de resultaten observeren.

Dit geldt voor elke simulatie op deze pagina – zowel voor hoogwaardige runs als voor handmatig geschreven circuits.
%
Per poort en betrokken qubit, of per uitgelezen bit voor het uitleesmodel. Kies een waarde voor het scenario dat je wilt onderzoeken.

Programmacode

Beschrijf een berekening met quantum.add, quantum.subtract, quantum.multiply, quantum.divide of quantum.random. Ctrl+Enter start de simulatie. Volledige documentatie via de knop “Documentatie”.

Documentatie

Beschrijf een berekening in de editor – er wordt automatisch een echt quantumcircuit gegenereerd en gesimuleerd. Maximaal 4000 tekens. Ctrl+Enter start de simulatie.

FormuleBeschrijvingLimieten
quantum.add({ a, b })Twee getallen optellenResultaat max. 4 bits (0–15)
quantum.subtract({ a, b })Aftrekkena ≥ b, max. 4 bits
quantum.multiply({ a, b })VermenigvuldigenFactoren 0–7 (3 bits)
quantum.divide({ a, b })Delen (quotiënt + rest)b ≥ 1; erg strak: bits(a)+bits(b)+bits(a÷b)+1 ≤ 10
quantum.random({ bits })Echt quantum willekeurig getalbits 1–10

Voorbeeld kiezen

Circuitcode

Maximaal 4000 tekens. Beschikbare QuantumCircuit methoden: x, y, z, h, s, sdg, t, tdg, rx, ry, rz, cnot, cz, ccnot (alias: toffoli), swap, measureAll, run. Ctrl+Enter start de simulatie.

Kies een voorbeeld

Basics: Hoe werkt het?

Schematische quantum computer setup: een besturingscomputer stuurt verschillende laserstralen over een optische tafel naar een qubit in een vacuümkamer.
Van de klassieke besturingscomputer via lasers en optiek naar het fysieke qubit.

Van programma naar fysiek qubit

Een echte quantum computer is meer dan een chip. Klassieke besturingselektronica vertalen het circuit in precieze pulsen. In het getoonde voorbeeld vormen koeling, repump-, qubit- en readoutlasers deze signalen op een optische tafel en sturen ze naar een afgeschermde vacuümkamer. Daar veranderen en meten ze de qubittoestand; het meetresultaat keert dan terug naar de klassieke computer.

Qubit & basistoestanden

Een klassiek bit is ofwel 0 ofwel 1. Een qubit kan daarnaast bestaan in een superpositie van de twee basis toestanden. |0⟩ en |1⟩. Met meerdere qubits worden alle basistoestanden als een bitstring weergegeven, bijvoorbeeld |10⟩ voor 2 qubits – waarbij q0 in deze simulator altijd het meest significante (linkse) bit is.

Superpositie

Een qubit in superpositie draagt gelijktijdig componenten van meerdere basistoestanden. Deze componenten worden beschreven als complexe amplitudes; het kwadraat van de grootte van een amplitude geeft de kans om bij een meting de corresponderende toestand te verkrijgen.

De Bloch sfeer

De toestand van een enkele qubit kan worden gevisualiseerd als een pijl in een bol: de noordpool vertegenwoordigt |0⟩, de zuidpool |1⟩, en alle punten op de evenaar zijn gelijkmatig gewogen superposities – de fase bepaalt de richting langs de evenaar waarin de pijl wijst. De rotatiepoorten rx, ryen rz roteren de pijl rond de respectievelijke as, fasepoorten zoals S en T roteren hem rond de Z-as. Met verstrengelde qubits krimpt de pijl richting het midden van de bol: de individuele qubit heeft dan niet langer een zuivere toestand van zijn eigen – dus verstrengeling wordt letterlijk zichtbaar.

Meting & shots

measureAll() meet alle qubits tegelijkertijd en beëindigt de circuit. Omdat een enkele meting slechts één willekeurig resultaat oplevert, wordt het circuit conceptueel "shots" keer gemeten run({ shots }), zodat de kansverdeling zichtbaar wordt als een histogram. De exacte waarschijnlijkheden worden bovendien direct berekend uit de toestandsvector, onafhankelijk van de willekeurigheid van de shots.

Hadamard poort

De Hadamard poort h(q) brengt een qubit van een zekere toestand (|0⟩ of |1⟩) in een gelijkmatig gewogen superpositie van |0⟩ en |1⟩ – zo ongeveer 50% / 50% bij meting.

Fasepoorten: S en T

De poorten s(q) en t(q) veranderen de meetwaarschijnlijkheden van een enkele qubit niet; ze draaien slechts de |1⟩ amplitude – S met 90°, T met 45°. Ze laten hun effect alleen zien in combinatie met superpositie: tussen twee Hadamard poorten bepaalt de fase hoe amplitudes zich combineren of opheffen (interferentie). De dagger varianten sdg(q) en tdg(q) roteren precies in de tegenovergestelde richting en heffen S en T op. De regel is: twee T maken een S, twee S maken een Z.

CNOT & conditionele verstrengeling

De CNOT poort cnot(control, target) keert de target qubit om precies wanneer de control qubit in toestand |1⟩. Als de control qubit voorafgaandelijk in superpositie staat, kan dit verstrengeling creëren – de twee qubits kunnen dan niet langer onafhankelijk van elkaar worden beschreven, zoals in het Bell-toestands voorbeeld. Als de control qubit in een zekere basistoestand staat, voert CNOT slechts een conditionele bit flip uit zonder verstrengeling. Dus niet elke CNOT creëert automatisch verstrengeling.

CZ: de symmetrische variant van CNOT

De CZ poort cz(a, b) keert het teken van de amplitude om precies wanneer beide qubits in |1⟩In tegenstelling tot CNOT, zijn er geen controle- en doelqubit – de poort werkt identiek op beide qubits, wat verklaart waarom deze in het diagram wordt weergegeven als twee verbonden puntjes. CZ en CNOT kunnen in elkaar worden omgezet: een CNOT is een CZ waarvan de doelqubit door een Hadamard-poort gaat vóór en na. CZ is een centraal bouwblok van veel algoritmen, zoals de Grover-zoekopdracht.

GHZ-toestand: entanglement als een trio

De GHZ-toestand (genoemd naar Greenberger, Horne en Zeilinger) breidt het Bell-toestand principe uit naar drie qubits: één Hadamard-poort plus twee CNOT's entangelen alle drie zodat meting slechts oplevert |000⟩ of |111⟩ – nooit gemengde bitreeksen. Geen qubit heeft meer een eigen toestand; de informatie ligt uitsluitend in de gedeelde correlatie.

Deutsch-algoritme: het kleinste kwantumvoordeel

Het Deutsch-algoritme beantwoordt, met slechts één evaluatie van een onbekende oracle, een vraag waarvoor een klassieke computer twee evaluaties nodig heeft: is de functie constant of gebalanceerd? De truc is om de input door de oracle in superpositie te sturen – dankzij interferentie wordt het antwoord daarna ondubbelzinnig gecodeerd in de input-qubit. Het principe erachter (fasekickback) staat centraal in bijna alle kwantumalgoritmen.

Grover-zoekopdracht: amplitudes versterken

De Grover-zoekopdracht vindt een gemarkeerd item in een ongeordende set met aanzienlijk minder queries dan klassiek vereist. Een oracle markeert de gezochte toestand met een faseflip (hier via een CZ-poort), waarna de diffusieoperator de gemarkeerde amplitude versterkt ten koste van alle anderen. Met 2 qubits is één iteratie voldoende om de hit met 100% kans te meten.

Reversibele optelling: van quantum.add() naar een circuit

De programmacode-editor hierboven vertaalt quantum.add({ a, b }) in een circuit van X-, CNOT- en CCNOT-poorten (Toffoli) dat klassieke optelling op een puur reversibele manier reproduceert: elke poort kan precies worden teruggedraaid, omdat er geen informatie wordt weggegooid. Een CCNOT-poort (ccnot(c1, c2, target)) |1⟩ flipt de doelqubit alleen wanneer beide controlequbits zijn – dat is voldoende als bouwsteen om elk klassiek circuit reversibel te reconstrueren, inclusief een volledige opteller met carry. De inputs A en B worden eerst geïnitialiseerd als definitieve basis toestanden (geen superpositie) met behulp van X-poorten. Omdat het gehele circuit daardoor slechts doorloopt via definitieve toestanden in plaats van superposities, levert de meting aan het einde precies één resultaat op met 100% kans – de klassiek correcte som. Dat is waarom quantum.add() een deterministisch resultaat oplevert ondanks de kwantumsimulatie, in plaats van verschillende mogelijke toestanden met waarschijnlijkheden onder de 100%.

Aftrekken: optelling omgekeerd

Omdat elke poort van een kwantumcircuit precies invertibel is, kan het gehele opteller circuit achterwaarts worden uitgevoerd – en de optelling wordt een aftrekking: quantum.subtract({ a, b }) gebruikt exact dezelfde poorten als de opteller in omgekeerde volgorde en berekent zo a − b. Dit is geen trucje, maar het basisprincipe van reversibele berekening: elke stap vernietigt geen informatie, elke stap kan worden teruggedraaid. In deze versie is a ≥ b vereist zodat er geen negatief resultaat ontstaat.

Vermenigvuldigen: quantum.multiply()

Vermenigvuldiging komt hier voort uit exact dezelfde reversibele bouwstenen als optelling: volgend de methode van de basisschool, wordt factor a herhaaldelijk opgeteld in verschoven posities – passend bij de aangezette bits van factor b. Elke partiële optelling is dezelfde reversibele ripple-carry opteller; de carry stroomt telkens door naar het volgende product bit. Omdat het resultaat register groeit met het product, zijn de factoren hier beperkt tot 3 bits (0–7) – alleen dan passen factor, product en carry qubit samen in deze simulator's 10 qubits.

Delen: quantum.divide()

Delen gebruikt ook slechts reversibele bouwstenen: quantum.divide({ a, b }) voert lange deling uit opgebouwd uit verschoven, reversibele aftrekkingen van de deler van het restregister; het resultaat is het quotiënt en de resta = quotient · b + remainder). Omdat deeltal, deler en quotiënt en een leenqubit samen binnen de 10 qubits moeten passen, is deling de sterkst beperkte bewerking: bits(a) + bits(b) + bits(a÷b) + 1 ≤ 10 moet gelden, en de deler b moet ≥ 1 zijn (geen deling door nul). Als een invoer niet binnen het budget past, meldt de editor dit in plaats van te berekenen.

Echte willekeur: quantum.random()

Klassieke computers kunnen geen echte willekeur genereren: hun 'willekeurige getallen' komen uit deterministische algoritmen (pseudowillekeur). Een kwantumcomputer kan: quantum.random({ bits }) elk bit met een Hadamard-poort in een 50/50-superpositie plaatsen, waarna alleen de meting – fundamenteel onvoorspelbaar – de uitkomst bepaalt. Op echte kwantumhardware is dit fysieke willekeur; deze simulator bootst die na met de pseudowillekeur van je browser.

Simulator tegenover echte kwantumhardware

Deze simulator berekent de toestand exact met klassieke drijvende-kommaberekeningen in je browser. Dat werkt alleen omdat hier uitsluitend zeer kleine circuits met maximaal 10 qubits worden gebruikt. Echte kwantumcomputers gebruiken fysieke qubits, zijn foutgevoelig door decoherentie en ruis, en bieden pas voordeel bij veel grotere circuits die klassiek niet meer praktisch te simuleren zijn. Dit is een leermiddel, geen echte kwantumprocessor.

Veelgestelde vragen

Is dit een echte kwantumcomputer?
Nee. Dit gereedschap is een klassieke state-vector simulator die de wiskunde van een klein kwantumcircuit (tot 10 qubits) exact berekent, met behulp van floating-point rekenkunde in je browser. Echte kwantumhardware gebruikt fysieke qubits en werkt fundamenteel anders.
Wat betekent q0 in een bitstring zoals "10"?
q0 is altijd het meest significante (linker) bit. Met 2 qubits creëert x(0) dus de toestand |10⟩, niet |01⟩.
Wat betekenen "shots"?
Shots is het aantal gesimuleerde herhaalde metingen (1–10.000). Elke shot trekt willekeurig een meetresultaat naar gelang de exacte kansverdeling van de toestandsvector. De exacte waarschijnlijkheden zelf zijn niet afhankelijk van toeval en worden apart weergegeven.
Waarom laten sommige voorbeelden een foutmelding zien?
De MVP scope staat slechts één circuit met precies één run() aanroep na measureAll() toe. Ongeldige qubit indices, gates na measureAll(), ongeldige hoeken of shot aantallen en syntaxfouten in de code worden afgewezen met een begrijpelijke foutmelding.
Wat doen Hadamard-, X- en CNOT-gates?
X wisselt |0⟩ en |1⟩ om. Hadamard verandert een basis toestand in een evenredig gewogen superpositie. CNOT draait zijn target alleen als de controle |1⟩ is en kan verstrengeling creëren wanneer het wordt gecombineerd met superpositie.
Hoe wordt verstrengeling gecreëerd?
Eén voorbeeld past Hadamard toe op de eerste qubit en vervolgens CNOT toe op een tweede. De qubits kunnen niet langer onafhankelijk worden beschreven, en meting produceert gecorreleerde uitkomsten zoals |00⟩ of |11⟩.