通过均匀分布随机数产生器获得一个高斯分布随机数产生器

一.Box-Muller Transfrom

对于给定一个能产生(0,1)之间的均匀分布的随机数产生器,可以利用Box-Muller transform来获得一个产生标准高斯分布随机数的随机数产生器。

Box-Muller transform可以描述如下:

假设U1和U2是两个独立的随机变量,并且其分布为(0,1)之间的均匀分布,可以得到

Z1和Z2是两个互相独立的随机变量,并且这两个随机变量的分布为标准高斯分布

二.Matlab实验

代码

%% clear

clc;

clear;

%% uniform distribution

N = 1000000;

U1 = rand(1, N);

U2 = rand(1, N);

%% Get Gussion distribution using box-Muller transfrom

Z1 = sqrt(-2 * log(U1)) .* cos(2 * pi * U2);

Z2 = sqrt(-2 * log(U1)) .* sin(2 * pi * U2);

%% visualisztion of PDF

subplot(2, 2, 1), hist(U1, 100), title( ‘The PDF of U1‘ );

subplot(2, 2, 2), hist(U2, 100), title( ‘The PDF of U2‘ );

subplot(2, 2, 3), hist(Z1, 100), title( ‘The PDF of Z1‘ );

subplot(2, 2, 4), hist(Z2, 100), title( ‘The PDF of Z2‘ );

U1,U2,Z1和Z2的概率密度如下

参考文献

https://en.wikipedia.org/wiki/Box%E2%80%93Muller_transform

版权所有,欢迎转载,转载请注明出处,谢谢

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-12 12:03:34

通过均匀分布随机数产生器获得一个高斯分布随机数产生器的相关文章

垃圾收集器与内存分配策略-垃圾收集器

(A).图中展示了7种不同分代的收集器: Serial.ParNew.Parallel Scavenge.Serial Old.Parallel Old.CMS.G1: (B).而它们所处区域,则表明其是属于新生代收集器还是老年代收集器:       新生代收集器:Serial.ParNew.Parallel Scavenge:       老年代收集器:Serial Old.Parallel Old.CMS:       整堆收集器:G1: (C).两个收集器间有连线,表明它们可以搭配使用:

C语言产生标准正态分布或高斯分布随机数

C语言 产生标准正态分布或高斯分布 随机数 产生正态分布或高斯分布的三种方法: 1. 运用中心极限定理(大数定理) 1 #include 2 #include 3 4 #define NSUM 25 5 6 double gaussrand() 7 { 8 double x = 0; 9 int i; 10 for(i = 0; i < NSUM; i++) 11 { 12 x += (double)rand() / RAND_MAX; 13 } 14 15 x -= NSUM / 2.0; 1

day14 带函数的装饰器、多个装饰器装饰一个函数

一.带参数的装饰器:------开关 __author__ = 'Administrator' F=True def outer(F): def wap(fun):#gg def inner(*args,**kwargs): if F: print("inner before") ret=fun(*args,**kwargs)#gg() print("inner after") else: ret=fun(*args,**kwargs) return ret ret

文件分割器,一个读取流,相应多个输出流,并且生成的碎片文件都有有序的编号

import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.Properties; public class FileSpilte { /** * @param args * @throws IOException */

4个小时实现一个HTML5音乐播放器

技术点:ES6+Webpack+HTML5 Audio+Sass 这里,我们将一步步的学到如何从零去实现一个H5音乐播放器. 首先来看一下最终的实现效果:Demo链接 接下来就步入正题: 要做一个音乐播放器就要非常了解在Web中音频播放的方式,通常都采用HTML5的audio标签关于audio标签,它有大量的属性.方法和事件,在这里我就做一个大致的介绍. 属性:src:必需,音频来源:controls:常见,设置后显示浏览器默认的audio控制面板,不设置默认隐藏audio标签:autoplay

Java实现的一个简单的下载器

package com.shawearn.download;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.EOFException;import java.io.File;http://www.huiyi8.com/jiaoben/import j

用 python 实现一个多线程网页下载器

今天上来分享一下昨天实现的一个多线程网页下载器. 这是一个有着真实需求的实现,我的用途是拿它来通过 HTTP 方式向服务器提交游戏数据.把它放上来也是想大家帮忙挑刺,找找 bug,让它工作得更好. keywords:python,http,multi-threads,thread,threading,httplib,urllib,urllib2,Queue,http pool,httppool 废话少说,上源码: 1 # -*- coding:utf-8 -*- 2 import urllib,

从零封装一个Android大图查看器

背景: 大图查看器是许多app的常用功能,主要使用场景是用户点击图片,然后启动一个新界面来展示图片的完整尺寸,并能通过手势移动图片以及放大缩小.当然,上面说的是最基本的功能,实际使用中还要包括:如果是本地图片应该可以移除,如果是网络图片,应提供一个保存到本地的功能等. 本文为什么叫封装一个大图查看器,而不是叫做编写一个大图查看器呢?因为大图查看器的最核心功能,展示图片以及手势操控我们使用了一个开源库来完成,这个开源库叫做subsampling-scale-image-view,这个开源库非常靠谱

如何用python的装饰器定义一个像C++一样的强类型函数

Python作为一个动态的脚本语言,其函数在定义时是不需要指出参数的类型,也不需要指出函数是否有返回值.本文将介绍如何使用python的装饰器来定义一个像C++那样的强类型函数.接下去,先介绍python3中关于函数的定义. 0. python3中的函数定义 举个例子来说吧,比如如下的函数定义: 1 def fun(a:int, b=1, *c, d, e=2, **f) -> str: 2 pass 这里主要是说几点与python2中不同的点. 1)分号后面表示参数的annotation,这个