The panel's I–V curve is generated from the explicit single-diode approximation (Voc, Isc, and the maximum-power point Vmp, Imp fully determine it — no iterative solving needed):
I(V) = Isc·[1 − C1·(e^(V/(C2·Voc)) − 1)]
C2 = (Vmp/Voc − 1) / ln(1 − Imp/Isc)
C1 = (1 − Imp/Isc)·e^(−Vmp/(C2·Voc))
P(V) = V·I(V)
Irradiance G scales the short-circuit current roughly linearly and nudges Voc by a logarithmic term; temperature T shifts Voc down and Isc slightly up per °C above 25 °C — both standard datasheet coefficients:
Isc(G,T) = Isc0·(G/G0)·(1 + βI·(T−25))
Voc(G,T) = [Voc0 + Vt·ln(G/G0)]·(1 + βV·(T−25))
The controller never knows where the true peak is. Every control tick it perturbs the operating voltage by ΔV, checks whether power rose or fell since the last tick, and keeps stepping the same direction if power rose — reverses if it fell. This is the perturb-and-observe (P&O) algorithm used in real inverters. It converges near the peak and then oscillates forever around it (visible in the marker's jitter); a larger ΔV tracks faster but hunts wider, a smaller ΔV settles tighter but reacts slower when a cloud passes — the classic MPPT speed/ripple tradeoff.
- Irradiance / temperature sliders — reshape the P–V curve live; the ribbon behind the marker is the last ~8 seconds of curves, so you can watch the peak migrate.
- Cloud transient — a one-shot sharp drop and recovery in G, showing how far the tracker falls behind before re-converging.
- Auto weather — irradiance drifts continuously, keeping the controller perpetually chasing.
- Fixed voltage mode — clamps Vop at the panel's rated Vmp instead of tracking, so you can compare the energy left on the table without MPPT.