首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C/C++中有正态分布函数可调用吗?该如何解决

2012-09-12 
C/C++中有正态分布函数可调用吗?请问c++库中 现成的正态函数可以调用吗?我想求个正态分布。急,,,在线等![解

C/C++中有正态分布函数可调用吗?
请问c++库中 现成的正态函数可以调用吗?我想求个正态分布。
 急,,,在线等!

[解决办法]

探讨

怎么都无法打开这个头文件啊?
引用:
#include <random>
std::normal_distribution<...>

[解决办法]
探讨
正态分布就是产生随机数嘛
用rand()
#include <time.h>
#include "stdlib.h"
#include <stdio.h>
void main ()
{


int i,j;
srand((int)time(0));
for (i=0; i<10; i++)
{
j = 1 + (int) (10.0*rand() / (RAND_MAX……

[解决办法]
double AverageRandom(double min,double max)
{
if (max < min)
{
max = min;
}
int minInteger = (int)(min*10000);
int maxInteger = (int)((max+1)*10000);
int randInteger = rand()*rand();
int diffInteger = maxInteger - minInteger;

if (diffInteger <= 0)
{
diffInteger = 10000;
}
int resultInteger = randInteger % diffInteger + minInteger;
return resultInteger/10000.0;
}

double Normal(double x,double miu,double sigma) //概率密度函数
{
WM_STACKTRACK_WITH_PUSH_POP
return 1.0/(sqrt(2*M_PI)*sigma) * exp(-1*(x-miu)*(x-miu)/(2*sigma*sigma));
}
double NormalRandom(double miu, double sigma,double min,double max)//产生正态分布随机数
{
double x;
double dScope;
double y;
int nCount = 0;
do
{
x = AverageRandom(min,max); 
y = Normal(x, miu, sigma);
dScope = AverageRandom(0, Normal(miu,miu,sigma));
nCount ++;
}while( dScope > y && nCount < 10000);
return x;
}
[解决办法]
C/C++ code
/****************************************************    产生N=100个在(0,50)区间内满足对数正态分布的随机数/*****************************************************/#include <stdlib.h>#include <stdio.h>#include <math.h>#include <time.h>#define N 100 #define MAX 50#define MIN 0.1#define MIU 2#define SIGMA 1#define PI 3.14159double AverageRandom(double min,double max)//产生(min,max)之间均匀分布的随机数{        int MINnteger = (int)(min*10000);        int MAXnteger = (int)(max*10000);        int randInteger = rand()*rand();        int diffInteger = MAXnteger - MINnteger;        int resultInteger = randInteger % diffInteger + MINnteger;        return resultInteger/10000.0;}double LogNormal(double x,double miu,double sigma) //对数正态分布概率密度函数{        return 1.0/(x*sqrt(2*PI)*sigma) * exp(-1*(log(x)-miu)*(log(x)-miu)/(2*sigma*sigma));}double Random_LogNormal(double miu,double sigma,double min,double max)//产生对数正态分布随机数{        double x;        double dScope;        double y;        do        {        x = AverageRandom(min,max);         y = LogNormal(x, miu, sigma);        dScope = AverageRandom(0, LogNormal(miu,miu,sigma));        }while( dScope > y);        return x;}void main(void){    srand(time(NULL));    int i,j;    for(i=0,j=0;i<N;i++)    {        printf("%14f", Random_LogNormal(MIU,SIGMA,MIN,MAX));        j++;        if(j==5)        {            printf("\n");    //每行显示5个数            j=0;        }    }}
[解决办法]
按照大数定理,多个均匀分布的随机变量之和呈现正态分布。
如果要求不高的话,比如对于游戏,三个均匀分布之和就够了,至少看起来不错。
[解决办法]
探讨

就是概率论上的概率分布 F(x) = P{X<x} =>在 [param1, param2]上对f(x) 求积分。
在实际解决问题的时候都是 靠查表《正态分布概率表,http://www.programfan.com/blog/article.asp?id=7288》


来解决的。

热点排行