aboutsummaryrefslogtreecommitdiffstats
path: root/var_alea.hpp
diff options
context:
space:
mode:
authorBertrand <bertrand.horel@gmail.com>2016-02-19 15:03:51 +0000
committerBertrand <bertrand.horel@gmail.com>2016-02-19 15:03:51 +0000
commitd2b133901a65244934eb642ec8e20c797efaf650 (patch)
treef8d186f8e8ca0886f8f0a464261ba8747242b4e6 /var_alea.hpp
parent355e4567e68a76356714e2e58a42dcd78533cf6c (diff)
downloadprojet_C++-d2b133901a65244934eb642ec8e20c797efaf650.tar.gz
nettoyage du dépôt
Diffstat (limited to 'var_alea.hpp')
-rw-r--r--var_alea.hpp115
1 files changed, 0 insertions, 115 deletions
diff --git a/var_alea.hpp b/var_alea.hpp
deleted file mode 100644
index 2d1e8a6..0000000
--- a/var_alea.hpp
+++ /dev/null
@@ -1,115 +0,0 @@
-#ifndef VAR_ALEA_HPP
-#define VAR_ALEA_HPP
-#include <cmath>
-extern "C" {
- #include "mt19937.h"
-}
-#include <ctime>
-
-
-void init_alea(unsigned seed = static_cast<unsigned>(std::time(0))) {
- init_genrand(seed);
-};
-
-template <typename T>
-struct var_alea {
- typedef T result_type;
- var_alea() : value(0) {};
- var_alea(T value) : value(value) {};
- virtual ~var_alea() {};
- virtual T operator()() = 0;
- T current() const { return value; };
- protected:
- T value;
-};
-
-struct uniform : public var_alea<double>
-{
- uniform(double left = 0, double right = 1)
- : left(left), size(right-left), genrand(genrand_real3) {};
- double operator()() {
- return value = left + size * genrand();
- };
- private:
- double left, size;
- double (*genrand)(void);
-};
-
-struct expo : public var_alea<double>
-{
- expo(double lambda) : inv_lambda(1./lambda), U(0,1) {};
- double operator()() {
- return value = - inv_lambda * log(U());
- };
- private:
- double inv_lambda;
- uniform U;
-};
-
-struct gaussian : public var_alea<double>
-{
- gaussian(double mean = 0, double std = 1)
- : mean(mean), std(std), flag(true), unif(-1,1) {};
- double operator()() {
- flag = !flag;
- if (!flag) {
- do {
- U = unif(); V = unif();
- R2 = U*U + V*V;
- } while (R2 > 1);
- rac = sqrt(-2 * log(R2) / R2);
- return value = mean + std * U * rac;
- } else
- return value = mean + std * V * rac;
- };
- private:
- double mean, std, U, V, R2, rac;
- uniform unif;
- bool flag;
-};
-
-struct chi_deux : public var_alea<double>
-{
- chi_deux(int n) : n(n), G(0,1) {};
- double operator()() {
- value = 0;
- for (int j = 0; j < n; j++) value += G()*G.current();
- return value;
- };
- private:
- int n;
- gaussian G;
-};
-
-struct inverse_gaussian : public var_alea<double>
-{
- inverse_gaussian(double lambda, double mu)
- : lambda(lambda), mu(mu), Y(1), U(0,1) {};
- double operator()() {
- double Z = mu + 0.5*mu*mu/lambda*Y();
- double rac = sqrt(Z*Z - mu*mu);
- return value = (U() < mu/(mu+Z+rac)) ? Z+rac : Z-rac;
- };
- private:
- double lambda, mu;
- chi_deux Y;
- uniform U;
-};
-
-struct normal_inverse_gaussian : public var_alea<double>
-{
- normal_inverse_gaussian(double alpha, double beta,
- double mu, double delta)
- : alpha(alpha), beta(beta), mu(mu), delta(delta), G(0,1),
- Y(delta/sqrt(alpha*alpha-beta*beta), delta*delta) {};
- double operator()() {
- double y_ = Y();
- return value = mu + beta*y_ * sqrt(y_) * G();
- };
- private:
- double alpha, beta, mu, delta;
- gaussian G;
- inverse_gaussian Y;
-};
-
-#endif