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

Python017

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

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

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

功 能:计算x^y的值

返 回 值:计算结果

举例如下:

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

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

调试程序时,随机数种子可以设常数,例如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=0i<=N-2i=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=0i<Ni++){

if (rd[i]>mx)mx=rd[i]

if (rd[i]<mi)mi=rd[i]

}

//printf("mi=%lf mx=%lf\n",mi,mx)

for (i=0i<Ni++) rd[i] = (rd[i]-mi)/(mx-mi+0.001) * (2.0-0.01) + 0.01

for (i=0i<N-2i=i+2) printf("%lf %lf\n",rd[i],rd[i+1])

return 0

}