随机过程上机实验报告-华中科技大学--HUST
华中科技大学-C语言程序设计_上机2019
华中科技大学信息学院平台课—C语言程序设计
8
第五次上机
• 程序编写 ➢ 输入 n 个整数( n<10),排序后输出。排序的原则由函数 的一个参数决定,参数值为 1,按递减顺序排序,否则按递 增顺序排序。 ➢ 课后习题15
➢ 插入排序
• 课后习题 • 上机指导书
华中科技大学信息学院平台课—C语言程序设计
7
第四次上机
• 1. 已知五位数a2b3c能被23整除,编程求此五位数。 • 2. 编写函数GetMaxMin,求3个整形数据的最大值和最小值,
main函数完成输入3个整数值,调用所编函数计算最大值和最小 值,在main函数中输出最大和最小值。 • 3. 掌握程序调试方法,包括断点、单步、观察变量。(验证第四 章一(1-3))
➢ 输入一个华氏温度,要求输出摄氏温度。公式为c=5(F-32)/9
。取2位小数。
• 课后习题
➢ 五、程序3
➢ 表达式的值
• 上机指导书
华中科技大学信息学院平台课—C语言程序设计
6
第三次上机
• 程序编写 ➢ 第3章 二 4、6、8、12、14
• 课后习题ቤተ መጻሕፍቲ ባይዱ
• 上机指导书
华中科技大学信息学院平台课—C语言程序设计
华中科技大学信息学院平台课—C语言程序设计
3
上机要求
• 教学方式上机需要实验报告(上机前准备好
),给出测试内容(包括定义程序目标、设
计程序),写出代码
• 上机调试,记录出现问题,给出解释
• 用不同颜色笔修改上机报告中的程序
• 交上机报告
华中科技大学信息学院平台课—C语言程序设计
4
第一次上机
随机过程实验报告
一、实验目的1. 理解随机过程的基本概念和性质。
2. 掌握随机过程的基本运算和性质。
3. 通过实验验证随机过程的性质和规律。
二、实验原理随机过程是指一系列随机变量按照一定规则排列而成的序列。
在现实生活中,随机过程广泛存在于自然界和人类社会,如股票价格、气象变化、生物进化等。
随机过程的研究有助于我们更好地理解和预测这些现象。
随机过程可以分为两类:离散随机过程和连续随机过程。
本实验主要研究离散随机过程。
三、实验设备与材料1. 计算机2. 随机过程模拟软件(如Matlab)3. 纸笔四、实验内容1. 随机过程的基本概念(1)随机变量的概念随机变量是指具有不确定性的变量,它可以取多个值。
在随机过程中,随机变量是基本的研究对象。
(2)随机过程的概念随机过程是由一系列随机变量按照一定规则排列而成的序列。
2. 随机过程的基本性质(1)无后效性无后效性是指随机过程的前后状态相互独立。
(2)无记忆性无记忆性是指随机过程的状态只与当前时刻有关,与过去时刻无关。
(3)马尔可夫性马尔可夫性是指随机过程的状态只与当前时刻有关,与过去时刻无关。
3. 随机过程的运算(1)随机过程的和设{Xn}和{Yn}是两个随机过程,则它们的和{Zn}定义为Zn = Xn + Yn。
(2)随机过程的差设{Xn}和{Yn}是两个随机过程,则它们的差{Zn}定义为Zn = Xn - Yn。
(3)随机过程的乘积设{Xn}和{Yn}是两个随机过程,则它们的乘积{Zn}定义为Zn = Xn Yn。
4. 随机过程的模拟利用随机过程模拟软件(如Matlab)模拟随机过程,观察其性质和规律。
五、实验步骤1. 初始化随机数生成器2. 定义随机过程(1)根据随机过程的基本性质,定义随机过程{Xn}。
(2)根据随机过程的运算,定义随机过程{Yn}。
3. 模拟随机过程(1)使用随机过程模拟软件(如Matlab)模拟随机过程{Xn}和{Yn}。
(2)观察模拟结果,分析随机过程的性质和规律。
计算方法上机实习报告5 - 华中科技大学
计算方法上机实习报告 5一. 提出问题(1) 给出概率积分 的数据表:试用二次插值计算(0.472)f 。
(2)已知sin()y x =的函数表试构造出差商表,利用二次Newton 插值公式计算sin1.609(保留五位有效数字)。
(3) 求不高于4次的多项式()H x ,使它满足(1)2,'(1)4,H H =-=(2)'(2)0,(3)2,H H H ===并写出余项表达式。
(4) 用最小二乘法求一个形如2y a bx =+的经验公式,使与下列数据相拟合二. 分析问题(1)题目给出概率积分的四个插值节点,要求用二次插值计算,而我们知道二次插值只需要三个插值节点即可,在该题中我们尝试取前三个点作为插值节点。
该题的重点在求插值基函数11(),(),(),k k k l x l x l x -+而它们由公式()nj n j i jj ix x l x x x =≠-=-∏(1.1)给出。
而0()()nn i i i L x y l x ==∑给出插值公式。
(2)Newton 基本插值公式00100101()()(,)()(,,,)()()...().n n n N x f x f x x x x f x x x x x x x x x =+-++--- (1.2)它的各项系数就是函数的各阶差商,每增加一个插值节点,只需要在原来的基础上多计算一项,这一性质被称作承袭性。
(3)该题需要确定一个4次插值多项式()H x ,就是要获得其各项系数的解。
4次多项式()H x 有5个系数,而题目正好给予了5个条件,这样我们会获得关于系数的非奇异五元一次方程组,在运用第三章的选列主元消元法求出各系数。
(4)本题要求用最小二乘法求经验公式。
实际上也就是确定拟合曲线的各项系数,关于系数(0,1,...,)i a i m =的线性方程组如下: 三.解决问题(1)C 语言代码如下:#include"stdio.h" #include"iostream.h" #include"math.h" #define N 3void Get_l(int k,double x,double xk[N],double L[N]); void main() { int i;double l[N],L[N],x,Lx=0;double xk[N]={0.46,0.47,0.48};double f[N]={0.4846555,0.4937542,0.5027498}; printf("输入需插值节点x:\n"); scanf("%lf",&x); for(i=0;i<N;i++) { Get_l(i,x,xk,l); L[i]=l[i]*f[i]; Lx+=L[i]; }cout.precision(7);cout<<"f(x)="<<Lx<<endl; }/*获得基函数lk(x)*/void Get_l(int i,double x,double xk[N],double l[N]) { int k;double y1=1,y2=1; for(k=0;k<N;k++)if(k!=i){ y1*=(x-xk[k]);y2*=(xk[i]-xk[k]);}l[i]=y1/y2;}结果如下:(2)C语言代码如下:#include"stdio.h"#include"math.h"#define N 3#define M 4void Put_out(int i,double a[N][M]);double Get_value(double x,double a[N][M]);void main(){ int i,j;double a[N][M],sinx,x1;double x[N]={1.5,1.6,1.7};double f[N]={0.99749,0.99957,0.99166};for(i=0;i<N;i++){ a[i][0]=x[i];a[i][1]=f[i];}for(i=0;i<N;i++)Put_out(i,a);printf("k\tf(xk)\t\tf(x0,xk)\tf(x0,x1,xk)\tf(x0,x1,x2,xk)\n");for(i=0;i<N;i++){ printf("%d\t",i);for(j=0;j<i+2;j++){ printf("%lf\t",a[i][j]);}printf("\n");}printf("Putin x:\n");scanf("%lf",&x1);sinx=Get_value(x1,a);printf("sin(%lf)=%lf\n",x1,sinx);}/*输出差商表*/void Put_out(int i,double a[N][M]){ int j;for(j=2;j<M;j++){ if(j<i)a[i][j]=(a[i][j-1]-a[0][j-1])/(a[i][0]-a[j-1][0]);if(j<i+2)a[i][j]=(a[i][j-1]-a[j-2][j-1])/(a[i][0]-a[j-2][0]);elsea[i][j]=0;}}以上代码仅是主函数和输出差商部分,求值用的是选列主元消元法,前面有所涉及,在这里不再赘述。
随机过程上机实验报告讲解
2015-2016第一学期随机过程第二次上机实验报告实验目的:通过随机过程上机实验,熟悉Monte Carlo计算机随机模拟方法,熟悉Matlab的运行环境,了解随机模拟的原理,熟悉随机过程的编码规律即各种随机过程的实现方法,加深对随机过程的理解。
上机内容:(1 )模拟随机游走。
(2)模拟Brown运动的样本轨道。
(3)模拟Markov过程。
实验步骤:(1)给出随机游走的样本轨道模拟结果,并附带模拟程序。
①一维情形%—维简单随机游走% “从0开始,向前跳一步的概率为p,向后跳一步的概率为1-p”n=50;p=0.5;y=[0 cumsum(2.*(rand(1,n-1)v=p)-1)]; % n 步。
plot([0:n-1],y); %画出折线图如下。
w%一维随机步长的随机游动%选取任一零均值的分布为步长,比如,均匀分布。
n=50;x=rand(1,n)-1/2;y=[0 (cumsum(x)-l)];plot([0:n],y);②二维情形%在(u, v)坐标平面上画出点(u(k), v(k)), k=1:n,其中(u(k)) 和(v(k))是一维随机游动。
例%子程序是用四种不同颜色画了同一随机游动的四条轨道。
n=100000;colorstr=['b' 'r' 'g' 'y'];for k=1:4z=2.*(rand(2,n)<0.5)-1;x=[zeros(1,2); cumsum(z')];col=colorstr(k);plot(x(:,1),x(:,2),col);③%三维随机游走 ranwalk3dp=0.5;n=10000; colorstr=['b' 'r' 'g' 'y'];for k=1:4z=2.*(rand(3,n)v=p)-1; x=[zeros(1,3); cumsum(z')];col=colorstr(k);plot3(x(:,1),x(:,2),x(:,3),col);hold on end gridhold onendgrid4:04003?0-200-300-400-2OD20050、-100-200 -20D⑵给出一维,二维Brown运动和Poisson过程的模拟结果,并附带模拟程序,没有结果的也要把程序记录下来。
随机过程实验报告全
随机过程实验报告学院:专业:学号:姓名:一、实验目的通过随机过程的模拟实验,熟悉随机过程编码规律以及各种随机过程的实现方法,通过理论与实际相结合的方式,加深对随机过程的理解。
二、实验内容(1)熟悉Matlab工作环境,会计算Markov链的n步转移概率矩阵和Markov链的平稳分布。
(2)用Matlab产生服从各种常用分布的随机数,会调用matlab自带的一些常用分布的分布律或概率密度。
(3)模拟随机游走。
(4)模拟Brown运动的样本轨道的模拟。
(5)Markov过程的模拟。
三、实验原理及实验程序n步转移概率矩阵根据Matlab的矩阵运算原理编程,Pn = P ^n。
已知随机游动的转移概率矩阵为:P =0.5000 0.5000 00 0.5000 0.50000.5000 0 0.5000求三步转移概率矩阵p3及当初始分布为P{x0 = 1} = p{x0 = 2} = 0, P{x0 = 3} = 1 时经三步转移后处于状态3的概率。
代码及结果如下:P = [0.5 0.5 0; 0 0.5 0.5; 0.5 0 0.5] %一步转移概率矩阵P3 = P ^3 %三步转移概率矩阵P3_3 = P3(3,3) %三步转移后处于状态的概率1、两点分布x=0:1;y=binopdf(x,1,0.55);plot(x,y,'r*');title('两点分布');2、二项分布N=1000;p=0.3;k=0:N;pdf=binopdf(k,N,p);plot(k,pdf,'b*');title('二项分布');xlabel('k');ylabel('pdf');gridon;boxon3、泊松分布x=0:100;y=poisspdf(x,50);plot(x,y,'g.');title('泊松分布')4、几何分布x=0:100;y=geopdf(x,0.2);plot(x,y,'r*');title('几何分布');xlabel('x');ylabel('y');5、泊松过程仿真5.1 % simulate 10 timesclear;m=10; lamda=1; x=[];for i=1:ms=exprnd(lamda,'seed',1);x=[x,exprnd(lamda)];t1=cumsum(x);end[x',t1']5.2%输入:N=[];for t=0:0.1:(t1(m)+1)if t<t1(1)N=[N,0];elseif t<t1(2)N=[N,1];elseif t<t1(3)N=[N,2];elseif t<t1(4)N=[N,3];elseif t<t1(5)N=[N,4];elseif t<t1(6)N=[N,5];elseif t<t1(7)N=[N,6];elseif t<t1(8)N=[N,7];elseif t<t1(9)N=[N,8];elseif t<t1(10)N=[N,9];elseN=[N,10];endendplot(0:0.1:(t1(m)+1),N,'r-') 5.3% simulate 100 timesclear;m=100; lamda=1; x=[];for i=1:ms= rand('seed');x=[x,exprnd(lamda)];t1=cumsum(x);end[x',t1']N=[];for t=0:0.1:(t1(m)+1)if t<t1(1)N=[N,0];endfor i=1:(m-1)if t>=t1(i) & t<t1(i+1)N=[N,i];endendif t>t1(m)N=[N,m];endendplot(0:0.1:(t1(m)+1),N,'r-')6、泊松过程function I=possion(lambda,m,n)for j=1:mX=poissrnd(lambda,[1,n]); %参数为lambda的possion 过程N(1)=0;for i=2:nN(i)=N(i-1)+X(i-1);endt=1:n;plot(t,N)grid onhold onend7、布朗运动7.1一维布朗运动程序:function [t,w]=br1(t0,tf,h)t=t0:h:tf;t=t';x=randn(size(t));w(1)=0;for k=1:length(t)-1w(k+1)=w(k)+x(k);endw=sqrt(h)*w;w=w(:);end调用t0=1;tf=10;h=0.01;[t,w]=br1(t0,tf,h);figure;plot(t,w,'*');xlabel('t');ylabel('w');title('一维Brown运动模拟图'); 7.2二维布朗运动:function [x,y,m,n]=br2(x0,xf,y0,yf,h)x=x0:h:xf;y=y0:h:yf;a=randn(size(x));b=randn(size(y));m(1)=0;n(1)=0;for k=1:length(x)-1m(k+1)=m(k)+a(k);n(k+1)=n(k)+b(k);endm=sqrt(h)*m;n=sqrt(h)*n;end调用x0=0;xf=10;h=0.01;y0=0;yf=10;[x,y,m,n]=br2(x0,xf,y0,yf,h);figure;plot(m,n);xlabel('m');ylabel('n');title('二维Brown运动模拟图');7.3三维布朗运动:npoints =1000;dt = 1;bm = cumsum([zeros(1, 3); dt^0.5*randn(npoints-1, 3)]);figure(1);plot3(bm(:, 1), bm(:, 2), bm(:, 3), 'k');pcol = (bm-repmat(min(bm), npoints, 1))./ ...repmat(max(bm)-min(bm), npoints, 1);hold on;scatter3(bm(:, 1), bm(:, 2), bm(:, 3), ...10, pcol, 'filled');grid on;hold off;8、马尔科夫链离散服务系统中的缓冲动力学m=200;p=0.2;N=zeros(1,m); %初始化缓冲区A=geornd(1-p,1,m); %生成到达序列模型, for n=2:mN(n)=N(n-1)+A(n)-(N(n-1)+A(n)>=1);endstairs((0:m-1),N);9、随机数游走9.1 100步随机游走n = 100; %选取步数。
随机过程-实验报告
(1) 计算 2 步转移概率;(2) 已知初始分布为 P 2 / 5, 2 / 5,1 / 5 ,求 X 2 的分布律 (3) 求平稳分布,要求给出程序与结果。 程序:
程序: p=[0.2 0.8 0;0.8 0 0.2; 0.1 0.3 0.6]; P2=p^2 a=[p'-eye(3);ones(1,3)];b=[0 0 0 1]';T=a\b 结果:
0.1389
0.0611
解:由题意可知,该问题的转移概率矩阵 P 为:
8
0 .2 P 0 .8 0 .1
9
实验三
实验题目 实验目的 实验地点及时间 模拟 Possion 流 用 Matlab 语言产生随机数,了解 Possion 流 信息楼 127 机房 2012 年 6 月 4 日
4
实验内容 用 Matlab 语言产生随机数,并编程实现 possion 流的模拟 程序: U=rand(1,20); a=2; X=-a^(-1)*log(U); S=zeros(1,22); d=zeros(1,22); S(1)=0;S(2)=X(1); for n=3:21 S(n)=S(n-1)+X(n-1); end for i=0:21 %--if 0<=i<S(2) d(i+1)=0; else for j=2:21 if (S(j)<=i)&(S(j+1)<i) d(i+1)=j; end end end end plot(d)
实验内容 判定一个 Markov 链是否是遍历的,若是遍历的,求其极限分布。并能从实际问 题中抽象出 Markov 链,并求出其极限分布,并理解其实际意义。 实验习题 1、已知齐次马氏链 X n , n 0,1, 2, 的状态空间 E 1, 2, 3 ,状态转移矩阵为
华中科技大学博士研究生入学考试《随机过程》考试大纲
华中科技大学博士研究生入学考试《随机过程》考试大纲一.概率论部分(30%):1. 随机事件和概率(1)随机事件和样本空间的概念,随机事件的关系和运算(2)事件的概率定义(包括古典型概率,几何型概率)及其计算(3)条件概率的定义,事件的独立性定义2.一维随机变量及其分布(1)随机变量定义,分布函数定义及性质(2)离散型随机变量①离散型随机变量的定义和分布列②几种典型的离散型随机变量:两点分布,二项分布,泊松分布,几何分布(3)连续型随机变量①连续型随机变量的定义②概率密度函数的性质③几种典型的连续型随机变量:均匀分布,指数分布,正态分布(4)随机变量函数的分布3.二维随机变量及其分布(1)二维随机变量的定义(2)边缘分布,条件分布,随机变量的独立性(3)二维随机变量函数的分布4.数字特征(1)随机变量的数学期望(2)随机变量的方差(3)协方差和相关系数(4)协方差矩阵二.随机过程部分(70%):1.随机过程的基本概念与基本类型(1)随机过程的基本概念(2)随机过程的分布律和数字特征①求解随机过程的一维、二维分布函数(或者概率密度函数)②数字特征:均值函数m x(t) ,方差函数D x(t),协方差函数C x(t1, t2) ,相关函数R x(t1, t2) ,特征函数g x(u) = E{ exp( j•u•x(t) ) }2.平稳随机过程(宽平稳)(1)平稳随机过程的定义,根据定义判断随机过程是否平稳(2)平稳随机过程的相关函数性质3.平稳随机过程的谱分析(宽平稳)(1)平稳过程的总能量,平均功率,平均功率谱密度(以下均简称:谱密度)三者的定义;以及这三者之间的关系(2)谱密度的性质①平稳过程的谱密度与相关函数是对应的傅里叶变换(3)平稳过程通过线性系统的分析输入X(t)是平稳过程,①均值函数:m y(t) = m x(t) *h(t) = 常数②相关函数: R y(t , t +τ) = R x(t , t +τ)* h(τ) * h(-τ)= R x(τ)* h(τ) * h(-τ)③综合①、②,输出Y(t)也是平稳过程④功率谱密度:S y(ω) = S x(ω) ·|H(jω)|24.马尔柯夫链(1)马尔柯夫链的定义(2)一步转移概率,一步转移概率矩阵P ;k步转移概率,k步转移概率矩阵P(k) ;及其关系:P(k) = P k(3)马尔柯夫链遍历性的判断和平稳分布的求解5.泊松过程(1)泊松过程的定义(2)泊松过程的基本性质P 406.正态过程(1)正态过程的定义(2)正态过程的基本性质①正态过程的一维分布是正态分布②正态过程的二维分布是二维正态分布,③根据均值函数m x(t) , 相关函数R x(t1, t2) 能确定有限维分布。
华中科技大学C语言实验与课程设计上机实验报告汇总(1~8全部)
华中科技大学C语言实验与课程设计实验报告计算机科学与技术学院指导老师:目录1 表达式和标准输入输出实验 (3)2 流程控制实验 (11)3 函数程序与结构实验 (20)4 编译预处理实验 (28)5 数组实验 (35)6 指针实验 (42)7 结构与联合实验 (52)8 文件实验 (61)华中科技大学C语言实验与课程设计实验报告CS1408赵晓雁1 表达式和标准输入与输出实验1.1 实验目的(1) 熟练掌握各种运算符的运算功能,操作数的类型,运算结果的类型及运算过程中的类型转换,重点是C语言特有的运算符,例如位运算符,问号运算符,逗号运算符等;熟记运算符的优先级和结合性。
(2)掌握scanf 和printf 函数的用法。
(3)掌握简单C程序(顺序结构程序)的编写方法。
1.2 实验内容及结果1.2.1.源程序改错下面给出了一个简单C语言程序例程,用来完成以下工作:(1)输入华氏温度f,将它转换成摄氏温度C后输出;(2)输入圆的半径值r,计算并输出圆的面积s;(3)输入短整数k、p,将k的高字节作为结果的低字节,p的高字节作为结果的高字节,拼成一个新的整数,然后输出;在这个例子程序中存在若干语法和逻辑错误。
要求参照2.1.3和2.1.4的步骤对下面程序进行调试修改,使之能够正确完成指定任务。
程序代码:#include<stdio.h>#define PI 3.14159;voidmain( void ){int f ;short p, k ;double c , r , s ;/* for task 1 */printf(“Input Fahrenheit:” ) ;scanf(“%d”, f ) ;c = 5/9*(f-32) ;printf( “ \n %d (F) = %.2f (C)\n\n ”, f, c ) ;/* for task 2 */printf("input the radius r:");scanf("%f", &r);s = PI * r * r;printf("\nThe acreage is %.2f\n\n",&s);/* for task 3 */printf("input hex int k, p :");scanf("%x %x", &k, &p );3处的语句,使之实现两数对调的操作。
华中科技大学操作系统实验报告
华中科技大学电信学院操作系统实验报告电子信息与通信学院班级:电信1202班姓名:XX学号:U*******XX时间:2014年11月5日实验一哲学家就餐问题一.实验目的1.熟悉哲学家就餐问题流程,编译程序,了解程序运行过程。
2.理解利用设置信号量及P、V操作解决进程间的互斥这一方法,并了解其代码实现的相关方法,提炼出代码的思想(用伪代码表示)。
3.对哲学家就餐问题提出新的解决方式,并简述其实现过程。
二.实验原理1、问题描述有五个哲学家围坐在一圆桌旁,桌中央有一盘通心粉,每人面前有一只空盘子,每两人之间放一只筷子。
每个哲学家的行为是思考,感到饥饿,然后吃通心粉。
为了吃通心粉,每个哲学家必须拿到两只筷子,并且每个人只能直接从自己的左边或右边去取筷子。
2、分配方式方式一(不会进入死锁)仅当一个哲学家左右两边的筷子都可用时,才允许他拿筷子。
这样要么一次占有两只筷子(所有线程需要的资源)进行下一步的吃通心粉,然后释放所有的资源;要么不占用资源,这样就不可能产生死锁了。
方式二(会进入死锁)当筷子(资源)可用时,先分配左边的筷子,等待一会后再分配右边的筷子,由于这个过程中,左边的筷子一直没有释放,就有可能产生死锁了。
3、程序运行说明程序运行过程中会弹出一个MessageBox提示操作者操作:1)第一个对话框用于选择运行模式a.选择yes 表示采用的是运行的防止死锁的方式,这样的话整个程序可以一直运行下去,不会产生死锁。
b.选择no 表示运行产生死锁的方式会弹出第二个对话框。
2)第二个对话框用于选择运行时,线程运行的时间a. 选择res 线程时间比较短,很快就可以死锁b.选择no 线程时间跟选择yes 时候的时间差不多,产生死锁的时间稍微长一点。
三.实验程序流程及分析1、PhilosopherThread函数源代码DWORD WINAPI PhilosopherThread(LPVOID pVoid){HANDLE myChopsticks[2];int iPhilosopher = (int) pVoid;int iLeftChopstick = iPhilosopher;int iRightChopstick = iLeftChopstick + 1;DWORD result;if (iRightChopstick > PHILOSOPHERS-1) //筷子编号过了5就使它为0iRightChopstick = 0;//Randomize the random number generatorsrand( (unsigned)time( NULL ) * (iPhilosopher + 1) );// remember handles for my chopsticksmyChopsticks[0] = gchopStick[iLeftChopstick]; //定义哲学家的左右筷子myChopsticks[1] = gchopStick[iRightChopstick];gDinerState[iPhilosopher] = RESTING; //wants chopsticksSleep(P_DELAY);for(;;){if (bWaitMultiple == FALSE){// Wait until both of my chopsticks are availablegDinerState[iPhilosopher] = WAITING; //wants chopsticksPostMessage(hWndMain, WM_FORCE_REPAINT,0 ,0);result = WaitForSingleObject(gchopStick[iLeftChopstick], INFINITE);MTVERIFY(result == WAIT_OBJECT_0);gChopstickState[iLeftChopstick] = iPhilosopher;Sleep(P_DELAY/4);gDinerState[iPhilosopher] = WAITING; //wants chopsticksPostMessage(hWndMain, WM_FORCE_REPAINT,0 ,0);result = WaitForSingleObject(gchopStick[iRightChopstick], INFINITE);MTVERIFY(result == WAIT_OBJECT_0);gChopstickState[iRightChopstick] = iPhilosopher;}else{// Wait until both of my chopsticks are availablegDinerState[iPhilosopher] = WAITING; //wants chopsticksPostMessage(hWndMain, WM_FORCE_REPAINT,0 ,0);result = WaitForMultipleObjects(2, myChopsticks, TRUE, INFINITE);MTVERIFY(result >= WAIT_OBJECT_0 && result < WAIT_OBJECT_0 + 2);gChopstickState[iLeftChopstick] = iPhilosopher;gChopstickState[iRightChopstick] = iPhilosopher;}// Philosopher can now eat a grain of ricegDinerState[iPhilosopher] = EATING; //philosopher is eatingPostMessage(hWndMain, WM_FORCE_REPAINT,0 ,0);Sleep(P_DELAY);// Put down chopsticksgDinerState[iPhilosopher] = RESTING; //philosopher is restinggChopstickState[iRightChopstick] = UNUSED;gChopstickState[iLeftChopstick] = UNUSED;PostMessage(hWndMain, WM_FORCE_REPAINT,0 ,0);MTVERIFY( ReleaseMutex(gchopStick[iLeftChopstick]) ); //释放筷子资源MTVERIFY( ReleaseMutex(gchopStick[iRightChopstick]) );// Philosopher can now meditateSleep(P_DELAY);} // end forreturn 0;}2、伪代码对于每一个哲学家来说,他们需要抢占的临界资源就是左右的两支筷子。
华中科技大学计算机原理实验报告
-电气学科大类《计算机原理与应用实验》课程实验报告电气与电子工程学院2012级姓名:学号:专业班号:日期:2014年1月7日实验成绩:评阅人:实验评分表基本实验实验名称实验分值评分实验一EMU8086软件安装与使用实验二汇编语言实例讲解与程序编写实验三基于Proteus软件8086最小系统硬件设计实验四基于8086最小系统的汇编程序设计实验五8255并行接口实验(演示实验)设计性实验实验名称实验分值评分实验六工频测频接口电路设计与实现教师评价意见总分(100)目录实验评分表 (I)实验一:EMU8086软件安装与使用 (1)一、实验目的 (1)二、实验设备 (1)三、实验任务 (1)四、实验原理 (1)五、实验内容 (1)六、实验过程及结果 (2)七、实验感想 (6)八、参考文献 (6)实验二:汇编语言实例讲解与程序编写 (7)一、实验目的 (7)二、实验设备 (7)三、实验任务 (7)四、实验原理 (7)五、实验内容 (8)六、实验过程及结果 (9)七、实验感想 (20)八、参考文献 (20)实验三:基于PROTEUS软件的8086最小系统硬件设计 (21)一、实验目的 (21)二、实验设备 (21)三、实验任务 (21)四、实验原理 (21)五、实验内容 (23)六、实验过程及结果 (23)七、实验感想 (27)八、参考文献 (28)实验四:基于8086最小系统的汇编程序设计 (29)一、实验目的 (29)二、实验设备 (29)三、实验任务 (29)四、实验原理 (29)五、实验内容 (30)六、实验过程及结果 (31)七、实验感想 (34)八、参考文献 (35)实验五:8255并行接口实验(演示实验) (36)一、实验目的 (36)二、实验设备 (36)三、实验任务 (36)四、实验原理 (36)五、实验内容 (37)六、实验过程及结果 (38)七、实验感想 (39)八、参考文献 (39)实验六:工频测频接口电路设计与实现 (41)一、实验目的 (41)二、实验设备 (41)三、实验任务 (41)四、实验原理 (41)五、实验内容 (44)六、实验过程及结果 (45)七、实验感想 (46)八、参考文献 (46)实验一:EMU8086软件安装与使用一、实验目的通过本实验学习EMU8086软件的安装与使用。
随机过程上机实验报告-华中科技大学--HUST
6、/*函数功能,计算任意分布的随机过程的均值
*/
double CMyRand::Ex(void)
{
double Ex = 0;
//添加均值计算代码
int i;
double sum=0;
for(i=0;i<500;i++)
sum+=AverageRandom(0,2);
Ex=sum/i;
return Ex;
Miu为均值,sigma为标准差
*/
double CMyRand::NormalRandom(double miu, double sigma, double min, double max)
{
double dResult;
dResult = 0;
int i,n;
double sum=0.0;
n=200;
我们在示波器界面上点击一个按钮它就会执行这个按钮所对应功能比如点击正态分布它就会调用crandomdlg中的对应凼数在调用cmyrand中的产生正态分布的凼数再将结果送到cscope类中迚行显示最后我们可以在示波器上看到图形
随
班级:通信1301班
姓名:郭世康
学号:U201313639
指导教师:卢正新
dResult=dResult*(max-min)+min;//将0~1之间的均匀分布通过乘以倍数放大到到min~max
return dResult;
}
输入参数为min,max,即均匀分布的范围。输出参数为dResult,即为随机序列。
流程图:
3、
/*函数功能,根据大数定律,在min到max范围内产生正态分布的随机数
流程图:
随机过程实验报告
师范学院
实验报告
2)计算x的方差(var())
实 验 内 容 及 步 骤 (续)
3) 利用rnorm 生成100个随机数赋值给变量y ,计算x 、y 的协方差(cov()),相关系数(cor())。
4) 将变量x 、y 放到数据框A 中(用data.frame()函数),计算A 的协方差矩阵(cov())、相关系数矩阵(cor()).
2.利用rnorm 函数生成随机向量x (长度100),将x 转换为一个10阶矩阵A 。
rnorm
1) 计算A 的特征值和特征向量
2)计算A的逆
3)随机生成长度为10的向量b,求解线性方程组Ay b
3.随机生成随机向量x(长度10)。
将x的数据复制到文本文件data.txt中,并保存。
利用read.table()函数,将data.txt中的数据重新读入到R工作空间中,并命名为y。
实验心得
这次试验是我第一次接触R语言,刚开始遇到了很多困难,对于R语言一窍不通,后来经过老师的悉心指导,以及自己积极的去查找资料,对R 语言有了进一步的了解。
这次试验通过随机生成数字,并且对对其进行运、组合、求解,定义函数,以及生成表。
在此过程中,锻炼了自己的学习能力、动手操作能力,也让我对R语言产生了兴趣,发现R语言与matlab 相似之处,以及方便之处。
希望以后有机会可以更加系统的掌握、了解R语言,并达到熟练的应用。
学习并提升了R语言的使用能力,更好的实现课本与实际操作的结合,让我更好的学习并理解了应用随机过程这门课。
评语。
华中科技大学数据结构上机报告
《数据结构》上机报告实验名称Huffman编码专业:电子信息工程班级:xxxxxx学号:xxxxxxx姓名:xxxxxx指导教师:xxxxxx完成日期:2013-12-5一、需求分析根据字母的出现次数对每个字母进行编码,编码形式为二进制。
字母的出现次数作为权值建立Huffman树对26个字母进行Huffman编码并输出编码结果。
二、设计概要由于Huffman树的节点数是已知的,所有Huffman树可以采用顺序存储结构。
每个字母的Huffman编码使用数组存储,数组的首地址存储在一个指针数组内,类似于一个不等长的二维数组。
相关函数:void HuffmanTreeing(HuffmanTree &HT, int *w, int n); //建立Huffman树void HuffmanCoding(HuffmanTree &HT, HuffmanCode &HC, int n); //Huffman 编码void DestroyTree(HuffmanTree &HT, HuffmanCode &HC, int n); //销毁Huffman 树三、详细设计(代码):/*---------------头文件huffmantree.h---------------*/typedef struct{int weight;int parent, left, right;}HTNode, *HuffmanTree;typedef char **HuffmanCode;void HuffmanTreeing(HuffmanTree &HT, int *w, int n);//构造huffman树,有n个元素,w是权重void HuffmanCoding(HuffmanTree &HT, HuffmanCode &HC, int n);//对huffman树进行编码,结果输出到HC数组内void DestroyTree(HuffmanTree &HT, HuffmanCode &HC, int n);//销毁堆分配的树空间以及编码空间/*---------------函数定义huffmantree.cpp---------------*/#include "huffmantree.h"#include <stdio.h>#include <malloc.h>#include <string.h>static int selectmin(HuffmanTree HT, int n);//挑选权重最小且parent为0的节点void HuffmanTreeing(HuffmanTree &HT, int *w, int n){//huffman树无度为1的节点,有n个叶子节点,n-1个度为2的节点int m = 2 * n - 1;int i;//分配树空间,用数组存储HT = (HuffmanTree)(malloc(sizeof(HTNode) * m));//初始化每个节点的信息for(i = 0; i < n; i++){HT[i].weight = w[i];HT[i].left = HT[i].parent = HT[i].right = 0;}for(; i < m; i++){HT[i].weight = 0;HT[i].left = HT[i].parent = HT[i].right = 0;}//建树for(i = n; i < m; i++){int j;j = selectmin(HT, i);HT[j].parent = i;HT[i].left = j;HT[i].weight = HT[j].weight;j = selectmin(HT, i);HT[j].parent = i;HT[i].right = j;HT[i].weight += HT[j].weight;}}void HuffmanCoding(HuffmanTree &HT, HuffmanCode &HC, int n){//临时数组,编码最长为n-1char *cd = (char *)malloc(sizeof(char) * n);//HC是一个指针数组,也可以看作是一个不等长的二维数组HC = (HuffmanCode)malloc(sizeof(char *) * n);cd[n - 1] = 0;//对每个元素进行编码for(int i = 0; i < n; i++){int par = HT[i].parent;int start = n - 1;int son = i;//由下至上编码,编码由后往前临时存储在cd数组内while(par != 0){if(HT[par].left == son)cd[--start] = '0';elsecd[--start] = '1';son = par;par = HT[par].parent;}//将编码转存到HC数组中HC[i] = (char *)malloc(sizeof(char) * (n - start));strcpy(HC[i], cd + start);}free(cd);}static int selectmin(HuffmanTree HT, int n){//挑选权重最小且没有父亲(即parent == 0)的节点int min;int i = 0;while(HT[i].parent != 0)i++;min = i;for(i = i + 1; i < n; i++){if(HT[i].parent != 0)continue;if(HT[i].weight < HT[min].weight)min = i;}return min;}void DestroyTree(HuffmanTree &HT, HuffmanCode &HC, int n) {free(HT);for(int i = 0; i < n; i++){free(HC[i]);}free(HC);}/*---------------主函数test.cpp---------------*/#include "huffmantree.h"#include <stdio.h>#include <ctype.h>#include <stdlib.h>#define N 26struct elem{char word[N];int weight[N];};int main(){int w[N] = {0};int n = 0;char ch;struct elem zimu;FILE *fp;HuffmanTree HT;HuffmanCode HC;if((fp = fopen("in.txt", "r")) == NULL)exit(0);//统计各字母出现的频次while((ch = fgetc(fp)) != EOF){if(islower(ch))w[ch - 'a']++;if(isupper(ch))w[ch -'A']++;}fclose(fp);//将信息存入一个结构体中,主要是为了排除权重为0的字母for(int i = 0; i < N; i++){if(w[i] != 0){zimu.word[n] = 'A' + i;zimu.weight[n] = w[i];n++; //n为权重不为零的字母个数}}HuffmanTreeing(HT, zimu.weight, n);HuffmanCoding(HT, HC, n);//将编码输出到文件if((fp = fopen("out.txt", "w")) == NULL)exit(0);for(int i= 0; i < n; i++)fprintf(fp, "%c\t%d\t%s\n", zimu.word[i], zimu.weight[i], HC[i]);fclose(fp);DestroyTree(HT, HC, n);return 0;}四、实验结果:/*---------------输入in.txt---------------*/PRESIDENT OBAMA: I want to welcome Vice President Xi to the Oval Office and welcome him to the United States. This is obviously a great opportunity for us to build on the U.S.-China relationship, but also an opportunity to return the extraordinary hospitality that Vice President Xi showed Vice President Biden during his recent visit to China.As I indicated during my recent visit to APEC and the East Asia Summit, the United States is a Pacific nation. And we are very interested and very focused on continuing to strengthen our relationships, to enhance our trade and our commerce, and make sure that we are a strong and effective partner with the Asia Pacific region. And obviously, in order to do that, it is absolutely vital that we have a strong relationship with China./*---------------输出out.txt---------------*/A 54 1110B 7 1011011C 23 10111D 27 11110E 70 010F 8 000110G 8 000111H 27 11111I 64 001K 1 10110100L 14 00001M 10 101001N 49 1101O 46 1100P 16 00010R 39 1001S 38 1000T 73 011U 21 10101V 13 00000W 9 101000X 3 10110101Y 10 101100。
华科_HUST_微机原理_类MIPS单周期微处理器设计_实验报告
微机原理实验报告学号姓名华中科技大学专业通信1301指导教师罗杰院(系、所)电信学院类MIPS单周期微处理器设计一.实验目的1.了解微处理器的基本结构。
2.掌握哈佛结构的计算机工作原理。
3.学会设计简单的微处理器。
4.了解软件控制硬件工作的基本原理。
二.实验任务利用HDL语言,基于Xilinx FPGA nexys4实验平台,设计一个能够执行以下MIPS指令集的单周期类MIPS处理器,要求完成所有支持指令的功能仿真,验证指令执行的正确性,要求编写汇编程序将本人学号的ASCII码存入RAM的连续内存区域。
(1)支持基本的算术逻辑运算如add,sub,and,or,slt,andi指令(2)支持基本的内存操作如lw,sw指令(3)支持基本的程序控制如beq,j指令三.各模块实现原理1.指令存储器设计指令存储器为ROM类型的存储器,为单一输出指令的存储器。
设置一个程序计数器指针PC指向指令存储器,当时钟上升沿到来时,取出PC所指的指令,当时钟的下降沿到来时,修改PC的值,使其指向下一条要执行的指令。
因此其对外的接口为clk、存储器地址输入信号(指令指针)以及数据输出信号(指令)。
在本实验中调用ISE提供的IP核进行设计,设定的指令存储器大小为128字。
指令存储器模块在顶层模块中被调用。
输入为指令指针(PC)与时钟信号(clkin),输出为32位的机器指令,并将输出的机器指令送到后续的寄存器组模块、控制器模块、立即数符号扩展模块进行相应的处理。
2.数据存储器设计数据存储器为RAM类型的存储器,并且需要独立的读写信号控制。
因此其对外的接口为clk、we、datain、addr;输出信号为dataout。
当时钟上升沿到来时,如果写信号(we)为真,根据addr所表示的地址找到对应的存储单元,并将输入的数据(datain)写到对应的存储单元中;如果写信号为假,则根据addr所表示的地址,将对应存储单元的数据送到输出端(dataout)。
随机过程实验讲义
随机过程实验讲义刘继成华中科技大学数学与统计学院2011-2012年上半年为华中科技大学数学系本科生讲授随机过程课程参考资料前言 (1)第一章Matlab 简介 (2)第二章简单分布的模拟 (6)第三章基本随机过程 (9)第四章Markov过程 (12)第五章模拟的应用和例子 (16)附录各章的原程序 (51)参考文献 (75)若想检验数学模型是否反映客观现实,最自然的方法是比较由模型计算的理论概率和由客观试验得到的经验频率。
不幸的是,这两件事都往往是费时的、昂贵的、困难的,甚至是不可能的。
此时,计算机模拟在这两方面都可以派上用场:提供理论概率的数值估计与接近现实试验的模拟。
模拟的第一步自然是在计算机程序的算法中如何产生随机性。
程序语言,甚至计算器,都提供了“随机”生成[0,1]区间内连续数的方法。
因为每次运行程序常常生成相同的“随机数”,因此这些数被称为伪随机数。
尽管如此,对于多数的具体问题这样的随机数已经够用。
我们将假定计算机已经能够生成[0,1]上的均匀随机数。
也假定这些数是独立同分布的,尽管它们常常是周期的、相关的、……。
……本讲义的安排如下,第一章是Matlab简介,从实践动手角度了解并熟悉Matlab环境、命令、帮助等,这将方便于Matlab的初学者。
第二章是简单随机变量的模拟,只给出了常用的Matlab 模拟语句,没有堆砌同一种变量的多种模拟方法。
对于没有列举的随机变量的模拟,以及有特殊需求的读者应该由这些方法得到启发,或者参考更详细的其他文献资料。
第三章是基本随机过程的模拟。
主要是简单独立增量过程的模拟,多维的推广是直接的。
第四章是Markov过程的模拟。
包括服务系统,生灭过程、简单分支过程等。
第五章是这些模拟的应用。
例如,计算概率、估计积分、模拟现实、误差估计,以及减小方差技术,特别给读者提供了一些经典问题的模拟,通过这些问题的模拟将会更加牢固地掌握实际模拟的步骤。
平稳过程的模拟、以及利用平稳过程来预测的内容并没有包含在本讲义之内,但这丝毫不影响该内容的重要性,这也是将会增补进来的主要内容之一。
随机过程实验报告
随机过程实验报告随机过程实验报告一、引言随机过程是概率论和数理统计中的一个重要分支,它研究的是随机事件随时间的演化规律。
在现实生活中,我们经常会遇到各种各样的随机过程,比如天气变化、股票价格波动、人口增长等等。
本次实验旨在通过实际观测和数据分析,探究随机过程的特性和规律。
二、实验目的本次实验的主要目的是研究和分析一个具体的随机过程,以加深对随机过程理论的理解。
通过实际观测和数据分析,我们将探究该随机过程的概率分布、平均值、方差等统计特性,并尝试利用数学模型对其进行建模和预测。
三、实验方法我们选择了一个经典的随机过程作为研究对象:骰子的投掷。
我们将进行多次骰子投掷实验,并记录每次投掷的结果。
通过统计分析这些结果,我们可以得到骰子的概率分布、平均值和方差等重要参数。
四、实验过程我们使用了一颗标准的六面骰子进行了100次投掷实验。
每次投掷后,我们记录了骰子的点数,并将这些数据整理成了一个数据集。
五、实验结果通过对实验数据的统计分析,我们得到了以下结果:1. 概率分布我们统计了每个点数出现的次数,并计算了它们的频率。
结果显示,每个点数的频率接近于1/6,符合骰子的均匀分布特性。
2. 平均值我们计算了所有投掷结果的平均值,发现它接近于3.5。
这是因为骰子的点数从1到6,平均为(1+2+3+4+5+6)/6=3.5。
3. 方差我们计算了所有投掷结果的方差,发现它接近于2.92。
方差是衡量随机变量离其均值的分散程度的指标,它的大小反映了骰子点数的变化范围。
六、讨论与分析通过对实验结果的分析,我们可以得出以下结论:1. 骰子的点数具有均匀分布的特性,每个点数出现的概率接近于1/6。
2. 骰子的平均值为3.5,这是由于骰子的点数从1到6,平均为(1+2+3+4+5+6)/6=3.5。
3. 骰子的方差为2.92,这意味着骰子的点数变化范围较大。
通过以上结果,我们可以看出骰子的投掷过程是一个典型的随机过程。
它符合随机过程的基本特性,即随机性和不可预测性。
概率论与随机过程上机实验报告
概率论与随机过程上机实验报告题目一题目对二项分布事件的概率的精确计算与用泊松分布和中心极限定理的近似计算进行对比。
P变化n固定,进行比较n固定,p变化进行比较。
源代码运行结果黑星代表二项分布,蓝色是泊松分布绿线是中心极限定理小结n变化从50开始到150,中心极限定理的计算方法更加接近二项分布的精确计算,泊松分布于精确计算差距稍微增大但保持原有的变化趋势。
p改变时,p=0.5时取最大值,仍然是中心极限定理比泊松分布更加接近二项分布精确计算。
第二题题目对正态总体参数的区间估计,进行验证及区间长度的变化情况(注:对一个参数,验证一种情形即可)。
(a)样本容量固定,置信度变化;(b)置信度固定,样本容量变化。
源程序运行结果小结可以看出来,当样本容量不断增加时,区间估计的精度越来越高;同时,当置信度不断提高时,区间估计的精度也越来越高。
第三题题目自己选一个总体,验证样本k阶矩的观察值随样本容量的增大与总体k阶矩接近程度(对k=1,2进行验证)源代码运行结果小结使用自由度为10的卡方分布作为研究总体,取样本容量大小从1到10000。
图像表明,,随着样本容量的增加,样本观测值的一阶原点矩和二阶原点矩都越来越接近于总体的一二阶原点矩,即10和120。
第五题题目自己设计一种情形,当样本至少为多少时,产品的合格率才能符合给定的合格率源程序运行结果小结观察可知,卡方分布产生的500个随机数的统计直方图的形状与真实卡方分布曲线形状基本拟合。
个人感想之前大一在进行数学建模的时候通常要用到数理统计的相关知识,但由于没有系统的学习过,始终是一知半解。
经过一学期对概率论与随机过程的学习,掌握了很多统计学上的观点以及方法,这对之后的工作或是科研都有着很大的作用。
经过这次的上机实验,也能让我们从编程的角度更深入的理解一些方法在实践中的用法,受益匪浅。
最后,感谢老师一学期的辛勤教学,也希望老师之后身体健康工作顺利。
随机过程实验报告
随机过程试验报告班级:信息与计算科学2010级1班姓名:李翠珍学号:20104609实验实验总结:本次试验熟练的掌握了三维图像的matlab 编程语句,最重要的是学习了 rnd 使x 为泊松随机数。
4实验二2o-1-228均值函数已知u=0,令自变量x的取值范围[-1,1]x=-1:0.01:1u=0;plot(x,u,'-+');方差函数var(x(t)) =2;在matlab 中用v 代替方差,同样令x=-1:0.01:1v=0;plot(x,v,'-+');-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 10.80.60.40.2-0.2-0.4-0.6-0.8-1 -1 -0.8 -0.6 -0.4 -0.2 0.2 0.4 0.6 0.8自相关函数令t 1 , t 2的范围为[0,2二].根据已知条件编写下程序: t1=0:0.01:2;t2=0:0.01:2; t=t1-t2;w=3;r=2*cos(w*t); plot3(r,t1,t2); axis square; grid on;实验总结:本次试验,主要是借鉴了课本 2.2的课上例题,利用了随机过程中的 中的相关公式求解。
3实验三实验总结:本试验主要锻炼了我们从大量信息内摘取有用信息的能力学习及理解 运用新知识。
我在这方面比较欠缺,以后一定要多加练习。
3030实验成绩 评阅时间 评阅教师 2520151055 10 15 20 25实验内容判定一个Markov 链是否是遍历的,若是遍历的,求其极限分布。
并能从实际问 题中抽象出Markov 链,并求出其极限分布,并理解其实际意义。
实验习题课本p125 5.7 将两个红球,四个白球分别放入甲乙两个盒子中。
每次从两个 盒子中各取一球交换,以X n 记第n 次交换后甲盒中红球数。
(1) 说明{ X n , n=0,1,…}是一 Markov 链并求转移矩阵P ;(2) 试证{ X n , n=0 , 1,…}是遍历的;(3) 求它的极限分布;(1) 设X n 记第n 次交换后甲盒中红球数,则易见{ X n ,n=0,1,…}是状态空间S 二{0,1,2}的Markov 链,一步转移概率矩阵为:123 8 0(2) 由于状态空间S 有限,且状态互通,故{ X n , n=0,1,-}不可约,从而 正常返,又状态1为非周期的,故{ X n , n=0 , 1,…}还是遍历链。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
班级:通信1301班
姓名:郭世康
学号:U201313639
指导教师:卢正新
一、模块功能描述
CMYRand类是整个系统的核心,它产生各种随机数据供后面的类使用。可以产生伪随机序列、均匀分布、正态分布、泊松分布、指数分布等多种随机数据。
CRandomDlg类是数据的采集处理类。它可以将CMYRand产生的随机数据处理分析,再送入CScope等类进行模拟示波器显示。
CScope等类是有关示波器显示的类。
二、模块间的关系
CRandomDlg类在整个程序中是一个不可缺少的环节,它调用CMYRand中的函数来产生符合所需分布的随机序列,再将产生的结果统计分析,送到CScope类中的函数进行模拟示波器显示。CMYRand为整个程序的核心,就是这个类产生所需分布的随机序列。CAboutDlg是模拟示波器界面上的有关按钮选项的类。我们在示波器界面上点击一个按钮,它就会执行这个按钮所对应功能,比如点击正态分布,它就会调用CRandomDlg中的对应函数,在调用CMYRand中的产生正态分布的函数,再将结果送到CScope类中进行显示,最后我们可以在示波器上看到图形。
for(i=0;i<n;i++)
sum+=AverageRandom(min,max);//将均匀分布的随机数据进行求和,即大数定律的应用。
dResult=(sum-n*0.5)/sqrt(n/12);
dResult=dResult*sigma+miu;
//添加正态分布随机变量产生代码
return dResult;
*/
unsigned int CMyRand::MyRand(unsigned int seed)
{
//添加伪随机数产生代码
if(S==seed)
Y=K*Y%N;
else
{
S=seed;
Y=K*seed%N;
}
return Y;
}
输入参数为seed,即种子。输出参数为y,即一个随机序列,它的取值在0到N之间。
}
输出参数为任意随机分布的均值。
流程图:
7、
/*函数功能,计算随机过程的自相关序列
*/
double* CMyRand::Rx(double lambda, int points)
{
int m,I;
double *Rx = (double*)malloc((2*points+1)*sizeof(double));
{
double dResult = 0.0;
//添加指数分布随机变量产生代码
dResult=-1*log(AverageRandom(min,max))/lambda;
return dResult;
}
输入参数为指数分布的参数lambda和均匀分布随机序列的范围min、max,输出参数dResult为得到的指数分布随机序列。
p=exp(-lambda);
F=p;
while(1)
{
if(AverageRandom(min,max)<F)
break;
else
{
p=lambda*p/(lambda+1);
F=F+p;
i++;
}
}
dResult=i;
return dResult;
}
输入参数为lambda,即为泊松分布的参数,还有均匀分布随机序列的范围min、max。输出参数为dResult,即为服从泊松分布的随机数据样本。
流程图:
2、
/*函数功能,产生一个在min~max内精度为4位小数的平均分布的随机数*/
double CMyRand::AverageRandom(double min,double max)
{
double dResult;
dResult = 0;
dResult=(double)MyRand(seed)/N;//产生0~1之间的均匀分布
流程图:
5、/*函数功能,产生泊松分布的样本数据
*/
unsigned int CMyRand::PoisonRandom(double lambda, double min, double max)
{
unsigned int dResult = 0;
//添加泊松分布随机变量产生代码
int i=0;
double p,F;
}
输入参数miu,sigma,即为正态分布的均值和标准差,还有min和max,即为均匀分布随机数据的范围。输出参数为dResult,即为得到的正态分布随机变量。
流程图:
4、/*函数功能,产生指数分布的随机数,参数为lambda
*/
double CMyRand::ExpRandom(double lambda, double min, double max)
流程图:
6、/*函数功能,计算任意分布的随机过程的均值
*/
double CMyRand::Ex(void)
{
double Ex = 0;
//添加均值计算代码
int i;
double sum=0;
for(i=0;i<500;i++)
sum+=AverageRandom(0,2);
Ex=sum/i;
return Ex;
Miu为均值,sigma为标准差
*/
double CMyRand::NormalRandom(double miu, double sigma, double min, double max)
{
double dResult;
dResult = 0;
int i,n;Biblioteka double sum=0.0;
n=200;
三、数据结构
在本次随机试验中所填写的代码部分并没有用到有关于结构体等数据结构的东西。
四、功能函数
1、
/*
函数功能,采用线性同余法,根据输入的种子数产生一个伪随机数.
如果种子不变,则将可以重复调用产生一个伪随机序列。
利用CMyRand类中定义的全局变量:S, K, N, Y。
其中K和N为算法参数,S用于保存种子数,Y为产生的随机数
dResult=dResult*(max-min)+min;//将0~1之间的均匀分布通过乘以倍数放大到到min~max
return dResult;
}
输入参数为min,max,即均匀分布的范围。输出参数为dResult,即为随机序列。
流程图:
3、
/*函数功能,根据大数定律,在min到max范围内产生正态分布的随机数
//添加自相关序列产生代码
//产生的自相关序列存入Rx中,Rx可当作数组使用
//不要在本函数中释放该数组!