stdlib_stats_distribution_exponential:local:
:depth: 2
rvs_exp - exponential distribution random variatesExperimental
An exponential distribution is the distribution of time between events in a Poisson point process.
The inverse scale parameter lambda specifies the average time between events ((\lambda)), also called the rate of events. The location loc specifies the value by which the distribution is shifted.
Without argument, the function returns a random sample from the unshifted standard exponential distribution (E(\lambda=1)) or (E(loc=0, scale=1)).
With a single argument of type real, the function returns a random sample from the exponential distribution (E(\lambda=\text{lambda})).
For complex arguments, the real and imaginary parts are sampled independently of each other.
With one argument of type real and one argument of type integer, the function returns a rank-1 array of exponentially distributed random variates for (E(\lambda=\text{lambda})).
With two arguments of type real, the function returns a random sample from the exponential distribution (E(loc=loc, scale=scale)).
For complex arguments, the real and imaginary parts are sampled independently of each other.
With two arguments of type real and one argument of type integer, the function returns a rank-1 array of exponentially distributed random variates for (E(loc=loc, scale=scale)).
The algorithm used for generating exponential random variates is fundamentally limited to double precision.[^1]
result = rvs_exp ([loc, scale] , array_size)
or
result = rvs_exp ([lambda] , array_size)
Elemental function
lambda: optional argument has intent(in) and is a scalar of type real or complex.
If lambda is real, its value must be positive. If lambda is complex, both the real and imaginary components must be positive.
loc: optional argument has intent(in) and is a scalar of type real or complex.
scale: optional argument has intent(in) and is a positive scalar of type real or complex.
If scale is real, its value must be positive. If scale is complex, both the real and imaginary components must be positive.
array_size: optional argument has intent(in) and is a scalar of type integer with default kind.
If lambda is passed, the result is a scalar or rank-1 array with a size of array_size, and the same type as lambda.
If lambda is non-positive, the result is NaN.
If loc and scale are passed, the result is a scalar or rank-1 array with a size of array_size, and the same type as scale.
If scale is non-positive, the result is NaN.
```{literalinclude} ../../example/stats_distribution_exponential/example_exponential_rvs.f90 :language: fortran
## `pdf_exp` - exponential distribution probability density function
### Status
Experimental
### Description
The probability density function (pdf) of the single real variable exponential distribution is:
$$f(x)=\begin{cases} \lambda e^{-\lambda x} &x\geqslant 0 \\\\ 0 &x< 0\end{cases}$$
For a complex variable \(z=(x + y i)\) with independent real \(x\) and imaginary \(y\) parts, the joint probability density function is the product of the corresponding real and imaginary marginal pdfs:[^2]
$$f(x+\mathit{i}y)=f(x)f(y)=\begin{cases} \lambda_{x} \lambda_{y} e^{-(\lambda_{x} x + \lambda_{y} y)} &x\geqslant 0, y\geqslant 0 \\\\ 0 &\text{otherwise}\end{cases}$$
Instead of of the inverse scale parameter `lambda`, it is possible to pass `loc` and `scale`, where \(scale = \frac{1}{\lambda}\) and `loc` specifies the value by which the distribution is shifted.
### Syntax
`result = ` `pdf_exp` `(x, loc, scale)`
or
`result = ` `pdf_exp` `(x, lambda)`
### Class
Elemental function
### Arguments
`x`: has `intent(in)` and is a scalar of type `real` or `complex`.
`lambda`: has `intent(in)` and is a scalar of type `real` or `complex`.
If `lambda` is `real`, its value must be positive. If `lambda` is `complex`, both the real and imaginary components must be positive.
`loc`: has `intent(in)` and is a scalar of type `real` or `complex`.
`scale`: has `intent(in)` and is a positive scalar of type `real` or `complex`.
If `scale` is `real`, its value must be positive. If `scale` is `complex`, both the real and imaginary components must be positive.
All arguments must have the same type.
### Return value
The result is a scalar or an array, with a shape conformable to the arguments, and the same type as the input arguments. If non-positive `lambda` or `scale`, the result is `NaN`.
### Example
```{literalinclude} ../../example/stats_distribution_exponential/example_exponential_pdf.f90
:language: fortran
cdf_exp - exponential cumulative distribution functionExperimental
Cumulative distribution function (cdf) of the single real variable exponential distribution:
\[F(x)=\begin{cases}1 - e^{-\lambda x} &x\geqslant 0 \\\\ 0 &x< 0\end{cases}\]For a complex variable (z=(x + y i)) with independent real (x) and imaginary (y) parts, the joint cumulative distribution function is the product of corresponding real and imaginary marginal cdfs:1
\[F(x+\mathit{i}y)=F(x)F(y)=\begin{cases} (1 - e^{-\lambda_{x} x})(1 - e^{-\lambda_{y} y}) &x\geqslant 0, \;\; y\geqslant 0 \\\\ 0 & \text{otherwise} \end{cases}\]Alternative to the inverse scale parameter lambda, it is possible to pass loc and scale, where (scale = \frac{1}{\lambda}) and loc specifies the value by which the distribution is shifted.
result = cdf_exp (x, loc, scale)
or
result = cdf_exp (x, lambda)
Elemental function
x: has intent(in) and is a scalar of type real or complex.
lambda: has intent(in) and is a scalar of type real or complex.
If lambda is real, its value must be positive. If lambda is complex, both the real and imaginary components must be positive.
loc: has intent(in) and is a scalar of type real or complex.
scale: has intent(in) and is a positive scalar of type real or complex.
If scale is real, its value must be positive. If scale is complex, both the real and imaginary components must be positive.
All arguments must have the same type.
The result is a scalar or an array, with a shape conformable to the arguments, and the same type as the input arguments. With non-positive lambda or scale, the result is NaN.
{literalinclude} ../../example/stats_distribution_exponential/example_exponential_cdf.f90
:language: fortran
Miller, Scott, and Donald Childers. Probability and random processes: With applications to signal processing and communications. Academic Press, 2012 (p. 197). ↩