aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/option.cpp26
-rw-r--r--src/projet.cpp51
-rw-r--r--src/rqmc.hpp8
3 files changed, 45 insertions, 40 deletions
diff --git a/src/option.cpp b/src/option.cpp
index 918e735..c50a7bf 100644
--- a/src/option.cpp
+++ b/src/option.cpp
@@ -6,31 +6,7 @@ double pos (double x){
}
-int main(){
- init_alea(1);
- asian_option A(0.05, 1.0, 50.0, 0.1, 16, 45);
- int N= 10000;
-
- int d =16;
-
-
- std::vector<double> result(3);
- result = monte_carlo(100, quasi_option<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 = monte_carlo(100, quasi_option<asian_option, halton> (N, d, A));
- for(int i =0; i<3; i++){
- std::cout<<result2[i]<<std::endl;
- }
-
-
-
- return 0;
-}
-
+
diff --git a/src/projet.cpp b/src/projet.cpp
index 980ef98..57f6b91 100644
--- a/src/projet.cpp
+++ b/src/projet.cpp
@@ -9,8 +9,7 @@
using namespace std;
-
-void exemple1() {
+void exemple1_stratified() {
vector<double> q = quantile_norm(10, 1);
vector<double> p(10, 0.1);
vector<gaussian_truncated> rvar;
@@ -35,7 +34,7 @@ void exemple1() {
};
- void exemple2 (){
+ void exemple2_stratified (){
int d= 16;
std::vector<double> mu(d);
mu = argmax(0.05, 1.0, 50, 0.1, 45, d);
@@ -62,18 +61,48 @@ void exemple1() {
stratified_sampling<compose_t <f_mu, multi_gaussian_truncated> > S(p, X);
S.draw(1000);
cout<<"l'estimateur de la moyenne est :"<<S.estimator().first<<endl;
- //~ compose_t <f_mu, multi_gaussian_truncated> X = compose(G,MG);
- //~ for(int i=0; i<10; i++){
- //~ std::cout<<X()<<std::endl;
- //~ }
}
+void exemple2_rqmc() {
+ asian_option A(0.05, 1.0, 50.0, 0.1, 16, 45);
+ int N= 10000;
+
+ int d =16;
+
+
+ std::vector<double> result(3);
+ result = quasi_mean(100, quasi_option<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));
+ for(int i =0; i<3; i++){
+ std::cout<<result2[i]<<std::endl;
+ }
+};
+
+struct first:public std::unary_function<std::vector<double>, double>
+{ double operator()(std::vector<double> X){return X[0];}
+};
+
+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));
+ for(int i =0; i<3; i++){
+ std::cout<<result[i]<<std::endl;
+ }
+};
int main()
{
init_alea(1);
- exemple1();
- //exemple2();
-
- return 0;
+ //exemple2_rqmc();
+ //exemple1_stratified();
+ exemple1_rqmc();
+ return 0;
+
}
diff --git a/src/rqmc.hpp b/src/rqmc.hpp
index 1b33713..03f7e81 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> monte_carlo(int n, L X)
+std::vector<double> quasi_mean(int n, L X, double p=0.05)
{
std::vector<double> result(3,0);
double x;
@@ -67,14 +67,14 @@ std::vector<double> monte_carlo(int n, L X)
}
result[0] /= (double) n;
result[1] = (result[1] - n*result[0]*result[0])/(double)(n-1);
- result[2] = 1.96*sqrt(result[1]/(double) n);
+ result[2] = gsl_cdf_gaussian_Pinv(1-p/2,1)*sqrt(result[1]/(double) n);
return result;
};
template <typename L, typename Fct>
-std::vector<double> monte_carlo(int n, Fct f, L X)
+std::vector<double> quasi_mean(int n, Fct f, L X, double p=0.05)
{
- return monte_carlo(n, compose(f, X));
+ return quasi_mean(n, compose(f, X), p);
};
//Les classes de quasi-mean