?? mimi.cpp
字號(hào):
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int SUB1();
double SUB2();
int nvalue; //區(qū)間個(gè)數(shù)K
double probd[25]; //存放各區(qū)間最小數(shù)的數(shù)組
long int a1,c1,m1,x1; //定義參數(shù)
void main(){
int i,m,ntypes,nx[20],number,number1;
float mn; //mn就是N/K
long int z0,a0,c0,m0,x0;
double x,xx1,y,yy1,yy2,ro1,ro2, xka2,squ;
printf("\n Following is to test the uniform."); //均勻性檢驗(yàn)
printf("\n Input the number of area:");
scanf("%d",&ntypes); //輸入?yún)^(qū)間個(gè)數(shù)K
printf("\n Input the number of random varible:");
scanf("%d",&number); //輸入隨機(jī)數(shù)個(gè)數(shù)n
printf("\n a,c,m is the parament of the random generator;");
printf("\n z0 is the seed of this random generator.");
printf("\n Input a,c,m,z0=");
scanf("%ld,%ld,%ld,%ld",&a1,&c1,&m1,&x1); //輸入?yún)?shù)
a0=a1,c0=c1,m0=m1,x0=x1,z0=x1;
x=1.0/ntypes;
probd[1]=x;
for(i=2;i<=ntypes;i++) probd[i]=x+probd[i-1]; //求出每個(gè)區(qū)間的最小值
for(i=1;i<=ntypes;i++) nx[i]=0; //置每個(gè)區(qū)間上的隨機(jī)數(shù)個(gè)數(shù)為0
nvalue=ntypes;
for(i=1;i<=number;i++){ //計(jì)算每個(gè)區(qū)間上的隨機(jī)數(shù)的總數(shù)
m=SUB1(); //m為第幾個(gè)區(qū)間
nx[m]=nx[m]+1;
}
mn=(float)number/(float)ntypes; //N/K
xka2=0.0; //x2 =0
for(i=1;i<=ntypes;i++){
squ=nx[i]-mn; //squ= nj-N/K
xka2+=squ*squ/mn; //計(jì)算x2
}
printf("\n a=%f,c=%f,m=%d,z0=%f,"); //打印均勻性檢驗(yàn)的最后結(jié)果
printf("\n The number of random=%d",a1,c1,m1,z0,number);
for(i=1;i<=ntypes;i++)
printf("\n Number(%d)=%d",i,nx[i]);
printf("\n CHI-SQUARE=%f",xka2);
printf("\n Following is to test the independence!"); //獨(dú)立性檢驗(yàn)
printf("\n Input the number of random variable!");
scanf("%d", &number1); //輸入隨機(jī)數(shù)個(gè)數(shù)N
a1=a0;
c1=c0;
m1=m0;
x1=x0;
z0=x1;
x=SUB2(); //x為一個(gè)隨機(jī)數(shù)
yy1=0.0;
yy2=x;
xx1=(x-0.5)*(x-0.5); //xx1=(Ui-1/2)*(Ui-1/2)
for(i=2;i<=number1;i++){
y=SUB2();
xx1+=(y-0.5)*(y-0.5);
yy1+=x*y; //計(jì)算Ui*Ui+j的總和
yy2+=y; //計(jì)算Ui+j的總和
x=y;
}
yy1/=(number1-1.0);
yy2/=number1;
yy2*=yy2;
xx1/=(number-1.0); //計(jì)算S2
ro1=(yy1-yy2)/xx1; //計(jì)算ρ1
ro2=fabs(ro1)*sqrt(number-1.0); //計(jì)算統(tǒng)計(jì)量μ
printf("\n Ro=%f,u=%f",ro1,ro2); // 打印獨(dú)立性檢驗(yàn)的結(jié)果
printf("\n----------Simulation Results----------");
printf("\n \n a=%f,c=%f,m=%d,z0=%f",a1,c1,m1,z0);
printf("\n----------The Uniform----------");
for(i=1;i<=ntypes;i++)
printf("\n Number(%d)=%d",i,nx[i]);
printf("\n Total_number=%d,CHI_SQYARE=%f",number,xka2);
printf("\n----------The Independence----------");
printf("\n Number of sample=%d RO=%f u=%f",number1,ro1,ro2);
}
int SUB1(){ //求出此隨機(jī)數(shù)在哪個(gè)區(qū)間
double u;
int i;
u=SUB2(); //u為隨機(jī)數(shù)
for(i=1;i<nvalue;i++)
if(u<probd[i]) return(i); //返回區(qū)間值
return(nvalue);
}
double SUB2(){ //隨機(jī)數(shù)發(fā)生器
x1=(a1*x1+c1)%m1;
return((double)x1/(double)m1); //返回隨機(jī)數(shù)
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -