Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
8
Добавлен:
18.08.2019
Размер:
2.44 Кб
Скачать
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 200//повторы эксперимента для дисперсии
#define nn 10//количество столбиков
#define IA 16807// Минимальный компактный генератор случайных чисел Парка и Миллера
#define IM 2147483647// константы Льюиса-Гудмана-Миллера
#define AM (1./IM)
#define IQ 127773// константы Шаржа
#define IR 2836
#define MASK 123456789// маска чтоб не мешались нули
#define NTAB 32//  числa Бейса-Дурхема
#define NWUP 8
#define NDIV (1+(IM-1)/NTAB)
#define EPS 1.2e-7
#define RNMX (1.0-EPS)
static long dummy;
// начальное значение для всех генераторов
void Seed(long dum) {dummy=dum;}
// возвращает случайное число на промежутке от 0 до 1
float unirand0(void) {
 long k;
 float ans;
 dummy^=MASK;// избегаем dummy==0
 k=dummy/IQ;
 if((dummy=IA*(dummy-k*IQ)-IR*k)<0) dummy+=IM;
 ans=AM*dummy;
 dummy^=MASK;// восстанавливаем dummy
 return(ans);
}

float unirand1(void) {
 int j;
 long k;
 static long iy=0,iv[NTAB];
 float temp;
 // инициализация
 if(dummy<=0 || !iy) {
 // следим, чтобы значение было положительным
 if(dummy<0) dummy=-dummy;
 else if(dummy==0) dummy=1;
 for(j=NTAB+NWUP-1;j>=0;j--) {
 k=dummy/IQ;
 if((dummy=IA*(dummy-k*IQ)-IR*k)<0) dummy+=IM;
 if(j<NTAB) iv[j]=dummy;
 }
 // первый элемент из таблицы
 iy=iv[0];
 }
 // генерируем новое число
 k=dummy/IQ;
 if((dummy=IA*(dummy-k*IQ)-IR*k)<0) dummy+=IM;
 iy=iv[j=iy/NDIV];iv[j]=dummy;
 if((temp=AM*iy)>RNMX) return(RNMX);
 else return(temp);
}

float gauss()
{
    float rnd=0.0;
    int i;
    for(i=1;i<12;i++)rnd+=unirand1();//от нуля до единицы
    return rnd - 6.0;
}

float rayleigh()
{
    float u,l,t;
    u=gauss();l=gauss();
    t = sqrt(l*l+u*u);
    return t;
}

float F(float x)
{
    float p=0,z=1;
    return cos(z*sin(x)-p*x);
}

int main()
{
float a=0,h=3.1415,S = 0,P[nn][nn],x[N],y[N];
int i,k;
FILE *fp = fopen("gyst.txt","w");

for(i=0;i<N;i++)
   S += F(a+h*(1.*rand())/(RAND_MAX+0.));

S *= h/N/3.1415;
  printf("%f ",S);

for(i=0;i<N;i++)
    {
        x[i]=unirand1();//Парк-Миллер с перетасовкой
        y[i]=unirand1();
        //x[i] = gauss();//нормальное распределение Гауса
        //x[i] = rayleigh();//нормальное распределение Рэлея
        //printf("%f\n",x[i]);
    }



/*for(k=0;k<nn;k++)
for(i=0;i<nn;i++)
fprintf(fp,"%f ",P[k][i]);
//printf("%f ",P[k][i]);
*/
fclose(fp);
return 0;
}
Соседние файлы в папке Montecarlo
  • #
    18.08.2019244 б6fileread.sce
  • #
    18.08.20190 б8gyst.txt
  • #
    18.08.20192.44 Кб8main.c
  • #
    18.08.20191.12 Кб8Montecarlo.cbp
  • #
    18.08.2019221 б6Montecarlo.depend
  • #
    18.08.2019398 б6Montecarlo.layout