c语言中判断正态分布函数 c语言中判断正态分布函数是否存在

正态分布函数值的c语言代码怎么写double gaussian(double u) //用Box_Muller算法产生高斯分布的随机数
{
double r,t,z,x;
double s1,s2;
s1=(1.0+rand())/(RAND_MAX+1.0);
s2=(1.0+rand())/(RAND_MAX+1.0);
r=sqrt(-2*log(s2)/log(e));
t=2*pi*s1;
z=r*cos(t);
x=u+z*N;
return x;
}
以前写的一个函数,u是均值,N是方差
c语言有matlab中的normpdf和normcdf函数吗?normcdf函数用来获得正态分布的概率分布函数; normpdf用来获得正太分布的概率密度函数 。例如 ,  norcdf(0,0,1)的值是0.5 , 表示N(0) = 0.5 第二个参数是均值,第三个参数是标准差 。
高手进,c语言中如何得到服从正态分布的随机数?用boost的random库方便生成,以下是2个测试 , 分别生成50个数:
// μ = 30, δ^2 = 4
30.84 30.00 26.61 27.49 31.27
29.74 27.99 29.81 29.73 33.29
32.17 31.37 26.83 28.20 27.99
28.69 34.66 25.44 29.22 24.84
29.39 32.02 32.35 28.28 34.16
27.04 32.02 33.40 31.39 29.08
31.91 29.19 29.14 32.25 27.20
32.16 29.06 27.67 29.26 29.51
28.36 28.65 26.87 27.74 26.56
30.16 31.18 30.57 30.57 33.43
// μ = 30, δ^2 = 100
84.66 61.85 24.17 68.63 2.15
1.30 40.92 72.74 74.83 4.25
39.86 27.06 60.94 50.58 79.35
51.83 86.03 74.75 92.33 70.59
93.43 55.51 57.22 70.48 70.52
1.45 22.55 40.85 33.23 65.39
35.54 89.69 45.87 88.35 40.73
67.31 17.64 23.98 98.43 35.93
97.88 48.95 59.54 13.14 45.79
5.55 8.77 70.31 14.83 82.54
#include iostream
#include boost/random.hpp
using namespace std;
typedef boost::minstd_rand GenType;
typedef boost::normal_distribution NormalDis;
typedef boost::variate_generatorGenType, NormalDis RNG;
void Show(RNG rng)
{
cout.setf(ios_base::fixed);
cout.precision(2);
for(int i = 0; i50;)
{
double temp = rng();
if(temp = 1temp = 100)
{
couttemp' ';
if(++i % 5 == 0)
cout'\n';
}
else
continue;
}
coutendl;
}
int main()
{
GenType gt;
NormalDis dis(30, 2); // μ = 30, δ^2 = 4
RNG rng(gt, dis);
Show(rng);
rng.distribution() = NormalDis(30, 100); // μ = 30, δ^2 = 10000
Show(rng);
}
请问:C语言中怎么计算正态分布函数?C语言中计算一个数c语言中判断正态分布函数的N次方可以用库函数pow来实现 。
函数原型c语言中判断正态分布函数:double pow(double x, double y);
功能c语言中判断正态分布函数:计算x^yc语言中判断正态分布函数的值
返 回值:计算结果
举例如下:
double a = pow(3.14, 2);// 计算3.14的平方
注:使用pow函数时c语言中判断正态分布函数,需要将头文件#includemath.h包含进源文件中 。
如何用C语言生成一个正态分布的样本调试程序时,随机数种子可以设常数,例如srand(54321);
用 rand() 产生均匀分布随机数x1,x2
利用瑞利分布得正态分布随机数 y1,y2
再按要求线性缩放一下到[0.01,2] 区间 。
#include stdio.h
#include stdlib.h
#include math.h
#include time.h
main(){
#define N 100
double rd[N];
double x1,x2,y1,y2;
double pi2=6.28318530728,mx,mi,ave=0;
int i;
//srand(54321);
srand(time(NULL));
for (i=0;i=N-2;i=i+2){
x1=1.0*rand()/RAND_MAX;
x2=1.0*rand()/RAND_MAX;
y1= sqrt((-2.0*log(x1))) * cos(pi2*x2);
y2= sqrt((-2.0*log(x1))) * sin(pi2*x2);
rd[i]=y1;
rd[i+1]=y2;
}
mx=rd[0];mi=rd[0];
for (i=0;iN;i++){
if (rd[i]mx)mx=rd[i];
if (rd[i]mi)mi=rd[i];
}
//printf("mi=%lf mx=%lf\n",mi,mx);
for (i=0;iN;i++) rd[i] = (rd[i]-mi)/(mx-mi+0.001) * (2.0-0.01) + 0.01;

推荐阅读