# Analytic Functions (astropy.analytic_functions)¶

## Introduction¶

The astropy.analytic_functions subpackage provides analytic functions that are commonly used in astronomy. These already understand Quantity, i.e., they can handle units of input and output parameters.

In future versions of astropy, many of these might be accessible as Model.

## Getting Started¶

>>> from astropy import units as u
>>> from astropy.analytic_functions import blackbody_lambda, blackbody_nu


Calculate blackbody flux for 10000 K at 6000 Angstrom:

>>> blackbody_lambda(6000 * u.AA, 10000 * u.K)
<Quantity 15315791.836941158 erg / (Angstrom cm2 s sr)>
>>> blackbody_nu(6000 * u.AA, 10000 * u.K)
<Quantity 0.00018391673686797075 erg / (cm2 Hz s sr)


## Using astropy.analytic_functions¶

Blackbody flux is calculated with Planck law (Rybicki & Lightman 1979):

$B_{\lambda}(T) = \frac{2 h c^{2} / \lambda^{5}}{exp(h c / \lambda k T) - 1}$$B_{\nu}(T) = \frac{2 h \nu^{3} / c^{2}}{exp(h \nu / k T) - 1}$

where the unit of $$B_{\lambda}(T)$$ is $$erg \; s^{-1} cm^{-2} \mathring{A}^{-1} sr^{-1}$$, and $$B_{\nu}(T)$$ is $$erg \; s^{-1} cm^{-2} Hz^{-1} sr^{-1}$$. blackbody_lambda() and blackbody_nu() calculate the blackbody flux for $$B_{\lambda}(T)$$ and $$B_{\nu}(T)$$, respectively.

#### Examples¶

>>> import numpy as np
>>> from astropy import units as u
>>> from astropy.analytic_functions import blackbody_lambda, blackbody_nu


Calculate blackbody flux for 5000 K at 100 and 10000 Angstrom while suppressing any Numpy warnings:

>>> wavelengths = [100, 10000] * u.AA
>>> temperature = 5000 * u.K
>>> with np.errstate(all='ignore'):
...     flux_lam = blackbody_lambda(wavelengths, temperature)
...     flux_nu = blackbody_nu(wavelengths, temperature)
>>> flux_lam
Quantity [1.27452545e-108, 7.10190526e+005] erg / (Angstrom cm2 s sr)>
>>> flux_nu
<Quantity [4.25135927e-123, 2.36894060e-005] erg / (cm2 Hz s sr)>


Plot a blackbody spectrum for 5000 K:

(png, svg, pdf)

Note that an array of temperatures can also be given instead of a single temperature. In this case, the Numpy broadcasting rules apply: for instance, if the frequency and temperature have the same shape, the output will have this shape too, while if the frequency is a 2-d array with shape (n, m) and the temperature is an array with shape (m,), the output will have a shape (n, m).

 blackbody_nu(in_x, temperature) Calculate blackbody flux per steradian, $$B_{\nu}(T)$$. blackbody_lambda(in_x, temperature) Like blackbody_nu() but for $$B_{\lambda}(T)$$.