2021年随机过程实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
过程试验汇报
班级: 通信1004班姓名: 杨靖
学号: U13098
试验目:
了解数产生, 而且利用数来模拟均匀分布、 正态分布、 指数分布、 泊松分布而且计算均值和自相关序列。
试验工具:
C++编程模拟
试验原理:
数产生原理: 经过数学算法产生伪数来, 模拟数产生。
数序列含有循环周期
性。
能够证实, 任何
产生伪数算法总会进入循环, 这么为了确保随
机数序列不产生反复数据, 就要求循环周期足够长。
均匀分布产生原理:
利用线性同余法
(1)设置y0, 即设置种子
(2)yn=kyn-1(mod N), un=yn/N
泊松分布产生原理: 从泊松分布分布律可知, 采取前述方法很不适用。
因为: 所以, 采取递推法组成泊松分布: (1)产生均匀分布数u; (2) (3)若u<F, 令X=i, 停止; (4) (5)转向(3)。
正态分布产生原理:
标准正态变量分布函数 反函数不
存在显式, 所以也不能用逆变法产生。
故采取以下方法:
设Ui ~U(0, 1), i=1,2,…,n, 且相互独立, 由中心极限定理可知, 当n 较大时
设Ui ~U(0, 1), i=1,2,…,n, 且相互独立, E(Ui)=1/2, D(Ui)=1/12, 当n 较大时有:
取n=12, 近似有:
也就是说, 只要产生12个伪数u1,u2,…u12, 将它们加起来, 再减去6, 就能近似得到标准正态变量样本值。
{}!i i e p P X i i λ
λ-===
11(1)!1
i i i e p p i i λλλ
+-+==++0,,;i p e F p λ-===/(1),,1;p p i F F p i i λ=+=+=
+()~(0,1)n i i U nE U Z N -=
∑
~(0,1)
n
i n U Z N -
=
∑12
1
6~(0,1)
i i Z U N ==-∑
指数分布产生原理:
(1)产生均匀分布数{ui};
(2)计算指数分布数: xi=-ln ui /λ
试验代码:
(1)数产生
/*函数功效, 采取线性同余法, 依据输入种子数产生一个伪数, 假如种子不变,
则将能够反复调用产生一个伪序列
利用CMyRand类中定义全局变量: S, K, N, Y。
其中K和N为算法参数, S用于保留种子数, Y为产生数
*/
unsigned int CMyRand::MyRand(unsigned int seed)
{
//添加伪数产生代码
if(S==seed)
{
Y=(K*Y)%N;
}
else
{
S=seed;
Y=(K*S)%N;
}
return Y;
}
该段代码为产生数代码, seed为种子数起到判别作用, 假如是一个新序列开始则S不等于seed, 假如这个序列已经开始了则S=seed, 接下来则用线性同余法来产生0到1之间数。
(2)均匀分布产生
/*函数功效, 产生一个在min~max范围内精度为4位小数平均分布数
*/
double CMyRand::AverageRandom(double min,double max)
{
double dResult;
//添加均匀分布变量产生代码
dResult = 0;
dResult=MyRand(seed);
dResult=(dResult/N)*(max-min)+min;//范围变换
return dResult;
}
该段代码为产生均匀分布代码, 是在产生0到1之间数基础上把范围扩大了任意范围。
范围是在min和max之间
上图为产生400个0到4之间数, 所产生数分布服从均匀分布
横坐标为采样点数, 纵坐标为采样点对应数
该图为均匀分布统计图, 横坐标为0到4之间数, 纵坐标为这些数频度, 这里频度对应是数概率即产生各点概率。
(3)正态分布产生
/*函数功效, 在min 到max 范围内产生正态分布数
miu,最大约率密度处变量, 即产生数中,概率最大那个
sigma
*/
double CMyRand::NormalRandom(double miu, double sigma, double min, double max)
{
double dResult;
//添加正态分布变量产生代码
dResult = 0;
int i;
for(i=0;i<12;i++)
{
dResult+=AverageRandom(min,max);
}
dResult=dResult-6;
dResult=dResult*sigma+miu;
return dResult;
}
该段代码为产生正态分布代码, 其原理在前面“试验原理”中已经说明
上图为产生400个0到4之间数, 所产生数分布服从正态分布
横坐标为采样点数, 纵坐标为采样点对应数, 能够大致看出2点周围点居多
该图为正态分布统计图, 横坐标为0到4之间数, 纵坐标为这些数频度, 这里频度对应是数概率即产生各点概率。
从其外形能够看出和正态分布概率密度图一样, 而且在2周围值概率较大, 期望为2
(4)指数分布产生
/*函数功效, 产生指数分布数
*/
double CMyRand::ExpRandom(double lambda, double min, double max)
{
double dResult = 0.0;
//添加指数分布变量产生代码
dResult=AverageRandom(min,max);
dResult=-log(dResult)/lambda;
return dResult;
}
该段代码为产生指数分布代码, 其原理在前面“试验原理”中已经说明
上图为产生400个0到4之间数, 所产生数分布服从指数分布
横坐标为采样点数, 纵坐标为采样点对应数。
该图为指数分布统计图, 横坐标为0到4之间数, 纵坐标为这些数频度, 这里频度对应是数概率即产生各点概率。
从其外形能够看出和指数分布概率密度图大致一样, 展现指数下滑。
(5)泊松分布产生
/*函数功效, 产生泊松分布数
*/
unsigned int CMyRand::PoisonRandom(double lambda, double min, double max) {
unsigned int dResult = 0;
//添加泊松分布变量产生代码
double v=AverageRandom(min,max);
int i=0;
double p=exp(-1*lambda);
double F=p;
while(v>=F)
{
p=lambda*p/(i+1);
F+=p;
i+=1;
}
dResult=i;
return dResult;
}
该段代码为产生泊松分布代码, 其原理在前面“试验原理”中已经说明
上图为产生400个0到4之间数, 所产生数分布服从泊松分布
横坐标为采样点数, 纵坐标为采样点对应数。
该图为泊松分布统计图, 横坐标为0到4之间数, 纵坐标为这些数频度, 这里频度对应是数概率即产生各点概率。
从其趋势来看和指数分布类似, 成指数下滑趋势, 不过泊松分布统计图形状比指数分布更清楚
(6)求均值
/*函数功效, 计算任意分布过程均值
*/
double CMyRand::Ex(void)
{
double Ex = 0;
//添加均值计算代码
int i;
for(i=0;i<100000;i++)
{
Ex+=NormalRandom(3,1,0,1);//正态分布求均值
}
Ex=Ex/100000;
return Ex;
}
该段代码为求正态分布均值, 该均值求取是依据平均数方法来求取
上图为正态分布均值, 从设置参数NormalRandom(3,1,0,1)能够看出均值为3, 这与图中显示均值相符。
(7)自相关产生
/*函数功效, 计算过程自相关序列
*/
double* CMyRand::Rx(double lambda, int points)
{
int m,I;
double *Rx = (double*)malloc((2*points+1)*sizeof(double));
//添加自相关序列产生代码
//产生自相关序列存入Rx中, Rx可看成数组使用
//不要在本函数中释放该数组!
int j;
I=5;
for (m=-points; m<=points; m++)
{
Rx[(m+points)] = I * I * exp(-2 * lambda * abs(m));
}
return Rx;
}
该段代码为自相关产生, 自相关产生是依据公式R x(τ)=1
N−r ∑x k x k+r
N−r
k=1
来计算N要计算数,
该试验中为400
该图为400个数自相关, 课上计算过6个数自相关, 6个数自相关与该波形特征吻合
试验总结:
此次试验把理论与实际联络起来, 让我们对书本上知识有了直观感受, 这有利于我们了解书上各个分布特。
除了对理论认识加强还提升了我们实践能力。
同时还学习了该软件后, 在以后课程中我们能够用该软件来把书本上内容经过编程变成能够直观了解图形, 这对我们以后学习大有帮助。
经过这次试验收获还是很多。