Методы моделирования произвольно распределенных непрерывных псевдослучайных величин, страница 5

a[i]=sqrt(sqrt(4*alfa/c-4.66666666));

}

ofstream out2("z2.dat");

out2<<"0 "<<n<<"\n";

for(i=0;i<n;i++) out2<<a[i]<<"\n";

out2.close();

cout<<hi2(a,1.);

}

/***************************/

float z3_1(int d[n])

{float c,a;

c=(float)d[0]/RAND_MAX;

for(int i=0;i<n-1;i++)

{ a=(float)d[i+1]/RAND_MAX;

if(c>a) c=a;

}

return c;

}

void z3(int d[n],float a[n])

{  cout<<"\n 3.      ";

for(int i=0;i<n;i++)

{   randomize();

for (int i=0; i<n; i++)   d[i]=rand();

a[i]=z3_1(d);

}

ofstream out3("z3.dat");

out3<<"0 "<<n<<"\n";

for(i=0;i<n;i++) out3<<a[i]<<"\n";

out3.close();

cout<<hi2(a,1.);

}

/***************************/

float gg(float x,float a)

{ return (x*exp(a*x));

}

float z4_1(int d[n],float b,float a)

{ int i;

float M6,ksi,eta;

M6=gg(-1/a,a);

if(M6<gg(b,a)) M6=gg(b,a);

i=0;

ksi=d[i]/RAND_MAX*b; eta=d[i+1]/RAND_MAX*M6;

while(eta>gg(ksi,a))

{ i++;

ksi=d[i]/RAND_MAX*b; eta=d[i+1]/RAND_MAX*M6;

}

return ksi;

}

void z4(int d[n],float a[n])

{ float c,b;

cout<<"\n 4.     ";

cout<<"[0..b] ; b = ";cin>>b;

cout<<"a = ";cin>>c;

for(int i=0;i<n;i++)

{   randomize();

for (int i=0; i<n; i++)   d[i]=rand();

a[i]=z4_1(d,b,c);

}

ofstream out4("z4.dat");

out4<<"0 "<<n<<"\n";

for(i=0;i<n;i++) out4<<a[i]<<"\n";

out4.close();

cout<<hi2(a,b);

}

/***************************/

float p(int i)

{float a;

//cout<<"a("<<i<<") = "; cin>>a; cout<<"\n";

a=0.001;

if(a>0) a=a/(i+1);

else p(i);

return a;

}

float z5_1(int d[n])

{ int i;

float M5,omega;

i=0;  M5=d[0]/RAND_MAX;  omega=d[0]/RAND_MAX;

M5=M5-p(i);

while(M5>=0)

{   i++;

if(d[i]/RAND_MAX>omega) omega=d[i]/RAND_MAX;

M5=M5-p(i);

}

return omega;

}

void z5(int d[n],float a[n])

{  cout<<"\n 5.     ";

for(int i=0;i<n;i++)

{   randomize();

for (int i=0; i<n; i++)   d[i]=rand();

a[i]=z5_1(d);

}

ofstream out5("z5.dat");

out5<<"0 "<<n<<"\n";

for(i=0;i<n;i++) out5<<a[i]<<"\n";

out5.close();

cout<<hi2(a,1.);

}

/***************************/

float g(float x)

{  float q;

q=(float)5/3;

return (pow(x,q)*exp(-x));

}

float z6_1(int d[n],float b)

{ int i;

float q;

float M6,ksi,eta;

q=(float)5/3;

M6=g(0.);

if(M6<g(b)) M6=g(b);

if(M6<g(q)) M6=g(q);

i=0;

ksi=d[i]/RAND_MAX*b; eta=d[i+1]/RAND_MAX*M6;

while(eta>g(ksi))

{ i++;

ksi=d[i]/RAND_MAX*b; eta=d[i+1]/RAND_MAX*M6;

}

return ksi;

}

void z6(int d[n],float a[n])

{ float b;

cout<<"\n 6.    ";

cout<<"[0..b] ; b = ";cin>>b;

for(int i=0;i<n;i++)

{   randomize();

for (int i=0; i<n; i++)   d[i]=rand();

a[i]=z6_1(d,b);

}

ofstream out6("z6.dat");

out6<<"Гамма-распределение, t[0]=2.666667, t[1]=1.0000, t[2]=0.0000\n";

out6<<"0 "<<n<<"\n";

for(i=0;i<n;i++) out6<<a[i]<<"\n";

out6.close();

cout<<hi2(a,b);

}

///////////////////////////////////////////

main()

{ int x[n];

float a[n];

//  clrscr();

cout<<"\n"<<n;

//  met1(x);

//  z1(x,a);

//  z2(x,a);

//  z3(x,a);

z4(x,a);

//z5(x,a);

z6(x,a);

return 0;

}