diff options
| author | Bertrand <bertrand.horel@gmail.com> | 2016-04-12 17:05:23 +0000 |
|---|---|---|
| committer | Bertrand <bertrand.horel@gmail.com> | 2016-04-12 17:05:23 +0000 |
| commit | bcafe5e41698c44b6aa77b8ef150f4224613c38f (patch) | |
| tree | 0d2fcdd687970a7809f11c359c8c31aaf246c5ec | |
| parent | bb87c9576a735fe9827db0d27d180b47f9884161 (diff) | |
| download | projet_C++-bcafe5e41698c44b6aa77b8ef150f4224613c38f.tar.gz | |
rectification, renommage quasi_mean en monte_carlo, renommage quasi_option en quasi_mean qui est déplacée dans rqmc.hpp
| -rw-r--r-- | src/option.hpp | 22 | ||||
| -rw-r--r-- | src/projet.cpp | 6 | ||||
| -rw-r--r-- | src/rqmc.hpp | 25 |
3 files changed, 25 insertions, 28 deletions
diff --git a/src/option.hpp b/src/option.hpp index 1a3733c..4d9ee13 100644 --- a/src/option.hpp +++ b/src/option.hpp @@ -27,25 +27,3 @@ struct asian_option : public std::unary_function<std::vector<double>, double> }; - - -template <typename Fct, typename LDS> -struct quasi_option : public generator<typename Fct::result_type> -{ - quasi_option(int n, int d, Fct payoff) : n(n), d(d), payoff(payoff), G(d) {}; - - typename Fct::result_type operator()() { - double sum =0; - for(int i=0; i<n; i++){ - sum += payoff(G()); - - } - return sum/n; - }; - - private: - int n, d; - Fct payoff; - quasi_gaussian<LDS> G; - }; - diff --git a/src/projet.cpp b/src/projet.cpp index 57f6b91..b4fa5f9 100644 --- a/src/projet.cpp +++ b/src/projet.cpp @@ -71,13 +71,13 @@ void exemple2_rqmc() { std::vector<double> result(3); - result = quasi_mean(100, quasi_option<asian_option, sobol> (N, d, A)); + result = monte_carlo(100, quasi_mean<asian_option, sobol> (N, d, A)); for(int i =0; i<3; i++){ std::cout<<result[i]<<std::endl; } std::vector<double> result2(3); - result2 = quasi_mean(100, quasi_option<asian_option, halton> (N, d, A)); + result2 = monte_carlo(100, quasi_mean<asian_option, halton> (N, d, A)); for(int i =0; i<3; i++){ std::cout<<result2[i]<<std::endl; } @@ -91,7 +91,7 @@ void exemple1_rqmc(){ int N = 100; first f; //comme quasi_gaussian retourne un vecteur, on doit composer avec f pour avoir le double QG()[0] std::vector<double> result(3); - result = quasi_mean (100,quasi_option<struct first, sobol> (N, 1, f)); + result = monte_carlo (100,quasi_mean<struct first, sobol> (N, 1, f)); for(int i =0; i<3; i++){ std::cout<<result[i]<<std::endl; } diff --git a/src/rqmc.hpp b/src/rqmc.hpp index 03f7e81..840e069 100644 --- a/src/rqmc.hpp +++ b/src/rqmc.hpp @@ -56,7 +56,7 @@ mean(int n, VA X){ //Les classes de monte-Carlo template <typename L> -std::vector<double> quasi_mean(int n, L X, double p=0.05) +std::vector<double> monte_carlo(int n, L X, double p=0.05) { std::vector<double> result(3,0); double x; @@ -72,9 +72,9 @@ std::vector<double> quasi_mean(int n, L X, double p=0.05) }; template <typename L, typename Fct> -std::vector<double> quasi_mean(int n, Fct f, L X, double p=0.05) +std::vector<double> monte_carlo(int n, Fct f, L X, double p=0.05) { - return quasi_mean(n, compose(f, X), p); + return monte_carlo(n, compose(f, X), p); }; //Les classes de quasi-mean @@ -120,6 +120,25 @@ struct gaussian_d : public var_alea<std::vector<double> > gaussian G; }; +template <typename Fct, typename LDS> +struct quasi_mean : public generator<typename Fct::result_type> +{ + quasi_mean(int n, int d, Fct f) : n(n), d(d), f(f), G(d) {}; + + typename Fct::result_type operator()() { + double sum =0; + for(int i=0; i<n; i++){ + sum += f(G()); + + } + return sum/n; + }; + + private: + int n, d; + Fct f; + quasi_gaussian<LDS> G; + }; |
