tilfældig normaltfordelt tal

Tags:    c++

hej igen...

Jeg har lavet en kode i c++
men mangler at få den til at lave et tilfældigt normalt fordelt tal. plz hjælp

kodene ser sådan ud og det er "e" dom skal være et tilfældigttal

# include <fstream.h> // Så man kan gemme og hente data fra filer
# include <iomanip.h> // Sørger for at programmet kan modtage og udskrive data
# include <stdlib.h> // Så vi kan tømme skærmen
# include <math.h> // Så programmet kan regne lidt svære matematik

# define max 5

void inddata1(int &T, double r[max], double &vol);
void kurs(double &S0, double &X);
void sim1(int n, int k, int K, int ti, double t, double X, double S0, double r[max], double vol, int T);
void sim2(int n, int k, int K, int ti, double t, double X, double S0, double r[max], double vol, int T);
void sim3(int n, int k, int K, int ti, double t, double X, double S0, double r[max], double vol, int T);

main()
{
int T, ti, valg, n, k, K;
double r[max], S0, X, t, vol;

inddata1(T,r, vol);
kurs(S0, X);

do
{
system("cls");

cout<<"\\n hvilket interval har dine maalinger?";
cout<<"\\n --------------------------------------";
cout<<"\\n\\n maandlig (1)";
cout<<"\\n\\n pr kvartal (2)";
cout<<"\\n\\n halvaarlig (3)";
cout<<"\\n\\n--------------------------------------";
cout<<"\\n\\n tast her: ";
cin>> valg;
}
while ((valg!=1)&&(valg!=2)&&(valg!=3));

if(valg==1)
{
t=0.083;
ti=T*12;
}
else
{
if(valg==2)
{
t=0.25;
ti=T*4;
}
else
{
t=0.5;
ti=T*2;
}
}
system("cls");

cout<<"\\n hvornaar skal maalingen starte?";
cout<<"\\n (tael bagfra)";
cout<<"\\n\\n\\n tast her: ";
cin>>k;

K=ti-k;

system("cls");

cout<<"\\n hvormange simuleringer skal programmet lave? ";
cin>>n;

if(valg==1)
{
sim1(n,k,K,ti,t,X,S0,r,vol,T);
}
else
{
if(valg==2)
{
sim2(n,k,K,ti,t,X,S0,r,vol,T);
}
else
{
sim3(n,k,K,ti,t,X,S0,r,vol,T);
}
}


return 0;
}

void inddata1(int &T, double r[max], double &vol)
{
int i;

do
{
system("cls");
cout<<"\\n hvormange aar loeber din option? ";
cin>>T;
}
while ((T!=1)&&(T!=2)&&(T!=3)&&(T!=4)&&(T!=5));

for(i=0; i<T; i++)
{
cout<<"\\n\\n hvad er renten for aar "<<i<<" ? ";
cin>>r;
}

cout<<"\\n\\n hvad er volatiliteten? ";
cin>>vol;
}

void kurs(double &S0, double &X)
{
char svar;

system("cls");

cout<<"\\n hvad er din start kurs? ";
cin>>S0;

cout<<"\\n er din strik price anderledes end din start kurs? ";
cin>>svar;

if((svar=='n')||(svar=='N'))
{
X=S0;
}
else
{
cout<<"\\n hvad er din strik kurs ";
cin>>X;
}
}


void sim1(int n, int k, int K, int ti, double t, double X, double S0, double r[max], double vol, int T)
{
double smiddel, kavg, e, nykurs, kontrol, C;
int i, j;

kavg=0;
nykurs=S0;

for(i=0; i<n; i++)
{
smiddel=0;

for(j=0; j<ti; j++)
{
e=2; //skal tildeles et tilfældigt normaltfordelt tal med middel værdi 0 og stadard afvigelse 1

if(j<=11)
{
nykurs=nykurs*exp((r[1]-pow(vol,2.)/2.)*t+vol*e*sqrt(t));

if(j>=K)
{
smiddel=smiddel+nykurs;
}
}
else
{
if((j>11)&&(j<=23))
{
nykurs=nykurs*exp((r[2]-pow(vol,2.)/2.)*t+vol*e*sqrt(t));

if(j>=K)
{
smiddel=smiddel+nykurs;
}
}
else
{
if((j>23)&&(j<=35))
{
nykurs=nykurs*exp((r[3]-pow(vol,2.)/2.)*t+vol*e*sqrt(t));

if(j>=K)
{
smiddel=smiddel+nykurs;
}
}
else
{
if((j>35)&&(j<=47))
{
nykurs=nykurs*exp((r[4]-pow(vol,2.)/2.)*t+vol*e*sqrt(t));

if(j>=K)
{
smiddel=smiddel+nykurs;
}
}
else
{
nykurs=nykurs*exp((r[5]-pow(vol,2.)/2.)*t+vol*e*sqrt(t));

if(j>=K)
{
smiddel=smiddel+nykurs;
}
}
}
}
}
}

smiddel=smiddel/k;

kontrol=smiddel-S0;

if(kontrol<=0)
{
smiddel=S0;
}

kavg=kavg+smiddel;
}

C=exp(-(r[T]*T))*kavg/n;

system("cls");
cout<<"\\n\\n\\n\\n\\n\\n\\n options prisen er "<<C;
}
void sim2(int n, int k, int K, int ti, double t, double X, double S0, double r[max], double vol, int T)
{
double smiddel, kavg, e, nykurs, kontrol, C;
int i, j;

kavg=0;
nykurs=S0;

for(i=0; i<n; i++)
{
smiddel=0;

for(j=0; j<ti; j++)
{
e=2; //skal tildeles et tilfældigt normaltfordelt tal med middel værdi 0 og stadard afvigelse 1

if(j<=3)
{
nykurs=nykurs*exp((r[1]-pow(vol,2.)/2.)*t+vol*e*sqrt(t));

if(j>=K)
{
smiddel=smiddel+nykurs;
}
}
else
{
if((j>3)&&(j<=7))
{
nykurs=nykurs*exp((r[2]-pow(vol,2.)/2.)*t+vol*e*sqrt(t));

if(j>=K)
{
smiddel=smiddel+nykurs;
}
}
else
{
if((j>7)&&(j<=11))
{
nykurs=nykurs*exp((r[3]-pow(vol,2.)/2.)*t+vol*e*sqrt(t));

if(j>=K)
{
smiddel=smiddel+nykurs;
}
}
else
{
if((j>11)&&(j<=15))
{
nykurs=nykurs*exp((r[4]-pow(vol,2.)/2.)*t+vol*e*sqrt(t));

if(j>=K)
{
smiddel=smiddel+nykurs;
}
}
else
{
nykurs=nykurs*exp((r[5]-pow(vol,2.)/2.)*t+vol*e*sqrt(t));

if(j>=K)
{
smiddel=smiddel+nykurs;
}
}
}
}
}
}

smiddel=smiddel/k;

kontrol=smiddel-S0;

if(kontrol<=0)
{
smiddel=S0;
}

kavg=kavg+smiddel;
}

C=exp(-(r[T]*T))*kavg/n;

system("cls");
cout<<"\\n\\n\\n\\n\\n\\n\\n options prisen er "<<C;
}
void sim3(int n, int k, int K, int ti, double t, double X, double S0, double r[max], double vol, int T)
{
double smiddel, kavg, e, nykurs, kontrol, C;
int i, j;

kavg=0;
nykurs=S0;

for(i=0; i<n; i++)
{
smiddel=0;

for(j=0; j<ti; j++)
{
e=2; //skal tildeles et tilfældigt normaltfordelt tal med middel værdi 0 og stadard afvigelse 1

if(j<=1)
{
nykurs=nykurs*exp((r[1]-pow(vol,2.)/2.)*t+vol*e*sqrt(t));

if(j>=K)
{
smiddel=smiddel+nykurs;
}
}
else
{
if((j>1)&&(j<=3))
{
nykurs=nykurs*exp((r[2]-pow(vol,2.)/2.)*t+vol*e*sqrt(t));

if(j>=K)
{
smiddel=smiddel+nykurs;
}
}
else
{
if((j>3)&&(j<=5))
{
nykurs=nykurs*exp((r[3]-pow(vol,2.)/2.)*t+vol*e*sqrt(t));

if(j>=K)
{
smiddel=smiddel+nykurs;
}
}
else
{
if((j>5)&&(j<=7))
{
nykurs=nykurs*exp((r[4]-pow(vol,2.)/2.)*t+vol*e*sqrt(t));

if(j>=K)
{
smiddel=smiddel+nykurs;
}
}
else
{
nykurs=nykurs*exp((r[5]-pow(vol,2.)/2.)*t+vol*e*sqrt(t));

if(j>=K)
{
smiddel=smiddel+nykurs;
}
}
}
}
}
}

smiddel=smiddel/k;

kontrol=smiddel-S0;

if(kontrol<=0)
{
smiddel=S0;
}

kavg=kavg+smiddel;
}

C=exp(-(r[T]*T))*kavg/n;

system("cls");
cout<<"\\n\\n\\n\\n\\n\\n\\n options prisen er "<<C;
}




3 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Boost er måske en anelse overkill, men tag et kik på:
http://en.wikipedia.org/wiki/Boost_library

Der er et eksempel på at genere tal med "normal distribution" lidt nede på siden.



har kigget på boost og hentet det... ved bare ikke hvordan jeg får det ind i min c++ kode...

hvor skal jeg gemme det??, at kalde det skulle være let nok..

har set at der er noget som hedder normdist.h, men hvor skaffer jeg det henne??

nogen der kan hjælpe



Hvor har du set normdist.h?



t