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

📄 random_n.cpp

📁 随机数变量产生,包括满足均匀分布、泊松分布等各种分布
💻 CPP
字号:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>

double u(void);
double normal(void);
double r(void);
int possion(void);

int main(void)
{
	for (int i=1;i<=100;i++)
	{
		//printf("%lf\n",normal());
		//printf("%lf\n",r());
		printf("%d\n",possion());
		
	}

	return 0;
}

double u(void)									//产生区间(0,1)上的均匀分布随机数
{
	static double zi=10000,zi_1=10000;
	double mod=pow(2,35)-31,a=pow(5,5);

	zi_1=a*zi;

	while (zi_1>=mod)
	{
		zi_1=zi_1-mod;
	}

	zi=zi_1;
	return zi_1/mod;
}

double normal(void)										//均值3.5,标准差5.8 的正态分布
{
	double W=0;
	double u1=0,u2=0;
	double V1=0,V2=0;
	
	do 
	{	
		u1=u();
		u2=u();
		
		V1=2*u1-1;
		V2=2*u2-1;
		W=V1*V1+V2*V2;
	} while(W>1);
	
	double x1=V1*sqrt((-2*log(W))/W);
	double x2=V2*sqrt((-2*log(W))/W);
	
	return 3.5+5.8*x1;
}

double r(void)										//alpha=0.3, beta=4.0的r分布 
{
	double alpha=0.3,beta=4.0;
	double b=(exp(1.0)+alpha)/exp(1.0);

	double u1=0;
	double u2=0;

	double P=0;
	double Y=0;
	int t=1;
	while (t>0)
	{
		u1=u();
		u2=u();

		P=b*u2;
		Y=0;

		if (P>1)
		{
			Y=-log((b-P)/alpha);
			if (u1<pow(Y,alpha-1))
			{
				return Y;
			} 
			else
			{
				continue;
			}
		} 
		else
		{
			Y=pow(P,1/alpha);
			if (u1<exp(-Y))
			{
				return Y;
			} 
			else
			{
				continue;
			}
		}
	}
	return 0;
}

int possion(void)										//均值4.2的泊松分布
{
	int i=0;
	static double lemda=4.2;
	double pi=exp(-lemda),pi_1=exp(-lemda);
	double Fi=pi,Fi_1=Fi;
	double ui_1=u();

	if (ui_1<Fi)
	{
		return 1;
	} 
	else
	{
		do	
		{
			pi=pi_1;
			Fi=Fi_1;

			pi_1=lemda*pi/(i+1);
			Fi_1=Fi+pi_1;

			i=i+1;
		}while (!(ui_1>=Fi && ui_1<Fi_1));

		return i+1;
	}

	return 0;
}


⌨️ 快捷键说明

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