morgan541 | main:
Code :
- vector<double> theMatrice(NbOfPaths*FloatingFrequency*Maturity);
- vector<double>::iterator Iter1;
- theMatrice=simulation_taux(Maturity,FloatingFrequency,NbOfPaths);
- //*********************************************************
- for ( Iter1 = theMatrice.begin( ) ; Iter1 != theMatrice.end( ) ; Iter1++ )
- cout << *Iter1 << " ";
|
simulation_taux:
Code :
- 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;
- vector<double> matrice_taux(dc*dl);
- vector<double> matrice_ZC(dc*dl);
- int indexation_vecteur=0;
- int count=0;
- for (int i=1;i<=dl;i++)
- {
- matrice_taux[(i-1)*dc+count]=r0;
- matrice_ZC[(i-1)*dc+count]=1;
- //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+count;
- //simu normale
- thisGaussian=GetOneGaussianByBoxMuller();
- //rt=
- matrice_taux[indexation_vecteur]=matrice_taux[indexation_vecteur-1]*term1+term2+VV*thisGaussian;
- //B(t,T)=
- matrice_ZC[indexation_vecteur]=A(a,b,vol,t_fin,maturity)*exp(-matrice_taux[indexation_vecteur]*G(a,vol,t_fin,maturity));
- };
- count=count+1;
- };
- return matrice_ZC;
- };
|
|