MAX_POWER_POINT

This function finds the point on a photovoltaic IV curve where electrical power is maximized for a given set of single-diode model coefficients. It is a focused alternative to singlediode when only the maximum-power operating point is needed.

The objective is to maximize electrical power along the curve:

P = I V

The function returns the current, voltage, and power at the maximum power point as [i_{mp}, v_{mp}, p_{mp}]. Optional thin-film parameters can be provided to account for recombination effects in CdTe and amorphous-silicon models.

Excel Usage

=MAX_POWER_POINT(photocurrent, saturation_current, resistance_series, resistance_shunt, nNsVth, d_mu_tau, ns_vbi, mpp_solver)
  • photocurrent (float, required): Photo-generated current (A).
  • saturation_current (float, required): Diode reverse saturation current (A).
  • resistance_series (float, required): Series resistance (ohms).
  • resistance_shunt (float, required): Shunt resistance (ohms).
  • nNsVth (float, required): Product of ideality factor, cells in series, and thermal voltage (V).
  • d_mu_tau (float, optional, default: 0): PVsyst recombination parameter for thin-film modules (V).
  • ns_vbi (float, optional, default: 1000000): PVsyst builtin voltage parameter for thin-film modules (V).
  • mpp_solver (str, optional, default: “brentq”): Numerical solver method.

Returns (list[list]): 2D list [[i_mp, v_mp, p_mp]], or an error string.

Example 1: Standard MPP calculation

Inputs:

photocurrent saturation_current resistance_series resistance_shunt nNsVth mpp_solver
5.5 2e-10 0.5 300 1.5 brentq

Excel formula:

=MAX_POWER_POINT(5.5, 2e-10, 0.5, 300, 1.5, "brentq")

Expected output:

Result
5.11038 29.057 148.492
Example 2: Standard MPP using Newton solver

Inputs:

photocurrent saturation_current resistance_series resistance_shunt nNsVth mpp_solver
5.5 2e-10 0.5 300 1.5 newton

Excel formula:

=MAX_POWER_POINT(5.5, 2e-10, 0.5, 300, 1.5, "newton")

Expected output:

Result
5.11038 29.057 148.492
Example 3: Higher series resistance lowers power

Inputs:

photocurrent saturation_current resistance_series resistance_shunt nNsVth mpp_solver
5.5 2e-10 0.9 300 1.5 brentq

Excel formula:

=MAX_POWER_POINT(5.5, 2e-10, 0.9, 300, 1.5, "brentq")

Expected output:

Result
5.06449 27.2753 138.135
Example 4: Lower shunt resistance case

Inputs:

photocurrent saturation_current resistance_series resistance_shunt nNsVth mpp_solver
5.5 2e-10 0.5 150 1.5 brentq

Excel formula:

=MAX_POWER_POINT(5.5, 2e-10, 0.5, 150, 1.5, "brentq")

Expected output:

Result
5.01612 29.0464 145.7

Python Code

Show Code
from pvlib.pvsystem import max_power_point as result_func
import numpy as np

def max_power_point(photocurrent, saturation_current, resistance_series, resistance_shunt, nNsVth, d_mu_tau=0, ns_vbi=1000000, mpp_solver='brentq'):
    """
    Calculate the maximum power point (MPP) from single-diode equation coefficients.

    See: https://pvlib-python.readthedocs.io/en/stable/reference/generated/pvlib.pvsystem.max_power_point.html

    This example function is provided as-is without any representation of accuracy.

    Args:
        photocurrent (float): Photo-generated current (A).
        saturation_current (float): Diode reverse saturation current (A).
        resistance_series (float): Series resistance (ohms).
        resistance_shunt (float): Shunt resistance (ohms).
        nNsVth (float): Product of ideality factor, cells in series, and thermal voltage (V).
        d_mu_tau (float, optional): PVsyst recombination parameter for thin-film modules (V). Default is 0.
        ns_vbi (float, optional): PVsyst builtin voltage parameter for thin-film modules (V). Default is 1000000.
        mpp_solver (str, optional): Numerical solver method. Valid options: Newton, Brentq, Chandrupatla. Default is 'brentq'.

    Returns:
        list[list]: 2D list [[i_mp, v_mp, p_mp]], or an error string.
    """
    try:
        il = float(photocurrent)
        i0 = float(saturation_current)
        rs = float(resistance_series)
        rsh = float(resistance_shunt)
        nv = float(nNsVth)

        d2mt = float(d_mu_tau) if d_mu_tau is not None else 0.0
        nvb = float(ns_vbi) if ns_vbi is not None else np.inf
        meth = str(mpp_solver) if mpp_solver is not None else "brentq"

        res = result_func(
            photocurrent=il,
            saturation_current=i0,
            resistance_series=rs,
            resistance_shunt=rsh,
            nNsVth=nv,
            d2mutau=d2mt,
            NsVbi=nvb,
            method=meth
        )

        # res has keys: i_mp, v_mp, p_mp
        out = [float(res['i_mp']), float(res['v_mp']), float(res['p_mp'])]
        return [out]
    except Exception as e:
        return f"Error: {str(e)}"

Online Calculator

Photo-generated current (A).
Diode reverse saturation current (A).
Series resistance (ohms).
Shunt resistance (ohms).
Product of ideality factor, cells in series, and thermal voltage (V).
PVsyst recombination parameter for thin-film modules (V).
PVsyst builtin voltage parameter for thin-film modules (V).
Numerical solver method.