void met1(int x[dim])
{ int a,c;
int minim,maxim;
int m;
a=1; c=1; x[0]=0;
for (int i=0; i<dim; i++) x[i+1] = fmod(a*x[i]+c,m);
}
/***** factorial *****/
long double fact(int a)
{ long double f=1;
if(a>1) for (int i=2; i<=a; i++) f = f*i;
return f;
}
/***** sochetanie *****/
double soch(int a,int b)
{ double s,f1,f2,f3;
f1=(double)fact(a);
f2=(double)fact(b-a);
f3=(double)fact(b);
s=f3/(f1*f2);
return s;
}
/***** P{x=i} *****/
double p(int i)
{ double a,b,c;
a=soch(i,k);
b=soch(n-i,N-k);
c=soch(n,N);
return (a*b/c);
}
/***** discret value *****/
void discet(int d[dim], int x[dim])
{int i,l;
double s,p1;
met1(x);
for(i=0;i<dim;i++)
{ l=1;
s=(double)x[i+1]/m-p(0);
while (s>0)
{ l++; p1=p(l-1);
s=s-p1;
}
d[i]=x[l];
}
return;
}
/***** hi2 *****/
float hi2(int d[dim],int nyu[dim],double v[dim])
{double a,h=0.;
int l1,l2;
l1=n+k-N; if(l1<0) l1=0;
l2=n; if(l2>k) l2=k;
for( int l=l1;l<l2;l++)
{ nyu[l-l1]=0; v[l-l1]=0;
for (int i=0;i<n;i++)
if (d[i]=l) { nyu[l-l1]++;
v[l-l1]=v[l-l1]+p(d[i]);
}
}
a=0;
for(int i=0;i<l2-l1;i++) a=a+v[i];
// for(i=0;i<l2-l1;i++) v[i]=v[i]/a;
for(i=0;i<l2-l1;i++)
if (nyu[i]>0)
{ a=(double)(nyu[i]-dim*v[i])/a;
h=h+a*a/(dim*v[i]);
}
nnn=l2-l1;
return h;
}
///////////////////////////////////////////
main()
{ int x[dim],d[dim],nyu[dim];
double v[dim];
double ma,da,ro,h;
clrscr();
ofstream out1("rez.dat");
/* cout<<"N = "; cin>>N;
cout<<"n = "; cin>>n;
cout<<"k = "; cin>>k; */
N=50;//k=20;
for(k=6;k<=44;k++)
for(n=6;n<=44;n++)
{// n=k-1;
discet(d,x);
ofstream out("discret.dat");
for(int i=0;i<dim;i++) out<<d[i]<<"\n";
out.close();
h=hi2(d,nyu,v);
ro=(double)(N-n)/n;
ma=(double)n/(1+ro);
da=(double)n*ro*ro/pow(1+ro,3);
out1<<"h = "<<(h-ma)/da<<" n= "<<n<<" k= "<<k<<" nnn "<<nnn<<"\n";
}
return 0;
}
Выполнение лабораторной работы №3
Методы моделирования произвольно распределенных непрерывных псевдослучайных величин
Цель работы:
Изучение методов, разработка алгоритмов и программ программной имитации непрерывных псевдослучайных величин с произвольным законом распределения. Статический анализ качества псевдослучайных последовательностей.
Задание
1. Найти методом обратной функции моделирующее выражение для случайной величины x, имеющей следующую плотность распределения:
f(x)=C exp( -lx ) xÎ(0;¥)
2. Найти моделирующее выражение для случайной величины x, имеющей следующую плотность распределения, по методу обратной функции, когда моделирующая функция немонотонна
f(x)=C x ( 1+x )2 xÎ(0;1)
3. Написать алгоритм моделирования случайной величины x, распределенной с плотностью f(x), с использованием порядковых статистик:
f(x)=4 (1 - x )3 xÎ(0;1)
4. Написать алгоритм моделирования случайной величины x с плотностью распределения:
f(x)=C x exp( ax ) xÎ(0;b)
5. Написать алгоритм моделирования случайной величины x со следующей плотностью распределения по методу суперпозиции:
f(x)=åan xn xÎ(0;1)
6. Написать алгоритм моделирования случайной величины x со следующей плотностью распределения по методу исключения:
f(x)=C x5/3exp( -x) xÎ(0;b)
Моделирование непрерывных случайных величин.
1. стандартный метод, метод обратной функции
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.