您的位置:首页 > 其它

[摘记]数值方法06——随机数

2010-12-11 21:29 246 查看
注:以下来自《C++数值算法一书》,仅对章节内容做摘要,为的是给自己扫盲,不涉及算法。

一般来说,任何程序必将产生出完全可以预计的结果,因而不是真正的随机数。有时被称为伪随机。从实用的观点看,随机性是使用者自己认可的事,也就是说,够用就行。

 

1. 均匀分布(书上说是一致偏离,看了china-pub上的书评,说这应该是均匀分布)

首先,是地球人都知道的rand()。。。依据seed生成不同的随机数序列。其实采用的是线性同余的方法,这种方法速度快,运算少,但不能避免序列的相关性。并且这种生成程序的低阶位常常比它们的高阶位随机性差得多。后来改进的方法其实仍然使用线性同余,只是用搅乱了输出等方法消除了低阶顺序相关性。

 

2. 指数分布和正态分布

假设y=-ln(x),x均匀分布,根据|p(y)dy|=|p(x)dx|,于是p(y)dy=e-ydy,这就是y的概率分布。指数分布,在实际问题中经常出现,通过公式y=-ln(x)就可以生成符合指数分布的随机数。相似地,可以生成具有正态分布的随机数,详见Box-Muller方法。

 

3. 拒绝方法:伽马分布、泊松分布、二项分布

拒绝方法不要求累积分布函数(p(x)的不定积分)是容易计算的,更不要求累积分布函数的反函数(我们要得到的用于求y的随机数的函数)易计算。

思想:对给定的p(x),为其挑选一个合理的比较函数f(x),使得f(x)具有有限的面积,并且p(x)处处小于f(x)。拒绝方法首先生成分布f(x)的随机分布x,第二个均匀分布用来决定是否接受或拒绝该x。如果它被拒绝,就寻找f的一个新分布。

伽马分布的一个比较有用的比较函数由Lorent分布给出,泊松分布于伽马分布有关。

 

4. 随机位的生成

模2本原多项式:一种特殊多项式,它们的系数不是0就是1,例如x18+x5+x2+x1+x0。可以简化表示为(18,5,2,1,0),这是一个18阶的模2本原多项式。每个n阶的模2本原多项式都定义了,由前n个随机位得到一个新随机位的递推公式。这个递推公式保证可以产生一个极大长度的序列,也就是在它重复之前循环所有可能的n位序列(全部为0除外),即2n-1个。(关于公式,表示没看懂= =)

 

深入讨论略

 

5. 简单的蒙特卡罗积分

函数在体积V上的积分。。。这是什么应用?没看明白

 

6. 准随机序列

在n维空间中,均匀随机地选取N个点,会在蒙特卡罗积分中引起一个误差项。比不相关的随机点更均匀地充满n维空间的n元序列,被称为准随机序列。一个简单的概念上的例子是Halton序列。各种学者提出了产生准随机序列的其他方法,比如Antonov-Saleev变形序列。

 

最近几章几乎要理解无能= =,另外这章《C++数值算法》的翻译真是混乱。

 

本文原创,转载请注明出处

http://www.cnblogs.com/luluathena/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: