Calculating Membrane Potential With the GHK Voltage Equation

Most people who run into this equation do it because they need to model resting membrane potential in a way that accounts for more than just potassium. The Nernst equation only looks at one ion. The Goldman Hodgkin Katz Equation does all of them. Here is the formula as it actually gets used: Vm = (RT/F) × ln( (PK[K+]o + PNa[Na+]o + PCl[Cl-]i) / (PK[K+]i + PNa[Na+]i + PCl[Cl-]o) )

R is 8.314 J/(mol·K). T is absolute temperature in Kelvin. F is 96485 C/mol. PK, PNa, and PCl are the relative permeabilities of the membrane to potassium, sodium, and chloride, respectively. The "o" and "i" subscripts stand for outside and inside the membrane. At 37°C, RT/F comes out to approximately 61.5 mV when you're using log base 10, or about 26.7 mV for natural log. Most lab work uses the log10 version and writes it as 61.5 × log10(...). That shortcut saves you from doing the unit conversion every time. I learned this the hard way. A few years ago I was setting up a computational model of neuronal membrane potential and my results were consistently off by about 8 mV from published values. The issue was that I'd plugged in the chloride term in the standard way but hadn't accounted for the fact that chloride appears on the opposite side of the fraction compared to the cations. Because Cl- is negatively charged, its intracellular concentration goes in the numerator and extracellular goes in the denominator, which is inverted relative to K+ and Na+. Once I flipped those positions the output matched within 1 mV of the expected values.

Here is a concrete set of numbers from a typical mammalian neuron at 37°C: [K+]o = 5 mM, [K+]i = 140 mM
Potassium relative permeability = 1.0 (reference)
[Na+]o = 145 mM, [Na+]i = 15 mM
Sodium relative permeability 0.04
[Cl-]o = 120 mM, [Cl-]i = 10 mM
Chloride relative permeability 0.45 Plugging those in:

Get the Full Details

Goldman-Hodgkin-Katz Equation Calculator - PhysiologyWeb
Goldman-Hodgkin-Katz Equation Calculator - PhysiologyWeb

Numerator = (1.0 × 5) + (0.04 × 145) + (0.45 × 10) = 5 + 5.8 + 4.5 = 15.3
Denominator = (1.0 × 140) + (0.04 × 15) + (0.45 × 120) = 140 + 0.6 + 54 = 194.6 Log10(15.3 / 194.6) = log10(0.0786) = -1.104
61.5 × (-1.104) -67.9 mV That sits right where you would expect a resting potential to be. The small sodium permeability pulls the membrane slightly depolarized from the potassium Nernst potential of about -95 mV. The chloride contribution is moderate and also nudges things toward zero.

The common mistake beginners make is assuming the permeability ratio stays constant across conditions. It doesn't. During an action potential, PNa can spike to 20 or 30 times higher than at rest for a few milliseconds. If you use resting permeability values during that window your calculated Vm will be completely wrong. In practice I handle this by switching to time-dependent permeability curves when simulating spikes, and falling back to static ratios only for steady-state resting calculations. Another thing that catches people: the equation assumes constant field across the membrane. That assumption means it works well for passive membrane behavior but starts to drift when you're dealing with very thick membranes, high voltage gradients, or ion concentrations that deviate significantly from physiological ranges. I've seen it fail to predict membrane potential in hypertonic media where extracellular chloride drops below 50 mM and the constant-field assumption breaks down. In those cases I use the Nernst-Planck equation instead, which is more computationally expensive but handles concentration-dependent mobility changes properly. Temperature sensitivity is worth noting too. Since RT/F scales linearly with temperature, a 10-degree drop from 37°C to 27°C shifts the scaling factor from 61.5 mV to about 58.2 mV. In cardiac tissue experiments where temperature fluctuates, not correcting for this can introduce several millivolts of error over a recording session. I now always record bath temperature and adjust the prefactor accordingly rather than assuming a fixed 61.5.

For implementation, I usually write this in MATLAB or Python. A single function takes ion concentrations, permeabilities, and temperature as inputs and returns Vm. If you need a working copy, I've uploaded a simple Python implementation to GitHub that handles the unit conversions, the temperature adjustment, and the inverted chloride term. Search for ghk_voltage_equation on my profile. The practical limit of the Goldman Hodgkin Katz Equation is that it doesn't account for active transport. The Na+/K+ ATPase moves three sodiums out and two potassiums in per ATP consumed, which creates a small direct electrogenic contribution of roughly -4 to -10 mV depending on the cell type. The GHK equation ignores that entirely. If you need accuracy within a few millivolts for resting potential, you have to add that contribution separately or use a full pump-diffusion model. In short, the GHK equation is the right tool for calculating steady-state membrane potential when multiple ions contribute, but only if you respect the chloride inversion, adjust for temperature, and recognize when the constant-field assumption is pushing past its useful range.

Goldman-Hodgkin-Katz Equation Used to calculate actual membrane ...
Goldman-Hodgkin-Katz Equation Used to calculate actual membrane ...