2.3 线性乘同余方法 (Linear Congruential Method)

Slides:



Advertisements
Similar presentations
2.5 函数的微分 一、问题的提出 二、微分的定义 三、可微的条件 四、微分的几何意义 五、微分的求法 六、小结.
Advertisements

工程學群 — 土木工程學類 組員 : 王文傑、黃千晏、陳識文. 目錄 一.由來 二.定義 三.相關學系介紹 & 學系開設大學 四.未來出路 五.學測篩選標準 & 最低錄取分數 六.指考篩選標準 & 最低錄取分數 七.校與校所學比較 八.土木 & 建築系比較 九.參考資料.
海洋教育:教科書、教師與教學 第七至十章導讀 宏仁國中 林珮瑜
湘雅医院中层干部培训讲座之二 医院行政管理工作思路 孙 虹 2010年10月27日.
性教育教學模組設計 主題:身體自主權 台中市忠明國小 巫偉鈴.
第一章 十六世紀中葉以前的臺灣與原住民 第一節 考古發掘與史前文化.
第八章 组织文化的整合 ——并购中的文化整合(二) 小组成员:浦若蓉、朱谷一、贾彦彦.
藥物濫用 華德學校上午校 黃秀雯.
行政法 之 行政救济篇.
整体销售方案 中山市美好物业代理有限公司
量化vs質性研究分析 量化vs質性研究分析 報告人:王秀民.
第二章 复式记账原理*** 主要内容、重点难点: 1.会计要素与会计等式*** 2.会计科目与账户*** 3. 借贷记账法***
第五章 会计职业道德.
台塑石化 與 全國 之 財務分析 :企管二甲、乙 班級 指導 :楊雪蘭 老師 :第六組 組別 組員
唐宋傳奇、筆記小品和史書、論著中的寓言 中碩二 吳佳樺.
兒童期 7 青春期 兩性圓舞曲 乘客:七年級同學 司機:張立杰老師.
臺中市頭家國小 生理衛生講座 青春期的奧秘 ‧說到青春期,你會想到? ‧班級表現最好的,有獎徵答有優先權。 葉孟娟老師、黃文玲老師.
山东建筑大学 国家级虚拟仿真实验教学中心 (建筑工程及装备) 申报及建设情况汇报
VS 兒童及少年身心發展 幼保三甲 幼兒期 青少年期 4A1I0014 陳佳瑩 4A1I0023 尤秀惠
1、分别用双手在本上写下自己的名字 2、双手交叉
1.6 中国人口迁移.
情緒與壓力管理─背部舒緩 指導老師:彭易璟 第六組組員:會資三乙 499A0047 謝宛霖 會資三乙 499A0019 吳汶諭
愛之花.
星星知我心 談古話今….. ……..觀星望斗 主講人: 陽光青春美少男.
反垃圾掩埋場相關報告 組長:文煊 組員:鄭侃文 李浩暐 胡育睿 李瑞耘 朱祐賢 林承宇.
2007年11月考试相关工作安排 各考试点、培训中心和广大应考人员:
第八課 蓼莪.
分式的乘除(1) 周良中学 贾文荣.
初中语文总复习 说明文 阅读专题 西安市第六十七中学 潘敏.
指導老師:楊淑娥 組別:第一組 成員:劉怡萱4a0i0066 吳珮瑜4a0i0070 林秋如4a0i0075 陳婉婷4a0i0076
"性"不"性"由你 性別平等之探討 北屯國小 張文陵.
第四章 制造业企业 主要经济业务核算.
組員:4A140013張瓊云 4A1I0039石宜芬 4A1I0909許峻綱 指導老師:王立杰老師
組員: 洪暐翔、 賴峻毅 侯家豪、 賴琦穎 指導老師: 王惠鈴 老師
1. 民主社會裡,公民的參與有其重要性,而透過政治參與無法達成下列哪一項目的?
《思想品德》七年级下册 教材、教法与评价的交流 金 利 2006年1月10日.
第7章 行政监督.
 第20讲 中国的交通.
第十二单元 第28讲 第28讲 古代中国的科技和文艺   知识诠释  思维发散.
學習共同體實施心得分享 新泰國中 報告者 張國振校長.
国际关系的决定因素:国家利益 江苏省震泽中学 丛海啸.
走自立自强之路 自己的事情自己做.
人類的循環系統.
指導老師:陳韻如 班級:幼保二甲 姓名:林靜宜 學號:4A0I0033
第5章 §5.3 定积分的积分法 换元积分法 不定积分 分部积分法 换元积分法 定积分 分部积分法.
組員:蔡惠雅 494D0032 楊雅惠494B0079 蔡騏鴻 葉時宇 余建霖495B0002 陳瑛淑495B0021
台中市不動產經紀人職業工會 不動產經紀營業員 複訓班
C语言程序设计 第十二章 位运算.
实验数据处理方法 第二部分:Monte Carlo模拟
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
本章結構 前言 簡單範例-可靠度問題 產生隨機變數值 應用範例分析 模擬誤差分析-輸出資料分析 電腦軟體介紹 隨機亂數產生器
如何讓孩子成為明日之星 芃芃森林幼稚園 許玉芳 園長.
Monte Carlo模拟 第二章 均匀分布随机数的产生 2.1 随机数的定义和特性 2.2 随机数的产生 2.3 线形乘同余方法
C++语言程序设计 C++语言程序设计 第三章 控制语句 第十一组 C++语言程序设计.
Monte Carlo模拟 第二章 均匀分布随机数的产生 2.1 随机数的定义和特性 2.2 随机数的产生 2.3 线形乘同余方法
第三章 从概率分布函数的抽样 (Sampling from Probability Distribution Functions)
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第二章 类型、对象、运算符和表达式.
第二章 基本数据类型 ——数据的表示.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
怎樣找書? ~認識索書號 圖書館推動教師/林秀芳.
第一部分:概率 产生随机样本:对分布采样 均匀分布 其他分布 伪随机数 很多统计软件包中都有此工具 如在Matlab中:rand
#include <iostream.h>
霧台--魯凱族祕境.
第十二章 位运算.
第三章 从概率分布函数的抽样 (Sampling from Probability Distribution Functions)
厉害了,我的国! 15会计2班团支部 2018年4月20日.
老厝老街老心情……. 一起尋找老街人文的感動 組員:家榕、瑞旂、子寧、琪芬
函式庫補充資料 1.
隨機函數.
Presentation transcript:

2.3 线性乘同余方法 (Linear Congruential Method) Monte Carlo 模拟 第二章 均匀分布随机数的产生 2.3 线性乘同余方法 (Linear Congruential Method)

2.3 线性乘同余方法(Linear Congruential Method) 1948年由Lehmer提出的一种产生伪随机数的方法,是最常用的方法。 1、递推公式: 其中: I0: 初始值(种子seed) a: 乘法器 (multiplier) c: 增值(additive constant) m: 模数(modulus) mod:取模运算:(aIn+c)除以m后的余数 a, c和m皆为整数 产生整型的随机数序列,随机性来源于取模运算 如果c=0  乘同余法:速度更快,也可产生长的随机数序列 mod:取模运算:(aIn+c)除以m后的余数 实型随机数序列:

2.3 线性乘同余方法(Linear Congruential Method) 2、实型随机数序列: 3、特点: 1)最大容量为m: 2)独立性和均匀性取决于参数a和c的选择 例:a=c=I0=7, m=10  7,6,9,0,7,6,9,0,…

2.3 线性乘同余方法(Linear Congruential Method) m 应尽可能地大,因为序列的周期不可能大于m; 通常将m取为计算机所能表示的最大的整型量,在32位计算机上,m=231=2x109 5、乘数因子a的选择: 1961年,M. Greenberger证明:用线性乘同余方法产生的随机数序列具有周期m的条件是: c和m为互质数; a-1是质数p的倍数,其中p是a-1和m的共约数; 如果m是4的倍数,a-1也是4的倍数。 例:a=5,c=1,m=16,I0=1 周期=m=16 1,6,15,12,13,2,11,8,9,14,7,4,5,10,3,0,1,6,15, 12,13,2,..

2.3 线性乘同余方法(Linear Congruential Method) RANDU随机数产生器: 1961年由IBM提出 unsigned long seed = 9; float randu() { const unsigned long a = 65539; const unsigned long m = pow(2,31); unsigned long i1; i1 = (a * seed) % m; seed = i1; return (float) i1/float(m); } void SetSeed(unsigned long i) { seed = i; }

2.3 线性乘同余方法(Linear Congruential Method) 存在严重的问题: Marsaglia效用,存在于所有乘同余方法的产生器 void test() { c1 = new TCanvas("c1",“Test of random number generator",200,10,700,900); pad1 = new TPad("pad1",“one ",0.03,0.62,0.50,0.92,21); pad2 = new TPad("pad2",“one vs one",0.51,0.62,0.98,0.92,21); pad3 = new TPad("pad3",“one vs one vs one",0.03,0.02,0.97,0.57,21); pad1->Draw(); pad2->Draw(); pad3->Draw(); TH1F * h1 = new TH1F("h1","h1",100,0.0,1.0); TH2F * h2 = new TH2F("h2","h2",100,0.0,1.0,100,0.0,1.0); TH3F * h3 = new TH3F("h3","h3",100,0.0,1.0,100,0.0,1.0,100,0.0,1.0);

2.3 线性乘同余方法(Linear Congruential Method) for(int i=0; i < 10000; i++) { float x = randu(); float y = randu(); float z = randu(); h1->Fill(x); h2->Fill(x,y); h3->Fill(x,y,z); } pad1->cd(); h1->Draw(); pad2->cd(); h2->Draw(); pad3->cd(); h3->Draw();

2.3 线性乘同余方法(Linear Congruential Method)

2.3 线性乘同余方法(Linear Congruential Method)

2.3 线性乘同余方法(Linear Congruential Method) 1968年,Marsaglia对这一问题进行了研究,认为: 任何的乘同余产生器都存在这一问题:在三维和三维以上的空间中,所产生的随机数总是集聚在一些超平面上 随机数序列是关联的 对于32位的计算机,在d-维空间中超平面的最大数目为 d=3 2953 d=4 566 d=6 120 d=10 41 改进措施:将递推公式修改为 特点:1)需要两个初始值(种子); 2)周期可大于m;

2.3 线性乘同余方法(Linear Congruential Method) #include <math.h> unsigned long seed0 = 9; unsigned long seed1 = 11; float randac() { const unsigned long a = 65539; const unsigned long b = 65539; unsigned long i2; unsigned long m = pow(2,31); i2 = (a * seed1 + b * seed0 ) % m; seed0 = seed1; seed1 = i2; return (float) i1/float(m); } void SetSeed(unsigned long i0, unsigned long i1) { seed0 = i0; seed1 = i1; }

2.3 线性乘同余方法(Linear Congruential Method) a=b=65539, seed0=9, seed1=11

2.3 线性乘同余方法(Linear Congruential Method) 如何获取[0,1]区间均匀分布的随机数产生器: 每一个Monte Carlo模拟程序软件包都有自带的产生器: Jetset(LUND Monte Carlo模拟系列):利用Marsaglia等所提出的算法,周期可达1043 函数用法:r=rlu(idummy) Geant3(探测器模拟程序,FORTRAN): 周期=1018 Call grndm(vec*,len) …. 利用CERN程序库: Y=rndm(x): 周期:5x108 Y=rn32(dummy):乘同余法,a=69069,i0=65539 Call ranmar(vec,len): 周期:1043 Call ranecu(vec,len,isq)

2.3 线性乘同余方法(Linear Congruential Method) 利用CLHEP中的随机数产生器软件包: CLHEP(Class Library for High Energy Physics)中的随机数产生器 http://hepg.sdu.edu.cn/~zhangxy/clhep/html/index.html

2.3 线性乘同余方法(Linear Congruential Method) FORTRAN中使用随机数产生器应注意的问题: 在FORTRAN中,如果随机数产生器是带dummy变量的函数: 其中变量idum在函数中不使用,应注意以下问题: X=RAND(idum) FORTRAN编译器在对程序进行优化时: X=RAND(IDUM)+RAND(IDUM)  X=2.0*RAND(IDUM) DO I=1,10 X=RAND(IDUM) … END DO ….  解决办法: DO I=1,10 IDUM = IDUM +1 X=RAND(IDUM) … END DO