- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
三、连续型随机变量的模拟 逆变换法:已知一个随机变量的概率分布函数,可借助于U(0,1)随机数来产生具有已知概率分布的随机数。用这种方法产生已知概率分布随机数的过程中要用到概率分布函数的逆函数,所以这种方法也称为逆变换法。 逆变换法基于以下定理: 若分布函数F(x)是连续的,且在0F(x)1时单调递增,而U是在(0,1)上均匀分布的随机变量,则随机变量X=F-1(U)具有分布函数F(x)。 三、连续型随机变量的模拟 逆变换法导出的模拟模型为: X=F-1(U) 式中包含了U,便于进行数学处理,且保留了原问题的概率特性。逆变换直接用公式产生随机变量的抽样序列,即给出任意一个ui,按照xi=F-1(ui)就可以在x轴上得到相应的xi值。 逆变换法的缺点在于有时很难找到F-1的显示表示,或者即使找到,计算起来也很复杂,甚至难以实现。 三、连续型随机变量的模拟 利用逆变换法可以产生以下几种常用的连续型随机变量。 均匀分布: 设 ,令 ,作逆变换后有: 三、连续型随机变量的模拟 负指数分布: 设 ,令 ,作逆变换后有: 由于u和1-u都是(0,1)区间均匀随机数,故上式也可写成: 四、随机过程模拟 随机过程是指对随时间推进的随机现象的数学抽象。例如,某地第n年的年降水量xn由于受许多随机因素的影响,它本身具有随机性,因此{xn,n=1,2,…}便是一个随机过程。类似地,森林中某种动物的头数,液体中受分子碰撞而作布朗运动的粒子位置,百货公司每天的顾客数等等,都随时间变化而形成随机过程。严格说来,现实中大多数过程都具有程度不同的随机性。与随机变量相比,随机过程是一族无限多个随机变量的总称。 * 随机变量与随机过程模拟 主要内容 统计实验法与伪随机数 离散型随机变量的模拟 连续型随机变量的模拟 随机过程模拟 一、统计实验法与伪随机数 解析法 随机现象 随机事件 随机变量分布函数 状态描述? 如何求解? 数值计算 逻辑判断 物理实验法 随机事件概率的计算 随机变量分布函数的求得 数量化 逻辑性 计算机模拟方法 (统计实验法) 一、统计实验法与伪随机数 统计实验法求解随机性模型有关问题基本思想: 如何取得我们关心的事件A或随机变量X的一列样本。 步骤主要有: 构造便于模拟的概率模型: 根据问题需要引入一些分布可以确定的与X有关的随机变量; 通过数值计算与逻辑判断表述这些随机变量与X之间的关系; 用计算机产生给定分布随机变量的一列样本值; 根据模拟模型的特性对这些样本值进行处理,从而获得X的一列样本值。 运用统计分析法对随机模型实施模拟时需要获得具有给定分布随机变量的一列独立样本值,通常称不同分布随机变量的抽样实现值为不同分布的随机数,其中IIDU(0,1)均匀分布随机数是最基本的随机数,通过对它进行适当变换,就可以得到任意分布的其他随机变量。 目前大多数仿真中都是应用计算机程序来产生IIDU(0,1)均匀分布随机数,即采用某种确定的规则,通过递推计算产生随机数序列。虽然它不是真正的随机数,但由于其具有真正随机数的统计性质,因此可以把它当作随机数来使用,这样的数列称为伪随机数。 一、统计实验法与伪随机数 真正意义上的随机数(或者随机事件)在某次产生过程中是按照实验过程中表现的分布概率随机产生的,其结果是不可预测的,是不可见的。 计算机中的随机函数是按照一定算法模拟产生的,其结果是确定的,是可见的。我们可以这样认为这个可预见的结果其出现的概率是100%。所以用计算机随机函数所产生的“随机数”并不随机,是伪随机数。 一、统计实验法与伪随机数 产生伪随机数的方法很多,一般来说应满足以下几点要求: 具有较好的随机性与均匀性; 产生伪随机数的速度要快; 占用计算机内存尽可能少; 一批随机数的循环周期尽可能长。 一、统计实验法与伪随机数 目前在实际应用中多采用乘法线性同余法,其递推公式为: xi+1 =(a xi +b)mod m 式中a、x0、m分别称为乘子、种子和模,他们的选取是否合适影响到伪随机数序列的均匀、独立性与循环周期。 一、统计实验法与伪随机数 //rand01.c #include static unsigned int RAND_SEED; unsigned int random(void) { ?? RAND_SEED=(RAND_SEED*123+59)%65536; return(RAND_SEED); } void random_start(voi
文档评论(0)