📄 uniformrand.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 + -