您的位置:首页 > 其它

数字信号产生之正态分布的随机数

2013-09-03 10:39 369 查看
uniform.h

#pragma once

class uniform

{

private:

double a, b, generate_num;

long * seed;

long s;

int M, N, i, j;

public:

uniform()

{

M = 1048576;

N = 2045;

}

void generate();

double random_number(double, double, long *);

};

double uniform::random_number(double a, double b, long * seed)

{

(*seed) = N * (*seed) + 1;

(*seed) = (*seed) - ((*seed) / M) * M;

generate_num = static_cast<double>((*seed)) / M;

generate_num = a + (b - a) * generate_num;

return (generate_num);

}

gauss.h

#pragma once

#include "uniform.h"

uniform unif_num;

class gauss

{

private:

double mean, sigma, x, y, generate_num;

long s;

long * seed;

int i, j, m;

public:

gauss() {}

void generate();

double random_number(double, double, long *);

};

double gauss::random_number(double mean, double sigma, long * seed)

{

x = 0;

for (m = 0; m < 12; m++)

{

x += unif_num.random_number(0.0, 1.0, seed);

}

x = x - 6.0;

y = mean + x * sigma;

return (y);

}

gauss.cpp

//产生50个均值为0、方差为1的正态分布的随机数

#include <iostream>

#include "gauss.h"

#include <iomanip>

using namespace std;

void main()

{

gauss solution;

solution.generate();

}

void gauss::generate()

{

cout << "输入正态分布的均值:";

cin >> mean;

cout << "输入正态分布的均方差:";

cin >> sigma;

cout << "输入随机数的种子:";

cin >> s;

cout << "随机数生成结果为:" << endl;

for (i = 0; i < 10; i++)

{

for (j = 0; j < 5; j++)

{

generate_num = random_number(mean, sigma, &s);

cout << setw(10) << generate_num;

}

cout << endl;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: