Как случайным образом сгенерировать массив значений типа double со средним значением 0 и стандартным отклонением 1? - PullRequest
2 голосов
/ 11 февраля 2011

для моего домашнего задания я должен сгенерировать набор чисел с фиксированной точкой, который позволяет среднему значению быть 0 и стандартному отклонению равным 1. Я в основном имел дело с массивом двойных чисел, чтобы попытаться это но я не уверен, как этого добиться.

Для генерации значений я попытался использовать метод Бокса-Мюллера, но у меня все равно получилось среднее и стандартное отклонение, которое все еще не соответствует отметке среднего = 1 и sd = 1 для стандартного нормального распределения

ОБНОВЛЕНИЕ: Хорошо, я только что понял свою ошибку. Для коробки Мюллера я набрал 2 вместо 3 вместо. Исправлена ​​проблема сейчас.

//Create Standard Normal Distribution
void std_find(double a[],double s[], int pop, int samp){//
    //generate random numbers for std normal
    double *p;
    p = a;
    //generate numbers in standard normal
    double numA = 0;
    double numB = 0;
    double PI = 3.14159;
    //Box_Muller
    for(int i = 0; i < pop; i= i+2){
        numA = (rand() * 1)/(double)32767;
        numB = (rand() * 1)/(double)32767;
        *p = sqrt((double)-3 * (log(numB))) * cos((double)3* PI*numA);
        p++;
        *p = sqrt((double)-3 * (log(numB))) * sin((double)3 *PI*numA);
        p++;
    }
    double popMean = mean(a,(double)pop);
    //double popMean = (double)0;
    double popSD = sqrt(sampleV(a,pop));
    //double popSD = (double)1;
    cout << "\nPopulation Mean of the std: " << popMean;
    cout << "\nPopulation Standard deviance of std: " << popSD;
    //population created, now to create sample
    sample(a,s,samp,popMean,popSD);
    }

Ответы [ 2 ]

3 голосов
/ 11 февраля 2011

Хороший общий способ сделать это - создать числа, которые следуют стандартному нормальному распределению (определенному как нормальное распределение с µ = 0 и σ = 1). Взгляните на статью в Википедии для нормального распределения, а именно на раздел, который говорит: «Генерация значений из нормального распределения».

2 голосов
/ 11 февраля 2011

Массив значений типа double - это простая часть, верно?

Вам нужно найти способ вывести случайное число из нормализованного гауссовского распределения.

Может быть, вам стоит взглянуть наthis:

Генерация случайных чисел после нормального распределения в C / C ++

...