资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

c语言计算正态分布函数值 c语言生成正态分布随机变量

求大神给出用C语言编程生成正态分布随机数的程序,要不是标准正态分布的

一般有两种算法:

创新互联公司专注于坊子网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供坊子营销型网站建设,坊子网站制作、坊子网页设计、坊子网站官网定制、成都小程序开发服务,打造坊子网络公司原创品牌,更为您提供坊子网站排名全网营销落地服务。

算法一产生12个(0,1)平均分布的随机函数,用大数定理可以模拟出正态分布。

算法二用到了数学中的雅可比变换,直接生成正态分布,但此算法在计算很大规模的数时

会出现溢出错误。

测试程序:

#include math.h

#include stdio.h

#include conio.h

#include stdlib.h

#include time.h

double _random(void)

{

int a;

double r;

a=rand()%32767;

r=(a+0.00)/32767.00;

return r;

}

double _sta(double mu,double sigma)

{

int i;

double r,sum=0.0;

if(sigma=0.0) { printf("Sigma=0.0 in _sta!"); exit(1); }

for(i=1;i=12;i++)

sum = sum + _random();

r=(sum-6.00)*sigma+mu;

return r;

}

double _sta2(double mu,double sigma)

{

double r1,r2;

r1=_random();

r2=_random();

return sqrt(-2*log(r1))*cos(2*M_PI*r2)*sigma+mu ;

}

int main()

{

int i;

double mu,sigma;

srand( (unsigned)time( NULL ) );

mu=0.0;

sigma=1.0;

printf("Algorithm 1:\n");

for(i=0;i10;i++)

printf("%lf\t",_sta(mu,sigma));

printf("Algorithm 2:\n");

for(i=0;i10;i++)

printf("%lf\t",_sta2(mu,sigma));

return 0;

}

//由均匀分布的随机数得到正态分布的随机数

#include math.h

float gasdev(idum)

int *idum;

{

static int iset=0;

static float gset;

float fac,r,v1,v2;

float ran1();//产生均匀分布的随机数,可利用系统函数改写

if (iset == 0) {

do {

v1=2.0*ran1(idum)-1.0;

v2=2.0*ran1(idum)-1.0;

r=v1*v1+v2*v2;

} while (r = 1.0);

fac=sqrt(-2.0*log(r)/r);

gset=v1*fac;

iset=1;

return v2*fac;

} else {

iset=0;

return gset;

}

}

原理可找本数值算法方面的书看看。

正态分布函数值的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++算正态分布的积分

你看看计算公式是不是这样的?

还有精度要多少啊?

查表可知,

F(2.1) =0.9821

F(-0.3)=1-0.6179

F(2.1) - F(-0.3) = 0.6

源程序

#includestdio.h

#includemath.h

double f(double x)

{

return exp(-x*x/2);

}

double F(double a,double b,double ep=1e-6)

{

double h,s1=0,s2=(b-a)*(f(a)+f(b))/2;

int n,k;

for(int n=1;fabs(s1-s2)ep;n*=2)

{

h=(b-a)/n;

s1 = s2;

s2 = 0;

for(int k=0;kn;++k)

{

s2 += h*f(a+(k+0.5)*h);

}

s2 = (s1+s2)/2;

}

return s2*sqrt(1/(8*atan(1.0)));

}

int main()

{

double c,d;

scanf("%lf",c);

scanf("%lf",d);

printf("%lf",F(c,d));

return 0;

}

请问:C语言中怎么计算正态分布函数?

C语言中计算一个数的N次方可以用库函数pow来实现。

函数原型:double pow(double x, double y);

功 能:计算x^y的值

返 回 值:计算结果

举例如下:

double a = pow(3.14, 2); // 计算3.14的平方

注:使用pow函数时,需要将头文件#includemath.h包含进源文件中。


网站名称:c语言计算正态分布函数值 c语言生成正态分布随机变量
转载源于:http://cdkjz.cn/article/dddgcii.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220