如何用C语言生成一个正态分布的样本

发布网友 发布时间:2022-04-25 17:25

我来回答

3个回答

热心网友 时间:2023-10-22 09:26

调试程序时,随机数种子可以设常数,例如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;i<N;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;i<N;i++) rd[i] = (rd[i]-mi)/(mx-mi+0.001) * (2.0-0.01) + 0.01;
for (i=0;i<N-2;i=i+2) printf("%lf %lf\n",rd[i],rd[i+1]);
return 0;
}

热心网友 时间:2023-10-22 09:27

#include<stdio.h>
#include<math.h>
#include <stdlib.h>
#include <time.h>
#define PI 3.1415926
#define A 1/sqrt(2*PI)
main()
{
int i,n;
int num[200]={0};
float qiwang,fangcha;
double shu[100]={0.0};
double biaozhuncha,temp,x;
clrscr();
printf("input your qiwang:\n");
scanf("%f",&qiwang);
printf("input your fangcha:\n");
scanf("%f",&fangcha);
printf("input you number of yangbendian(<=200)\n");
scanf("%d",&n);
biaozhuncha=sqrt(fangcha);
for(i=0;i<=n;i++)
{
srand((unsigned)time(NULL));
x = rand() / 10000.0;
x=x*pow(-1,rand());
temp=-pow((x-qiwang),2)/(2*fangcha);
shu[i]=A/biaozhuncha*exp(temp);
}
for(i=0;i<=n;i++)
{
printf(" %-3d",num[i]);
printf(" %5.5f",shu[i]);
if(i%5==4) printf("\n");
}
}


我调试通过了,你试试吧,呵呵。

热心网友 时间:2023-10-22 09:27

求问:这个问题你解决了没有呢~~5年了

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com