Safeguard
Supply Chain Security•

Schrödinger Equation Explained: Wave Functions, Tunnelling, Transistors

The Schrödinger equation says how a quantum wave function changes in time. Worked examples, tunnelling in flash and transistors, and Python you can run.

Safeguard Security Team
48 min read

The Schrödinger equation is the rule that tells you how a quantum system's wave function changes over time, given its energy. Solve it for an electron in a small space and only certain energies are allowed, which is why atoms have sharp spectral lines. Solve it at a thin barrier and the electron has a small chance of passing straight through, which is how flash memory stores bits and why transistor gates leak.

This post goes one level deeper than our famous equations overview. It covers both forms of the equation, what a wave function is, three worked examples with real numbers (a particle in a box, the hydrogen atom and a tunnel barrier), how tunnelling shows up in flash memory and transistors, how the equation drives qubits, the open interpretation debate, and Python code you can run to solve it yourself. Every constant comes from NIST's CODATA 2022 tables and every spectral line from the NIST Atomic Spectra Database.

Key takeaways

  • The time-dependent equation, iħ ∂ψ/∂t = Ĥψ, says the Hamiltonian (the energy operator) drives how the wave function ψ evolves. It is deterministic and linear.
  • The time-independent form, Ĥψ = Eψ, is an eigenvalue problem. Schrödinger's first 1926 paper in Annalen der Physik was titled "Quantisierung als Eigenwertproblem", quantisation as an eigenvalue problem.
  • The wave function itself is not observed. Max Born's 1926 rule says its squared magnitude, |ψ|², gives the probability of finding the particle at a place. Born's 1954 Nobel Prize cites "his statistical interpretation of the wavefunction".
  • Confinement makes energy discrete. An electron in a 1 nm box has a lowest energy of 0.376 eV. Halve the box and the energy goes up four times.
  • Hydrogen's energy levels, −13.6 eV divided by n², reproduce the measured lines to a few hundredths of a nanometre once you correct for the proton's finite mass.
  • Tunnelling probability falls off exponentially with barrier width. For a 1 eV electron and a 2 eV barrier, going from 1 nm to 2 nm cuts transmission about 28,000 times.
  • Flash memory programs and erases cells by Fowler-Nordheim tunnelling through a thin oxide. Transistor gate oxides got so thin that tunnelling leakage forced the move to high-k dielectrics, which Intel says cut NMOS gate leakage by more than 25 times and PMOS by more than 1,000 times.
  • Quantum gates are controlled runs of the same equation: a timed pulse sets the Hamiltonian, and the state evolves by a unitary operator.
  • Physicists agree on the predictions. They do not agree on what happens in a measurement, which is still an open research question.

A dated timeline: from wave mechanics to tunnelling chips

Each date below is taken from the publisher's record (via Crossref), the Nobel Prize site or the organisation's own page.

DateEventSource
1926Schrödinger publishes "Quantisierung als Eigenwertproblem" in four parts in Annalen der Physik (volume 384, pages 361 to 376 and 489 to 527; volume 385, pages 437 to 490; volume 386, pages 109 to 139). The fourth part introduces the time-dependent equation.Wiley DOI records via Crossref
1926Max Born, "Zur Quantenmechanik der Stoßvorgänge", Zeitschrift für Physik 37, pages 863 to 867, proposes the probability reading of the wave functionSpringer DOI record via Crossref
1 December 1926Schrödinger's English summary, "An Undulatory Theory of the Mechanics of Atoms and Molecules", Physical Review 28, page 1049APS journal page
March 1928George Gamow explains alpha decay as tunnelling out of the nucleus, Zeitschrift für Physik 51, pages 204 to 212Springer DOI record via Crossref
1 May 1928Fowler and Nordheim, "Electron emission in intense electric fields", Proceedings of the Royal Society A 119, pages 173 to 181Royal Society DOI record via Crossref
1933Nobel Prize in Physics to Schrödinger and Dirac "for the discovery of new productive forms of atomic theory"; Schrödinger's lecture is dated 12 December 1933nobelprize.org
1952David Bohm rediscovers de Broglie's 1927 pilot wave theoryStanford Encyclopedia of Philosophy
1954Nobel Prize in Physics, half to Max Born for the statistical interpretation of the wave functionnobelprize.org
1957Hugh Everett's relative state paper, the origin of the many worlds interpretationStanford Encyclopedia of Philosophy
15 January 1958Leo Esaki, "New Phenomenon in Narrow Germanium p-n Junctions", Physical Review 109, page 603: the tunnel diodeAPS DOI record via Crossref
July 1967Kahng and Sze, "A Floating Gate and Its Application to Memory Devices", Bell System Technical Journal 46, pages 1288 to 1295Wiley DOI record via Crossref
1973Nobel Prize in Physics to Esaki and Giaever for tunnelling in semiconductors and superconductors, and to Josephson for the Josephson effectsnobelprize.org
1984Toshiba (now Kioxia) names "flash" memory and announces it, by the company's own accountKioxia technology history
1984 and 1985Clarke, Devoret and Martinis show tunnelling and quantised energy levels in a superconducting circuitnobelprize.org 2025 press release
1986Ghirardi, Rimini and Weber publish the GRW spontaneous collapse modelStanford Encyclopedia of Philosophy
1987NAND flash memory invented, by Kioxia's own accountKioxia technology history
200745 nm logic process with high-k dielectric and metal gate presented at IEDM 2007Intel high-k and metal gate research page
7 October 2025Nobel Prize in Physics to Clarke, Devoret and Martinis "for the discovery of macroscopic quantum mechanical tunnelling and energy quantisation in an electric circuit"nobelprize.org

What does the Schrödinger equation say?

The time-dependent equation

For one particle of mass m moving in a potential energy V, the equation reads:

iħ ∂ψ(x, t)/∂t = −(ħ²/2m) ∂²ψ(x, t)/∂x² + V(x) ψ(x, t)

or, compactly:   iħ ∂ψ/∂t = Ĥψ,   with   Ĥ = −(ħ²/2m) ∂²/∂x² + V(x)

Read it left to right. The left side is how fast the wave function changes in time. The right side is the Hamiltonian operator acting on the wave function: a kinetic energy part, which measures how sharply ψ curves in space, plus a potential energy part, which weights ψ by the potential energy at each point.

SymbolMeaningValue or unit
ψ(x, t)The wave function, a complex number at each point and timeIn one dimension, units of 1 over the square root of a metre
iThe imaginary unit, the square root of −1Dimensionless
ħReduced Planck constant, h divided by 2π1.054 571 817 × 10⁻³⁴ J s, exact (CODATA 2022)
mParticle mass; for an electron9.109 383 7139 × 10⁻³¹ kg (CODATA 2022)
V(x)Potential energy as a function of positionJoules or electronvolts
ĤHamiltonian: the total energy operatorJoules

Three properties do most of the work in practice:

  1. It is first order in time. Know ψ everywhere at one moment and the equation fixes it for all later moments. Between measurements, quantum mechanics is deterministic.
  2. It is linear. If ψ₁ and ψ₂ are solutions, so is any combination aψ₁ + bψ₂. That is the superposition principle, and it is why interference and qubits work.
  3. It conserves total probability. Because Ĥ is Hermitian (its energies are real), the integral of |ψ|² over all space stays at exactly 1 as time runs. Numerical methods that break this, as we will see, give nonsense.

In three dimensions the second derivative becomes the Laplacian ∇², and for many particles ψ depends on every particle's coordinates at once. That last point is the source of the computational difficulty in chemistry: the wave function of N electrons lives in 3N dimensions.

The time-independent equation

Many problems have a potential that does not change with time. Then you can look for solutions that separate into a space part and a time part:

ψ(x, t) = φ(x) · exp(−iEt/ħ)

Substituting gives the time-independent equation:

−(ħ²/2m) d²φ/dx² + V(x) φ(x) = E φ(x),   or   Ĥφ = Eφ

This is an eigenvalue equation: find the functions φ that the Hamiltonian only rescales, and the numbers E it rescales them by. Those φ are the stationary states, and the E values are the allowed energies. The time factor exp(−iEt/ħ) just rotates the phase, so |ψ|² does not change: a stationary state really is stationary in everything you can measure.

Any other state is a superposition of stationary states, each turning at its own rate. When two of them with energies E₁ and E₂ are mixed, the probability density sloshes back and forth at the frequency (E₂ − E₁)/h. That beat is exactly what an atom emits or absorbs as light, and it is what a qubit control pulse drives.

Schrödinger's own route in 1926 went through this eigenvalue form first, which is why the first paper's title translates as "quantisation as an eigenvalue problem". The integers that Bohr had to postulate in his earlier model of the atom come out instead as the condition that a physically sensible solution exists.

What is a wave function, and what does the Born rule say?

A wave function is the complete mathematical description of a quantum system's state. For a single particle in one dimension it assigns a complex number ψ(x) to every position. You cannot measure ψ directly, and its overall phase has no physical meaning at all. What you can measure is built from it.

The Born rule

In 1926 Max Born proposed that the squared magnitude of the wave function is a probability density:

P(particle found between a and b) = ∫ from a to b of |ψ(x)|² dx

Normalisation: ∫ over all space of |ψ(x)|² dx = 1

The Nobel committee's 1954 citation for Born names exactly this, "his statistical interpretation of the wavefunction". The rule has three consequences people often miss:

  • Probability, not a smeared particle. Measure an electron's position and you get one sharp answer. Repeat the identical preparation many times and the answers pile up in the shape of |ψ|².
  • Amplitudes add before squaring. If two paths lead to the same detector, their ψ values add as complex numbers and then you square. That is where interference comes from, and why probabilities in quantum mechanics do not simply add.
  • Normalisation is a constraint, not a decoration. A solution of the equation that cannot be normalised, for example one that grows without limit, is not an allowed state. This single condition is what turns continuous equations into discrete energy levels.

What the generalised rule says

The same rule extends to any measurement. Write the state as a sum of the measured quantity's eigenstates, ψ = Σ cₙ φₙ, and the probability of getting the n-th outcome is |cₙ|². For energy, the φₙ are the stationary states from the time-independent equation. For a qubit measured in its computational basis, they are the states 0 and 1. The coefficients must satisfy Σ |cₙ|² = 1.

How to picture ψ without fooling yourself

A useful working picture is an ocean swell where the height of the wave is not water but "how likely you are to find the particle here", with a phase that decides how two swells interfere. Where the picture fails: for two or more particles, ψ is not a wave in ordinary space at all, but a function on the joint configuration of every particle. That is the root of entanglement, covered in our entanglement explainer.

Worked example 1: the particle in a box

The simplest bound system is a particle trapped between two perfectly hard walls a distance L apart. Inside, V = 0; at the walls, V is infinite, so ψ must be zero there.

Solving it

Inside the box the time-independent equation is −(ħ²/2m) φ″ = Eφ, whose solutions are sines and cosines. The boundary condition φ(0) = 0 rules out the cosine. The condition φ(L) = 0 then forces the sine to fit a whole number of half wavelengths in the box:

φₙ(x) = √(2/L) · sin(nπx/L),      n = 1, 2, 3, ...

Eₙ = n² π² ħ² / (2 m L²) = n² · E₁

That is the whole story of quantisation in one line: the wave must fit, so only some wavelengths are allowed, so only some energies are allowed. There is no n = 0 state, because sin(0) is zero everywhere and cannot be normalised. The lowest energy is never zero. That leftover energy is called zero-point energy, and it is a direct consequence of confining a wave.

The numbers for an electron

Using ħ and the electron mass from CODATA 2022:

Box width LE₁E₂E₃Photon for 2 to 1 jump
0.5 nm1.504 eV6.017 eV13.537 eV4.512 eV, 274.8 nm (ultraviolet)
1 nm0.376 eV1.504 eV3.384 eV1.128 eV, 1,099 nm (near infrared)
10 nm0.0038 eV0.0150 eV0.0338 eV0.0113 eV, about 110 µm (far infrared)

Two patterns jump out. Energies scale as n², so the gaps widen as you go up. And energies scale as 1/L², so halving the box quadruples every level. At room temperature the thermal energy scale is about 0.025 eV, so a 10 nm box has levels closer together than thermal jostling and behaves almost classically, while a 1 nm box does not. That is the length scale where chip features now sit, and why semiconductor engineers cannot ignore this equation.

The same 1/L² scaling is why the colour of a semiconductor quantum dot depends on its size: a smaller dot pushes the levels apart and the emitted light moves toward blue. Real dots are finite wells in a crystal, not ideal boxes, so the numbers shift, but the scaling survives.

A Born rule check

What is the chance of finding a ground state electron in the middle half of the box, between L/4 and 3L/4? Integrating (2/L) sin²(πx/L) over that range gives exactly 1/2 + 1/π, which is 0.8183. A classical ball bouncing at constant speed would spend exactly half its time there. The quantum ground state is bunched toward the middle, and the code later in this post reproduces 0.818 numerically.

Worked example 2: the hydrogen atom and why spectra are discrete

Hydrogen is one electron bound to one proton by the Coulomb attraction, V(r) = −e²/(4πε₀r). It is the only atom whose Schrödinger equation has an exact closed form solution, and it was the test the theory had to pass in 1926.

What the solution looks like

In three dimensions with a spherically symmetric potential, the equation separates in spherical coordinates. The angular part gives the familiar orbital shapes with quantum numbers l (0, 1, 2 ... for s, p, d ...) and m. The radial part only has normalisable solutions when a whole number n, the principal quantum number, satisfies n ≥ l + 1. The allowed energies depend only on n:

Eₙ = −R_∞hc · μ/mₑ / n²

R_∞hc = 13.605 693 122 990 eV           (Rydberg energy, CODATA 2022)
mₚ/mₑ = 1836.152 673 426                (proton to electron mass ratio, CODATA 2022)
μ/mₑ  = 1 / (1 + mₑ/mₚ) = 0.999 455 68   (reduced mass correction for hydrogen)

E₁ = −13.598 eV,   E₂ = −3.400 eV,   E₃ = −1.511 eV,   E₄ = −0.850 eV

The reduced mass term is there because the proton is not infinitely heavy: electron and proton orbit their shared centre of mass. Leave it out and every predicted line comes out about 0.05 percent too short, a few tenths of a nanometre in the visible, which a spectrometer sees immediately.

Why the spectrum is a set of lines

Light is emitted when the electron drops from level n to a lower level m, and the photon carries away exactly the difference: E = Eₙ − Eₘ, wavelength λ = hc/E. Because the levels are discrete, so are the photon energies. A hot hydrogen lamp seen through a prism shows a few sharp coloured lines, not a rainbow. The levels are discrete for the same reason as in the box: only certain energies produce a wave function that dies away far from the nucleus and can be normalised.

The numbers against NIST

The table compares the prediction from the formula above with the observed wavelengths listed in the NIST Atomic Spectra Database for neutral hydrogen (H I). NIST lists ultraviolet lines in vacuum and visible lines in air. Air slows light by about 0.03 percent, so a visible line's air wavelength is about 0.18 nm shorter than its vacuum wavelength.

LineTransitionPredicted energyPredicted vacuum λNIST observed λ
Lyman alpha2 to 110.1987 eV121.57 nm121.567 nm (vacuum)
Lyman beta3 to 112.0874 eV102.57 nm102.573 nm (vacuum)
H-alpha (red)3 to 21.8887 eV656.47 nm656.28 nm (air)
H-beta (blue-green)4 to 22.5497 eV486.27 nm486.13 nm (air)
H-gamma (violet)5 to 22.8556 eV434.17 nm434.05 nm (air)
H-delta (violet)6 to 23.0218 eV410.29 nm410.17 nm (air)

Divide the predicted vacuum H-alpha value, 656.47 nm, by the refractive index of air (about 1.00028) and you get 656.29 nm, within a hundredth of a nanometre of NIST's figure. That is a simple nonrelativistic equation, two measured constants and no fitted parameters.

What the simple solution leaves out

NIST's database actually lists several components under each line, split by tiny amounts. That fine structure comes from relativity and electron spin, which the Schrödinger equation does not include. The Dirac equation, the other half of the 1933 Nobel Prize, accounts for most of it. Smaller shifts still, such as the Lamb shift, need quantum electrodynamics. The Schrödinger equation is the right tool for chemistry and electronics because those corrections are tiny at the energies involved, not because it is the final word.

Worked example 3: putting numbers on tunnelling

Classically, a ball with 1 eV of energy cannot cross a 2 eV hill. Quantum mechanically, inside the barrier the solution of the Schrödinger equation is not zero but a decaying exponential, exp(−κx), with:

κ = √(2m(V₀ − E)) / ħ

For a barrier of height V₀ and width a, when κa is large:
T ≈ 16 (E/V₀)(1 − E/V₀) · exp(−2κa)

Exact result for a rectangular barrier:
T = 1 / (1 + V₀² sinh²(κa) / (4E(V₀ − E)))

If the exponential has not died away by the far side of the barrier, the wave continues there as a travelling wave, smaller than before. The squared ratio of amplitudes is the transmission probability T.

For an electron with 1 eV of kinetic energy:

Barrier height V₀Width aκExact Texp(−2κa) alone
2 eV0.5 nm5.12 per nm2.4 × 10⁻²6.0 × 10⁻³
2 eV1 nm5.12 per nm1.4 × 10⁻⁴3.5 × 10⁻⁵
2 eV2 nm5.12 per nm5.0 × 10⁻⁹1.3 × 10⁻⁹
4 eV1 nm8.87 per nm5.9 × 10⁻⁸2.0 × 10⁻⁸
4 eV2 nm8.87 per nm1.2 × 10⁻¹⁵3.8 × 10⁻¹⁶

The lesson for engineers is in the shape of the numbers, not the exact values. Doubling the width from 1 nm to 2 nm cuts transmission by a factor of about 28,000. Raising the barrier from 2 eV to 4 eV at 1 nm cuts it by about 2,400. Tunnelling is negligible at 10 nm and dominant at 1 nm, and the transition happens over just a few atomic layers.

Mass matters even more. Run the same 1 eV particle at a 2 eV, 1 nm barrier with the mass of a proton instead of an electron and exp(−2κa) is about 10⁻¹⁹¹. That is why electrons tunnel in everyday devices while atoms almost never do, and why tunnelling is an electronic engineering problem first.

What is quantum tunnelling, and where does it show up in real hardware?

Quantum tunnelling is a particle crossing a region where its energy is lower than the potential energy, something a classical particle can never do. It follows directly from the Schrödinger equation: the wave function decays inside the barrier but does not vanish, so a thin enough barrier lets some of it through. Nothing is "borrowed" and energy is conserved: the particle comes out the other side with the energy it went in with.

PhenomenonWhat tunnelsBarrierWhere you meet it
Alpha decay (Gamow, 1928)Alpha particleNuclear Coulomb barrierSmoke detectors, radioactive dating
Field emission (Fowler and Nordheim, 1928)ElectronsSurface barrier thinned by a strong fieldElectron microscope sources, flash memory program and erase
Tunnel diode (Esaki, 1958)ElectronsVery thin p-n junctionHigh frequency circuits; part of the 1973 Nobel Prize
Josephson junctionPaired electrons in a superconductorThin insulator between superconductorsSuperconducting qubits, precision voltage standards
Flash memory cellElectronsTunnel oxide around a floating gate or charge trapUSB drives, SSDs, phones
Gate oxide leakageElectronsTransistor gate insulator a few atoms thickStandby power in every modern chip
Scanning tunnelling microscopeElectronsVacuum gap between tip and surfaceImaging single atoms

Alpha decay and field emission: the first tests

Two 1928 papers showed tunnelling was real. Gamow's paper in Zeitschrift für Physik explained why heavy nuclei emit alpha particles at energies too low to climb over the nuclear barrier, and why half lives vary so hugely: the exponential in T turns small differences in energy into enormous differences in rate. Fowler and Nordheim's paper in the Proceedings of the Royal Society explained why a strong electric field pulls electrons out of a cold metal. The field tilts the barrier at the surface into a thin triangle that electrons tunnel through. Their name is now attached to that mechanism, Fowler-Nordheim tunnelling, which is exactly what flash memory uses.

How tunnelling writes and erases flash memory

The floating gate idea comes from Kahng and Sze's 1967 paper in the Bell System Technical Journal. Described generically, a flash cell is a transistor with an extra, electrically isolated conductor (the floating gate) or a charge trapping layer buried in the insulator between the control gate and the channel.

  • Program. A high voltage on the control gate, many times the chip's normal supply voltage, creates a strong field across the thin tunnel oxide. Electrons tunnel from the channel into the floating gate by Fowler-Nordheim tunnelling and stay there.
  • Store. With the voltage removed, the oxide is a few nanometres thick and the barrier is several electronvolts high. Following the table above, the tunnelling rate is so small that charge stays put for years. That is non-volatility.
  • Read. Trapped electrons raise the voltage needed to switch the transistor on. Sensing that threshold voltage reads the bit, or several bits when the cell stores several charge levels.
  • Erase. Reverse the field and electrons tunnel back out. Kioxia, formerly Toshiba's memory business, says the "flash" name of 1984 came from the ability to erase large blocks at once, and that it invented NAND flash in 1987.

The design lives on the exponential. The oxide must be thin enough that a programming field drives a useful tunnelling current in microseconds, and thick enough that with no field the leak takes years. Every program and erase cycle also pushes energetic electrons through the oxide, and over many cycles that stress creates traps and damage. This is the physical root of flash endurance limits, and the reason SSD controllers spread writes across cells with wear levelling.

That last point has a security edge. Because a controller remaps writes to spread wear, overwriting a file from the operating system does not reliably overwrite the physical cells that held it. Sanitising a flash device therefore relies on the device's own sanitize or cryptographic erase commands rather than a file overwrite, and NIST SP 800-88 Rev. 2 sets out how to build a media sanitisation program around techniques like these.

Why transistor gates leak

A MOSFET switches by putting a voltage on a gate separated from the channel by a thin insulator. For decades that insulator was silicon dioxide, and each process shrink made it thinner, because a thinner insulator gives the gate stronger control of the channel.

Intel's high-k and metal gate research page explains where that ran out: gate oxides had reached about five atomic layers, and "the thinner the gate, the larger the tunneling current and the higher the leakage power." Tunnelling current through the gate flows even when the transistor is off, so it wastes power on every idle transistor in a chip.

The fix was a material change rather than a geometric one. A high-k (high dielectric constant) material such as a hafnium-based oxide gives the same electrical control at a greater physical thickness, and from the tunnelling table you know that a little more thickness means a lot less leakage. Intel's page says its hafnium-based dielectric with metal gate electrodes reduced NMOS gate leakage by more than 25 times and PMOS gate leakage by more than 1,000 times, and dates the 45 nm process paper to IEDM 2007.

Gate leakage is not the only tunnelling problem in small transistors. As the distance between source and drain shrinks toward a few nanometres, electrons can tunnel directly along the channel, under a gate that is meant to be blocking them. This is one of the reasons transistor architects moved from planar transistors to fins and then to gate-all-around designs, which wrap the gate around the channel for better control. Treat that as the general direction of the industry rather than a specific process claim; each manufacturer documents its own nodes.

Tunnelling you can use on purpose

Tunnelling is a nuisance in a logic gate and the working principle elsewhere. Esaki's 1958 tunnel diode used a junction so thin that electrons tunnel straight across it, producing a region of negative resistance useful in fast oscillators. Josephson junctions, two superconductors separated by a thin insulator, are the core of today's superconducting qubits. The 2025 Nobel Prize in Physics went to John Clarke, Michel Devoret and John Martinis for showing, in 1984 and 1985 experiments on such a circuit, that a whole electrical circuit could tunnel out of a trapped state and absorb or emit only specific amounts of energy, just as the Schrödinger equation predicts for a single particle.

How does the Schrödinger equation relate to qubits and quantum gates?

A qubit is a quantum system where you deliberately use only two energy levels, called 0 and 1. Its state is a superposition, a|0⟩ + b|1⟩, with |a|² + |b|² = 1, which is the Born rule applied to a two level system. Our quantum computing explainer covers the hardware; here is how the equation drives it.

A gate is the equation run for a set time

With a constant Hamiltonian, the solution of the time-dependent equation is a single operator acting on the starting state:

ψ(t) = U(t) ψ(0),    with    U(t) = exp(−iĤt/ħ)

U is unitary: it preserves total probability, which is the matrix form of the conservation property above. A quantum gate is exactly such a U, produced by switching on a chosen Hamiltonian for a chosen time. In a superconducting qubit that means a microwave pulse at the frequency matching the gap between the two levels, E₁ − E₀ = hf. While the pulse is on, the state rotates steadily between |0⟩ and |1⟩, an effect called a Rabi oscillation. Stop the pulse halfway and you have turned |0⟩ into an equal superposition. Stop it at the full swing and you have a NOT gate.

Two qubit gates and entanglement

For two qubits the wave function has four amplitudes, for 00, 01, 10 and 11. A Hamiltonian that couples the qubits for a set time produces a gate such as controlled NOT. Applied to the right starting state, it produces a state that cannot be written as one qubit's state times the other's: entanglement. For n qubits the state has 2ⁿ amplitudes, which is why simulating a quantum computer on a classical one gets out of hand around a few dozen qubits.

Measurement and noise

Reading a qubit applies the Born rule: you get 0 with probability |a|² and 1 with probability |b|². Real qubits also leak their phase into the environment, called decoherence, which is the Schrödinger equation applied to the qubit plus everything it touches. Quantum error correction exists to fight that. For the security side, which is where most readers meet qubits, see our post on post-quantum cryptography migration.

What are the interpretations, and what is still debated?

Every working physicist uses the same equation and the same Born rule, and they agree on every prediction tested so far. What they do not agree on is what the wave function is and what happens when a measurement gives one definite outcome. That gap is called the measurement problem.

The measurement problem in one paragraph

The Schrödinger equation is linear and deterministic. Apply it to a measuring device interacting with a qubit in superposition, and it predicts that the device itself ends up in a superposition of "read 0" and "read 1". Yet every experiment ever done shows one result. Textbook quantum mechanics adds a separate rule, collapse, saying the state jumps to the observed outcome. The equation never produces that jump, and the textbook rule does not say exactly when it applies or what counts as a measurement. The Stanford Encyclopedia of Philosophy's entry on philosophical issues in quantum theory sets out the problem and the families of response.

The main approaches compared

ApproachWhat ψ isWhat happens at measurementChanges the equation?Key source
Copenhagen family (Bohr, Heisenberg, Born)A tool for predicting outcomes of experimentsClassical description of the apparatus is required; outcomes are not explained furtherNoCopenhagen entry; Bohr and Heisenberg never fully agreed
Many worlds (Everett, 1957)A real physical state of the whole universeNo collapse; every outcome happens in its own branchNoMany worlds entry
Bohmian mechanics (de Broglie 1927, Bohm 1952)A real guiding field; particles also have definite positionsParticles have one actual position all along; the guiding equation picks the outcomeAdds a second equationBohmian mechanics entry
Spontaneous collapse (GRW, 1986)A real stateCollapse is a physical process that happens at random, very rarely per particle but quickly for large objectsYes, adds a small random termCollapse theories entry
Information based views (for example QBism)An agent's information or expectationsUpdating information, not a physical jumpNoPhilosophical issues entry

What decoherence does and does not settle

Decoherence is not an interpretation. It is the Schrödinger equation applied to a system and its environment, and it explains why interference between macroscopic alternatives becomes impossible to observe in practice, almost instantly. It explains why the world looks classical. It does not, on its own, explain why one outcome occurs rather than another, which is why the approaches above still disagree.

Is any of it testable?

Partly. Collapse models predict tiny deviations from the Schrödinger equation for large objects, such as extra heating or loss of interference in very massive superpositions, and experiments keep narrowing the allowed parameter range. Many worlds and Bohmian mechanics reproduce standard predictions by design, so the argument there is about simplicity and coherence rather than experiment. The honest summary is that the measurement problem is open, and none of the practical results in this post depend on how it is resolved.

How do you solve the Schrödinger equation numerically?

Only a handful of potentials, the box, the harmonic oscillator, hydrogen and a few others, have exact solutions. Everything else, from a real quantum dot to a transistor channel, is solved numerically. The standard approach for one dimensional problems is to put ψ on a grid and turn the second derivative into a finite difference, which turns the equation into a matrix problem.

Which method fits which problem

MethodSolvesIdeaStrengthsWatch out for
Finite difference eigenvalueTime-independent, bound statesSecond derivative becomes a tridiagonal matrix; diagonalise itSimple, exact up to grid error, all levels at onceGrid must resolve the shortest wavelength; walls must be far enough
Shooting methodTime-independent, one level at a timeIntegrate from one side, adjust E until the far boundary condition is metLow memory, intuitiveUnstable in forbidden regions; easy to miss levels
Crank-NicolsonTime-dependentAverage of forward and backward steps; unitaryConserves probability exactly; stable for any time stepNeeds a linear solve per step
Split-step FourierTime-dependentAlternate kinetic steps in momentum space and potential steps in real space with FFTsFast on large gridsAssumes periodic boundaries; needs absorbing edges
Transfer matrixTransmission through layered barriersMatch plane waves across each layerNatural for tunnelling stacksNumerical overflow for thick barriers

Step by step: solve it yourself in Python

The scripts below run as written with Python 3 and NumPy. They were run with NumPy 2.0.2 for this post, and the output shown is what they printed.

1. Create an isolated environment and pin your dependency

Scientific code is software, and the same supply chain habits apply. Pin the version you tested with so a future install does not change your results silently.

python3 -m venv .venv
source .venv/bin/activate
python -m pip install "numpy==2.0.2"
python -m pip freeze > requirements.txt

2. The particle in a box, by finite differences

On a grid with spacing dx, the second derivative at point j is (ψⱼ₊₁ − 2ψⱼ + ψⱼ₋₁)/dx². Putting that into the Hamiltonian gives a tridiagonal matrix whose eigenvalues are the energies.

# box.py: particle in a box by finite differences, checked against the exact formula.
import numpy as np

HBAR = 1.054_571_817e-34      # J s, exact (CODATA 2022)
M_E = 9.109_383_7139e-31      # kg (CODATA 2022)
EV = 1.602_176_634e-19        # J, exact

L = 1e-9                      # box width: 1 nm
N = 2000                      # interior grid points
dx = L / (N + 1)

# H = -(hbar^2 / 2m) d^2/dx^2 on the interior points, psi = 0 at the walls.
t = HBAR**2 / (2 * M_E * dx**2)
main = np.full(N, 2 * t)
off = np.full(N - 1, -t)
H = np.diag(main) + np.diag(off, 1) + np.diag(off, -1)

E, psi = np.linalg.eigh(H)

for n in range(1, 5):
    exact = (n**2 * np.pi**2 * HBAR**2) / (2 * M_E * L**2)
    print(f"n={n}  numeric={E[n-1]/EV:.6f} eV  exact={exact/EV:.6f} eV  "
          f"rel.err={(E[n-1]-exact)/exact:.1e}")

# Born rule check: normalise the ground state and integrate |psi|^2.
p = psi[:, 0] / np.sqrt(np.sum(psi[:, 0]**2) * dx)
x = np.linspace(dx, L - dx, N)
inside = (x > 0.25 * L) & (x < 0.75 * L)
print("P(total) =", round(np.sum(p**2) * dx, 6))
print("P(middle half) =", round(np.sum(p[inside]**2) * dx, 4))

Output:

n=1  numeric=0.376030 eV  exact=0.376030 eV  rel.err=-2.1e-07
n=2  numeric=1.504119 eV  exact=1.504121 eV  rel.err=-8.2e-07
n=3  numeric=3.384265 eV  exact=3.384271 eV  rel.err=-1.8e-06
n=4  numeric=6.016463 eV  exact=6.016483 eV  rel.err=-3.3e-06
P(total) = 1.0
P(middle half) = 0.8181

Notice the error grows with n. Higher states have shorter wavelengths, so the same grid resolves them less well. The middle half probability matches the exact 0.8183 to three places, with the last digit set by the grid.

For large grids, a dense matrix wastes memory. SciPy's scipy.linalg.eigh_tridiagonal takes just the diagonal and off diagonal arrays and can return only the lowest few eigenvalues, which is what you want for a grid of tens of thousands of points.

3. Hydrogen's lines from the energy formula

# hydrogen.py: hydrogen lines from the energy levels, with the reduced-mass correction.
H = 6.626_070_15e-34          # J s, exact
C = 299_792_458               # m/s, exact
EV = 1.602_176_634e-19        # J, exact
RY_EV = 13.605_693_122_990    # Rydberg energy in eV (CODATA 2022, infinite nuclear mass)
ME_OVER_MP = 1 / 1836.152_673_426   # electron to proton mass ratio (CODATA 2022)

ry_h = RY_EV / (1 + ME_OVER_MP)     # reduced-mass correction for hydrogen

def level(n):
    return -ry_h / n**2              # eV

for upper, lower, name in [(2, 1, "Lyman alpha"), (3, 1, "Lyman beta"),
                           (3, 2, "H-alpha"), (4, 2, "H-beta"),
                           (5, 2, "H-gamma"), (6, 2, "H-delta")]:
    dE = level(upper) - level(lower)
    lam_vac = H * C / (dE * EV) * 1e9
    print(f"{name:12s} n={upper}->{lower}  dE={dE:.4f} eV  vacuum wavelength={lam_vac:.2f} nm")

Output:

Lyman alpha  n=2->1  dE=10.1987 eV  vacuum wavelength=121.57 nm
Lyman beta   n=3->1  dE=12.0874 eV  vacuum wavelength=102.57 nm
H-alpha      n=3->2  dE=1.8887 eV  vacuum wavelength=656.47 nm
H-beta       n=4->2  dE=2.5497 eV  vacuum wavelength=486.27 nm
H-gamma      n=5->2  dE=2.8556 eV  vacuum wavelength=434.17 nm
H-delta      n=6->2  dE=3.0218 eV  vacuum wavelength=410.29 nm

Delete the (1 + ME_OVER_MP) correction and rerun: Lyman alpha moves to 121.50 nm, well away from NIST's 121.567 nm. One line of physics is visible in the third significant figure.

4. The time-dependent equation: a wave packet hitting a barrier

The time-dependent equation needs a time stepping scheme. The obvious one, stepping ψ forward by dt times its derivative, does not conserve probability and blows up. Crank-Nicolson averages the forward and backward steps, which makes each step unitary.

# packet.py: a wave packet hitting a thin barrier, by Crank-Nicolson.
import numpy as np

HBAR, M_E, EV = 1.054_571_817e-34, 9.109_383_7139e-31, 1.602_176_634e-19
NM, FS = 1e-9, 1e-15

x = np.linspace(-60 * NM, 60 * NM, 3000)
dx = x[1] - x[0]
dt = 0.05 * FS

# Barrier: 2 eV high, 1 nm wide, centred at x = 0.
V = np.where(np.abs(x) < 0.5 * NM, 2.0 * EV, 0.0)

# Gaussian packet with mean kinetic energy 1 eV, starting at x = -20 nm.
E0 = 1.0 * EV
k0 = np.sqrt(2 * M_E * E0) / HBAR
sigma = 4 * NM
psi = np.exp(-((x + 20 * NM) ** 2) / (4 * sigma**2) + 1j * k0 * x)
psi /= np.sqrt(np.sum(np.abs(psi) ** 2) * dx)

# Hamiltonian as a matrix (finite differences, psi = 0 at the edges).
t = HBAR**2 / (2 * M_E * dx**2)
Hm = np.diag(2 * t + V) - t * np.eye(len(x), k=1) - t * np.eye(len(x), k=-1)
I = np.eye(len(x))
A = I + 1j * dt / (2 * HBAR) * Hm
B = I - 1j * dt / (2 * HBAR) * Hm
U = np.linalg.solve(A, B)          # one Crank-Nicolson step

for step in range(1600):           # 1,600 steps of 0.05 fs = 80 fs
    psi = U @ psi

prob = np.abs(psi) ** 2 * dx
print(f"total probability  = {prob.sum():.6f}")
print(f"transmitted (x>0.5 nm) = {prob[x > 0.5 * NM].sum():.2e}")
print(f"reflected (x<-0.5 nm)  = {prob[x < -0.5 * NM].sum():.4f}")

Output:

total probability  = 1.000000
transmitted (x>0.5 nm) = 2.20e-04
reflected (x<-0.5 nm)  = 0.9998

Total probability stays at 1 to six places after 1,600 steps, which is the unitarity check passing. The transmitted fraction, 2.2 × 10⁻⁴, is a little higher than the single energy result of 1.4 × 10⁻⁴ from worked example 3. That is expected: a packet localised to a few nanometres contains a spread of energies, and its higher energy components tunnel far more easily, which shifts the average up. An electron at 1 eV moves at about 0.59 nm per femtosecond, so in 80 fs the packet has reached the barrier and the reflected part has cleared it.

On some NumPy builds for macOS the matrix product can print spurious floating point warnings while giving correct results. If you see them, run with python -W ignore packet.py after checking that the total probability still prints as 1.

5. Check your answers before trusting them

  • Converge the grid. Halve dx and rerun. If the energies or transmission change in a digit you care about, the grid was too coarse.
  • Move the walls. For a free particle or a bound state with soft edges, make the domain larger and confirm nothing changes. Hard walls too close to a packet reflect it artificially.
  • Watch the units. Work in SI with exact constants, or in atomic units throughout, never a mix. A missing factor of 2π between h and ħ moves every answer by more than six times.
  • Check against an exact case. Before solving a real device, reproduce the box or the harmonic oscillator with the same code.
  • Rerun after upgrading. When you update NumPy or SciPy, rerun these checks. Numerical libraries change defaults and algorithms between versions.

Where Safeguard fits, honestly

Safeguard does not do physics. No Safeguard model computed or checked anything in this post; Safeguard's models are single purpose security models, and every number here came from the scripts above and NIST's published constants.

The connection is the software around the physics. Simulation codes, device modelling tools and lab notebooks are built from open source numerical libraries, notebook servers and container base images, and those carry known vulnerabilities and license obligations that drift between versions. Safeguard can scan a repository, a container image or an SBOM file (for example safeguard scan --dir . or safeguard scan --image <name> from the CLI), match the components against vulnerability databases, show which projects carry a given package version, and open fix pull requests when you switch remediation on. It will not tell you whether your energy levels are right; your convergence checks do that.

Common mistakes

  • Treating ψ as the particle's density of stuff. It is a probability amplitude. The particle is detected in one place; |ψ|² tells you how often each place comes up.
  • Adding probabilities instead of amplitudes. When two paths lead to the same outcome, add the complex ψ values first, then square. Adding probabilities removes interference and gets double slit and qubit results wrong.
  • Forgetting normalisation. An unnormalised solution gives probabilities that do not add up to 1, and a solution that cannot be normalised is not a physical state at all.
  • Mixing h and ħ. ħ = h/2π. The box energies use ħ; photon wavelengths use h. Confusing them puts results off by a factor of about 6.28 or its square.
  • Comparing vacuum and air wavelengths. NIST lists visible lines in air. A correct vacuum calculation will look wrong by about 0.18 nm in the red if you forget this.
  • Ignoring reduced mass. Treating the proton as infinitely heavy shifts hydrogen lines by about 0.05 percent, enough to fail a comparison with measurement.
  • Thinking tunnelling scales linearly with thickness. It is exponential. A little thinner is a lot more leakage, which is the whole story of gate oxides.
  • Saying the particle "borrows energy" to tunnel. Energy is conserved. The wave function simply does not vanish inside a finite barrier.
  • Using explicit Euler time steps. They do not conserve probability and diverge. Use Crank-Nicolson or split-step methods, and check that total probability stays at 1.
  • Calling decoherence a solution to the measurement problem. It explains why interference disappears in practice, not why one outcome occurs.
  • Assuming the equation is the final word. It is nonrelativistic. Fine structure needs the Dirac equation; the Lamb shift needs quantum electrodynamics.

FAQ

What is the Schrödinger equation in simple terms?

It is the rule that says how a quantum system's wave function changes over time, given the system's energy. Solving it tells you the allowed energies of a system and the probability of finding a particle in each place.

What is the difference between the time-dependent and time-independent Schrödinger equation?

The time-dependent form, iħ ∂ψ/∂t = Ĥψ, describes how any state evolves. The time-independent form, Ĥψ = Eψ, finds the stationary states and allowed energies when the potential does not change with time. Any state is a combination of stationary states.

What does the wave function actually represent?

It is a complex amplitude whose squared magnitude gives a probability density, by the Born rule of 1926. What it represents physically beyond that, a real wave, information or something else, depends on the interpretation and is still debated.

Why are atomic energy levels discrete?

A bound electron's wave function has to stay finite and die away far from the nucleus. Only certain energies allow that, so only those energies exist. Light emitted between those levels therefore comes in sharp lines.

What is quantum tunnelling in simple terms?

It is a particle crossing a barrier it does not have enough energy to climb. Its wave function decays inside the barrier but is not zero at the far side, so there is a small chance of finding it beyond. The chance falls exponentially with barrier width and with the square root of the particle's mass.

Does flash memory use quantum tunnelling?

Yes. Flash cells program and erase by Fowler-Nordheim tunnelling of electrons through a thin oxide into and out of a floating gate or charge trap. With no field applied the tunnelling rate is tiny, which is why the data stays for years.

Why does quantum tunnelling limit how small transistors can get?

When a gate insulator is only a few atoms thick, electrons tunnel through it even when the transistor is off, wasting power. High-k gate materials were introduced to make the insulator physically thicker for the same electrical effect. Direct tunnelling between source and drain is another limit at very short channel lengths.

Is the Schrödinger equation used in quantum computers?

Yes. Every quantum gate is the Schrödinger equation run for a controlled time under a chosen Hamiltonian, which produces a unitary operation on the qubits. Measurement of the result follows the Born rule.

Did Schrödinger's cat come from the Schrödinger equation?

The cat is a 1935 thought experiment by Schrödinger that applies the linear equation to a macroscopic object to show how odd the measurement problem looks. It is an argument about interpretation, not a separate equation.

Can I solve the Schrödinger equation on my laptop?

Yes, for one dimensional problems and small systems. The finite difference and Crank-Nicolson scripts in this post run in seconds with NumPy. Many electron problems grow exponentially and need approximations such as density functional theory.

Fix it without waiting for upstream

The physics above does not change with a software update, but the code you use to compute it does: NumPy, SciPy, notebook servers and the container images behind a simulation cluster all ship as open source components with their own vulnerabilities and release schedules. That is the indirect but real part of this topic where supply chain hygiene matters, and it is what the section below covers.

Whatever the vulnerability, most of the risk sits in two gaps. The first is the time between a fix being published and that fix actually running in your production builds. The second, and worse, is the time before any fix exists at all, while a maintainer works out a patch and a release schedule. Waiting through both gaps is a habit, not a requirement. Safeguard gives teams three ways to close them.

1. Autonomous remediation: pull requests, not tickets

When a fixed version exists, Safeguard's Griffin models open a tested, policy gated pull request that moves the affected dependency to the safe version. You can run it on one repository or in bulk across every project that carries the vulnerable version. Remediation covers eight categories, including dependencies, licenses, security posture and findings. Reachability analysis ranks the vulnerable code paths your application actually calls first, so the first pull requests you merge are the ones that matter most. Autonomous remediation ships switched off, with every category set to Manual, so your team decides how much runs on its own and what still needs a human approval.

2. Gold Open Source: the safe version in seconds, free

gold.safeguard.sh is free and needs no login. Search any CVE or package to see affected and fixed versions, CVSS, EPSS, CISA KEV status and a recommended safe version, or use the "Am I affected?" checker. The same data is available through a free read API, README status badges and RSS threat feeds. The safeguard-sh/gold-scan-action GitHub Action can fail a build on a known exploited vulnerability, on any known vulnerability, or never, so a version you have just removed cannot quietly come back in next week's merge.

3. Gold Registry: start from components that are already fixed

registry.safeguard.sh provides hardened, drop in replacements for upstream packages and container images. Every Gold artifact is held continuously to zero exploitable critical or high CVEs, zero malware and a completed license check, with SLSA L3 or higher provenance, a Sigstore signature and a public evidence page you can hand to an auditor. An artifact loses its Gold badge if it regresses. Teams can point their own package directory at the registry so hardened equivalents resolve without changing how developers install anything.

When upstream has no fix yet, or will not ship one, Safeguard first works to get the fix accepted upstream. If the issue is severe or upstream will not move, Safeguard builds a fork, fixes the vulnerability there and publishes a hardened Gold build, so you are not stuck on a maintainer's release schedule. You can also request a hardened, compatibility tested build of a specific package. This fork and patch flow is in early access today, so ask which packages it covers before you plan around it.

Your situationWhat to use
A fixed version existsAutonomous remediation opens the upgrade pull request; Gold Open Source confirms the safe version
You need to know today whether you are affectedGold Open Source lookup and "Am I affected?" checker, free and without login
You want vulnerable versions to stop shippingThe Gold scan GitHub Action in CI, plus Safeguard policies and gates
Upstream has no fix yet, or will not ship oneA custom Gold request; fork and patch (early access)
You want to start clean on new projectsPull hardened components and images from Gold Registry

One honest limit: when the vulnerable code lives in a vendor appliance, a hosted service or an operating system runtime you do not build yourself, the fix still has to come from that vendor or distribution. The steps above apply to the open source dependencies and container images you build and ship, which is where most teams carry the largest and least tracked share of their exposure.

To try it on your own machine, download Safeguard from https://safeguard.sh/download and see the CLI documentation at https://docs.safeguard.sh/docs/cli .

See how Safeguard would help

The first demo sets up Safeguard's local runner on your own machine, approves it with its device code, and then runs a scan from the terminal. Pointed at a repository of simulation or analysis code like the scripts above, the same flow lists the open source packages it depends on and their versions. It does not check the physics.

Click through it at your own pace, or open it full screen.

The second demo is a real Safeguard CLI session: asked to fix a lodash CVE, it reads the finding and advisory, asks before each command, edits package.json to lodash 4.17.21, runs npm install and npm test with approval, prints a summary and pushes nothing. The same approve each step flow applies when a numerical Python project needs a dependency upgrade, and rerunning convergence checks like the ones in step 5 after the upgrade is how you catch a changed result.

Click through it at your own pace, or open it full screen.

The third demo connects Claude to the Safeguard MCP server with OAuth and lets you choose which tools Claude can use. That lets you ask an assistant which of your research or engineering projects carry a given package version, while you keep control of what it can touch.

Click through it at your own pace, or open it full screen.

Quick check

An electron's ground state energy in a 2 nm box is about 0.094 eV. What is it in a 1 nm box, and why?

About 0.376 eV, four times higher. The energy scales as 1/L², so halving the width quadruples every level. Confinement forces a shorter wavelength, and a shorter wavelength means more kinetic energy.

A 1 eV electron meets a 2 eV barrier. Roughly how much does doubling the barrier width from 1 nm to 2 nm change the tunnelling probability?

It drops by a factor of about 28,000, from about 1.4 × 10⁻⁴ to about 5 × 10⁻⁹. Tunnelling falls exponentially with width, which is why a few extra atomic layers in a gate oxide make such a large difference to leakage.

Sources

Last reviewed: 24 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.