morgan541 | Code :
- #include <cmath>
- #include <cstdlib>
- #include <vector>
- //standard librairie
- using namespace std;
- //*****calibration des parametres******
- extern const double a;
- extern const double b;
- extern const double r0;
- extern const double vol;
-
- //*********matrice_taux=matrice ZC******************
-
- vector<double> simulation_taux(const int maturity,const int FloatingFrequency,const long NbOfPaths)
- {
- //term 1
- double term1;
- //term2
- double term2;
- //term variance
- double VV;
-
- double t_depart;
- double t_fin;
-
-
- double thisGaussian;
- long dl=NbOfPaths;
- int dc=maturity*FloatingFrequency;
- double temp;
-
-
- vector<double> matrice_taux(dc*dl);
-
- int indexation_vecteur=0;
-
-
- for (int i=1;i<dl;i++)
- {
-
- matrice_taux[((i-1)*dc)]=r0;
-
- //dc nb de périodes
- for (int j=1;j<=dc;j++)
- {
- t_depart=static_cast<double>(j-1)/static_cast<double>(dc);
- t_fin=static_cast<double>(j)/static_cast<double>(dc);
- //term 1
- term1=DerministTerm1(a,t_depart,t_fin);
- //term2
- term2=DerministTerm2(a,b,t_depart,t_fin);
- //écarttype
- VV=sqrt(VarianceVasicek(a,vol,t_depart,t_fin));
-
- indexation_vecteur=((i-1)*dc)+j;
- //simu normale
- thisGaussian=GetOneGaussianByBoxMuller();
- //rt=
- matrice_taux[indexation_vecteur]=matrice_taux[indexation_vecteur-1]*term1+term2+VV*thisGaussian;
- //B(t,T)=
- matrice_taux[indexation_vecteur]=A(a,b,vol,t_fin,maturity)*exp(-matrice_taux[indexation_vecteur]*G(a,vol,t_fin,maturity));
-
- };
-
- };
- return matrice_taux;
- };
|
|