⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uniformrand.c

📁 生成均匀随机数列算法实现和生成高斯随即序列的两种算法实现
💻 C
字号:
/*        均匀分布随机序列的产生和验证                    */

/*  产生含有N个值的均匀分布随机序列               
    求出产生的随机序列的均值和方差
    对所求的自相关函数值来判断是否符合白噪声模型*/

#include "stdio.h"
#include "math.h"
#include "uniform.c"

#define N 1500                /*产生的均匀分布随机序列含有N个值*/
#define M 50                 /*产生的均匀分布随机序列的自相关函数的自变量取值范围,即(0,50)*/

main()
{
 double a,b;
 double X[N],Rx[M];  /*设置数组X[N]存放每次产生的随机序列,设置数组Rx[M]存放自相关函数*/
 double mean,dev;             /*均值mean,方差dev*/
 int i,j;
 long int s;                  /*随机种子*/
 double uniform(double,double,long int*);   /*产生均匀分布的伪随机数函数*/
 int num[15];                 /*设置数组num[15]存放随机序列等间隔(等分为15段)内的随机数数目*/
 double d;                    /*间隔距离*/

 a=1-sqrt(6)/2;  
 b=1+sqrt(6)/2;
 for(i=0;i<M;i++)
 {
  Rx[i]=0;
 }

 scanf("%ld",&s);
  for(i=0;i<(N/5);i++)
   {for(j=0;j<5;j++)
     {X[i*5+j]=uniform(a,b,&s);    /*调用随机数产生函数*/
      printf("%13.7f",X[i*5+j]);
     } 
 printf("\n");
  }
 printf("\n");
  
 mean=0;
 for (i=0;i<N;i++)  mean=mean+X[i];    /*计算随机序列的均值*/              
 mean=mean/N;
 printf("mean=%13.7f    ",mean);
 dev=0;
 for (i=0;i<N;i++)  dev=dev+(X[i]-mean)*(X[i]-mean);    /*计算随机序列的方差*/
 dev=dev/N;
 printf("dev=%13.7f\n\n",dev);

d=(b-a)/15;                          /*将(b,a)等分为15段,d为间隔距离*/
  for(i=0;i<15;i++)  num[i]=0;
  for (i=0;i<N;i++)                    /*计算随机序列等间隔(等分为15段)内的随机数数目*/
  {
     if(X[i]<(a+d)) num[0]++;
	 else if(X[i]<(a+2*d))   num[1]++;
	 else if(X[i]<(a+3*d))   num[2]++;
	 else if(X[i]<(a+4*d))   num[3]++;
	 else if(X[i]<(a+5*d))   num[4]++;
	 else if(X[i]<(a+6*d))   num[5]++;
	 else if(X[i]<(a+7*d))   num[6]++;
	 else if(X[i]<(a+8*d))   num[7]++;
	 else if(X[i]<(a+9*d))   num[8]++;
	 else if(X[i]<(a+10*d))  num[9]++;
	 else if(X[i]<(a+11*d))  num[10]++;
	 else if(X[i]<(a+12*d))  num[11]++;
	 else if(X[i]<(a+13*d))  num[12]++;
	 else if(X[i]<(a+14*d))  num[13]++;
	 else num[14]++;
  }
  for(i=0;i<15;i++)  printf("the number of random figures in (%13.7f,%13.7f) is: %d\n",a+i*d,a+(i+1)*d,num[i]);
  printf("\n");

  for(i=0;i<M;i++)              /*计算自相关函数*/
  {for(j=0;j<N-i;j++)  Rx[i]=Rx[i]+X[j]*X[j+i];                
   Rx[i]=Rx[i]/(N-i);
   printf("%13.7f  \n",Rx[i]);
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -