在通信或者其他仿真的时候

源代码在线查看: n(0,1).cpp

软件大小: 2 K
上传用户: wp1111111
关键词: 通信 仿真
下载地址: 免注册下载 普通下载 VIP

相关代码

				#define N 100000  //定义10万个随机变量
				#define DIV 25    //定义25个区间
				#define SPACING DIV*0.4    //定义区间总长
				#include "math.h"
				#include "stdio.h"
				main()
				{
					
				
					unsigned int M,C,x,i;
					int j;
					double y[N],mid[100],m,n,normal;
					static int z[100]={0,0};
					
					FILE *fp,*abscissa,*ordinate;
					fp=fopen("result.txt","a");
					abscissa=fopen("abscissa.txt","a");
					ordinate=fopen("ordinate.txt","a");
					normal=-6.0;
					M=(unsigned)pow(2,31)-1;   //给常量M赋值
					C=(unsigned)pow(7,5);     //给常量C赋值
					printf("Please input the initial value x(x>0, integer)");
					scanf("%d",&x);        //输入种子数x
				    printf("M=%d\nC=%d\nx=%d\n\n",M,C,x);
					for(i=1;i					{
						x=(C*x)%M;
						y[i]=((double)x)/M;     //产生(0,1)上均匀分布的随机变量y[i]
						normal=normal+y[i];     //用以产生正态分布
						if(i%12==0)
							{			
									for(j=-12;j										{
											m=SPACING/DIV*j-0.2;
											n=SPACING/DIV*(j+1)-0.2;
												if(normal>=m && normal													z[j+12]=z[j+12]+1;	
											mid[j+12]=(m+n)/2;     //取各个区间段的中值作为在MATLAB中画图的横坐标
											
										}
								fprintf(fp,"%35.4f\n",normal);    //将产生的正态分布数据存入文件result.txt中
								normal=-6.0;
							}
					}
					printf("\n\n\n");
					for(j=0;j						printf("z[%d]=%d\n",j,z[j]);  //统计落入各个区间的随机变量的个数
					         
					for(j=0;j						{
							printf("\n\n%f\t-->\t%f",mid[j],0.399*z[j]/z[12]);
							//我们共分了25个区间,程序执行以后,发现第12个区间落入的标准正态分布的随机变量个数最多。为了与标准正态分布的密度函数作比较,我们将z[12]等价为0.399,其余的z[i]数值也做等价转换。这里,0.399是标准正态分布的密度函数在x=0时的取值)
							fprintf(abscissa,"%f\n",mid[j]);   //将25个区间的中值存入文件abscissa.txt中,以便在MATLAB中画图时作为横坐标
							fprintf(ordinate,"%f\n",0.399*z[j]/z[12]); //产生ordinate.txt文件,以便在MATLAB中画图时作为纵坐标
						}
					printf("\n\n");
				fclose(fp);
				fclose(abscissa);
				fclose(ordinate);
				
				}			

相关资源