TheAlgorithms/C++ 1.0.0
All the algorithms implemented in C++
Loading...
Searching...
No Matches
exponential_dist.cpp File Reference

Exponential Distribution More...

#include <cassert>
#include <cmath>
#include <iostream>
#include <stdexcept>
#include <string>
Include dependency graph for exponential_dist.cpp:

Go to the source code of this file.

Namespaces

namespace  probability
 Probability algorithms.
 
namespace  exponential_dist
 Functions for the Exponential Distribution algorithm implementation.
 

Functions

double probability::geometric_dist::exponential_expected (double lambda)
 the expected value of the exponential distribution
 
double probability::geometric_dist::exponential_var (double lambda)
 the variance of the exponential distribution
 
double probability::geometric_dist::exponential_std (double lambda)
 the standard deviation of the exponential distribution
 
static void test ()
 Self-test implementations.
 
int main ()
 Main function.
 

Detailed Description

Exponential Distribution

The exponential distribution is used to model events occuring between a Poisson process like radioactive decay.

\[P(x, \lambda) = \lambda e^{-\lambda x}\]

Summary of variables used: \(\lambda\) : rate parameter

Definition in file exponential_dist.cpp.

Function Documentation

◆ exponential_expected()

double probability::geometric_dist::exponential_expected ( double lambda)

the expected value of the exponential distribution

Returns

\[\mu = \frac{1}{\lambda}\]

Definition at line 37 of file exponential_dist.cpp.

37 {
38 if (lambda <= 0) {
39 throw std::invalid_argument("lambda must be greater than 0");
40 }
41 return 1 / lambda;
42}

◆ exponential_std()

double probability::geometric_dist::exponential_std ( double lambda)

the standard deviation of the exponential distribution

Returns

\[\sigma = \frac{1}{\lambda}\]

Definition at line 59 of file exponential_dist.cpp.

59 {
60 if (lambda <= 0) {
61 throw std::invalid_argument("lambda must be greater than 0");
62 }
63 return 1 / lambda;
64}

◆ exponential_var()

double probability::geometric_dist::exponential_var ( double lambda)

the variance of the exponential distribution

Returns

\[\sigma^2 = \frac{1}{\lambda^2}\]

Definition at line 48 of file exponential_dist.cpp.

48 {
49 if (lambda <= 0) {
50 throw std::invalid_argument("lambda must be greater than 0");
51 }
52 return 1 / pow(lambda, 2);
53}

◆ main()

int main ( void )

Main function.

Returns
0 on exit

Definition at line 148 of file exponential_dist.cpp.

148 {
149 test(); // Self test implementation
150 return 0;
151}
static void test()
Self-test implementations.

◆ test()

static void test ( )
static

Self-test implementations.

Returns
void

Definition at line 72 of file exponential_dist.cpp.

72 {
73 double lambda_1 = 1;
74 double expected_1 = 1;
75 double var_1 = 1;
76 double std_1 = 1;
77
78 double lambda_2 = 2;
79 double expected_2 = 0.5;
80 double var_2 = 0.25;
81 double std_2 = 0.5;
82
83 double lambda_3 = 3;
84 double expected_3 = 0.333333;
85 double var_3 = 0.111111;
86 double std_3 = 0.333333;
87
88 double lambda_4 = 0; // Test 0
89 double lambda_5 = -2.3; // Test negative value
90
91 const float threshold = 1e-3f;
92
93 std::cout << "Test for lambda = 1 \n";
94 assert(
95 std::abs(expected_1 - probability::geometric_dist::exponential_expected(
96 lambda_1)) < threshold);
97 assert(std::abs(var_1 - probability::geometric_dist::exponential_var(
98 lambda_1)) < threshold);
99 assert(std::abs(std_1 - probability::geometric_dist::exponential_std(
100 lambda_1)) < threshold);
101 std::cout << "ALL TEST PASSED\n\n";
102
103 std::cout << "Test for lambda = 2 \n";
104 assert(
105 std::abs(expected_2 - probability::geometric_dist::exponential_expected(
106 lambda_2)) < threshold);
107 assert(std::abs(var_2 - probability::geometric_dist::exponential_var(
108 lambda_2)) < threshold);
109 assert(std::abs(std_2 - probability::geometric_dist::exponential_std(
110 lambda_2)) < threshold);
111 std::cout << "ALL TEST PASSED\n\n";
112
113 std::cout << "Test for lambda = 3 \n";
114 assert(
115 std::abs(expected_3 - probability::geometric_dist::exponential_expected(
116 lambda_3)) < threshold);
117 assert(std::abs(var_3 - probability::geometric_dist::exponential_var(
118 lambda_3)) < threshold);
119 assert(std::abs(std_3 - probability::geometric_dist::exponential_std(
120 lambda_3)) < threshold);
121 std::cout << "ALL TEST PASSED\n\n";
122
123 std::cout << "Test for lambda = 0 \n";
124 try {
128 } catch (std::invalid_argument& err) {
129 assert(std::string(err.what()) == "lambda must be greater than 0");
130 }
131 std::cout << "ALL TEST PASSED\n\n";
132
133 std::cout << "Test for lambda = -2.3 \n";
134 try {
138 } catch (std::invalid_argument& err) {
139 assert(std::string(err.what()) == "lambda must be greater than 0");
140 }
141 std::cout << "ALL TEST PASSED\n\n";
142}
double exponential_expected(double lambda)
the expected value of the exponential distribution
double exponential_std(double lambda)
the standard deviation of the exponential distribution
double exponential_var(double lambda)
the variance of the exponential distribution