Skip to main content
`Ctrl`+`K`

# scipy.special.chndtr

scipy.special.chndtr(x, df, nc, out=None) = <ufunc 'chndtr'>

  Non-central chi-squared cumulative distribution function.

  The cumulative distribution function is given by

  \[F_{\nu,\lambda}(x) = \sum_{j=0}^{\infty} e^{-\lambda / 2} \frac{(\lambda / 2)^j}{j!} F_{\chi^2_{\nu + 2j}}(x),\]

  where \(\nu > 0\) is the degrees of freedom (`df`), \(\lambda \geq 0\) is the non-centrality parameter (`nc`), and \(F_{\chi^2_{\nu + 2j}}\) is the CDF of the central chi-squared distribution with \(\nu + 2j\) degrees of freedom.

  Parameters:
    x array_like

      Upper bound of the integral; must satisfy `x >= 0`.

    df array_like

      Degrees of freedom; must satisfy `df > 0`.

    nc array_like

      Non-centrality parameter; must satisfy `nc >= 0`.

    out ndarray, optional

      Optional output array for the function results.

  Returns:
    cdf scalar or ndarray

      Value of the non-central chi-squared cumulative distribution function.

  See also

  `chndtrix`

    Noncentral Chi Squared distribution quantile

  `chndtridf`

    Inverse of `chndtr` with respect to df

  `chndtrinc`

    Inverse of `chndtr` with respect to nc

  `scipy.stats.ncx2`

    Non-central chi-squared distribution

  Notes

  The noncentral chi squared distribution is also available in `scipy.stats.ncx2`. `scipy.stats.ncx2.cdf` is equivalent to `chndtr`.

  This function wraps routines from the Boost Math C++ library [1].

  References

  [1]

  The Boost Developers. “Boost C++ Libraries”. https://www.boost.org/.

  Examples

      >>> import numpy as np
      >>> import scipy.special as sc

  Compute the noncentral chi squared distribution CDF at one point.

      >>> x = 4.0
      >>> df = 1.0
      >>> nc = 5.0
      >>> sc.chndtr(x, df, nc)
      0.40667858759710945

  Plot the noncentral chi squared distribution CDF for different parameters.

      >>> import matplotlib.pyplot as plt
      >>> x = np.linspace(0, 40, 1000)
      >>> plt.plot(x, sc.chndtr(x, 1, 5), label=r"$df=1,\ nc=5$")
      >>> plt.plot(x, sc.chndtr(x, 5, 10), label=r"$df=5,\ nc=10$")
      >>> plt.legend()
      >>> plt.show()