diff options
| author | Bertrand <bertrand.horel@gmail.com> | 2016-02-21 16:35:30 +0000 |
|---|---|---|
| committer | Bertrand <bertrand.horel@gmail.com> | 2016-02-21 16:35:30 +0000 |
| commit | 906c2dee383a7eb72632bfbdf61916a576a5460d (patch) | |
| tree | e86bbaadc241b71b302591b64762f671d1e30940 /src/option.cpp | |
| parent | 5ed1989db081c60c7be820a5ce58a170fd5f1f9c (diff) | |
| download | projet_C++-906c2dee383a7eb72632bfbdf61916a576a5460d.tar.gz | |
création de la struct f_mu
Diffstat (limited to 'src/option.cpp')
| -rw-r--r-- | src/option.cpp | 61 |
1 files changed, 6 insertions, 55 deletions
diff --git a/src/option.cpp b/src/option.cpp index 0e5a56c..b8c2799 100644 --- a/src/option.cpp +++ b/src/option.cpp @@ -1,62 +1,13 @@ -#include <algorithm> +#include "option.hpp" #include <iostream> -#include "rqmc.hpp" -#include "p_adic.o" - -double frac_part(double x){ - return x - floor(x); -} double pos (double x){ return x>0?x:0; } -struct asian_option : public std::unary_function<std::vector<double>, double> -{ - asian_option(double r, double T, double S0, double V, int d, double K) - : r(r), T(T), S0(S0), V(V), d(d), K(K) {}; - - double operator()(std::vector<double> X) const { - std::vector<double> S(d); - S[0]= S0*exp((r-V*V/2)*(T/d)+V*sqrt(T/d)*X[0]); - for(int i=1;i<d;i++){ - S[i]=S[i-1]*exp((r-V*V/2)*(T/d)+V*sqrt(T/d)*X[i]); - } - double temp = std::accumulate(S.begin(), S.end(), 0.)/d; - return exp(-r*T)*pos(temp-K); - }; - - private: - double r; - double T; - double S0; - double V; - int d; - double K; - }; - - - - -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; - }; +double frac_part(double x){ + return x - floor(x); +} int main(){ init_alea(1); @@ -73,9 +24,9 @@ int main(){ } std::vector<double> result2(3); - result = monte_carlo(100, quasi_option<asian_option, halton> (N, d, A)); + result2 = monte_carlo(100, quasi_option<asian_option, halton> (N, d, A)); for(int i =0; i<3; i++){ - std::cout<<result[i]<<std::endl; + std::cout<<result2[i]<<std::endl; } |
