aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/option.hpp22
-rw-r--r--src/projet.cpp6
-rw-r--r--src/rqmc.hpp25
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;
+ };