博舍

如何产生指定分布的随机数 如何生成随机函数图像

如何产生指定分布的随机数

参考:https://www.cnblogs.com/xingshansi/p/6539319.html;https://www.jianshu.com/p/3d30070932a8;https://blog.csdn.net/pipisorry/article/details/50615652;https://cosx.org/2015/06/generating-normal-distr-variates。

常用方法:逆变换法和舍选法

1、逆变换法(反演法)

对任意随机变量ξξ,设其概率密度分布函数为P(x)P(x),其积分分布函数为P(x)=∫x−∝p(z)dzP(x)=∫−∝xp(z)dz,只要有均匀分布的另一随机变量θθ,则反函数ξ=F−1(θ)ξ=F−1(θ)即可得到,且ξξ一定服从P(x)P(x)分布。

逆变换法产生随机数的步骤:①生成一个服从均匀分布的随机数U~Unit(0,1);②设F(x)为指定分布的分布函数,则X=F−1(U)X=F−1(U)即为指定分布的随机数。示例:生成满足λ=2的指数分布随机数。分析:由f(x)f(x)得出F(x)F(x)—>F(x)=1−e−λxF(x)=1−e−λx,进而求得F(x)F(x)逆函数,得出X=F−1(u)=−1λln(1−u)X=F−1(u)=−1λln⁡(1−u)代码:

Len=1000000;u=rand(1,Len);lemda=2;x=-1/lemda*(log(1-u));

常见分布的生成函数:(1)瑞利分布

Fr(x)=1−e−x2/(2σ2)Fr(x)=1−e−x2/(2σ2)⇒x=−2σ2ln(1−μ)−−−−−−−−−−−−√⇒x=−2σ2ln(1−μ)

(2)威布尔分布

Fw(x)=1−e−(x/λ)kFw(x)=1−e−(x/λ)k⇒x=λ[−ln(1−μ)]1/k⇒x=λ[−ln(1−μ)]1/k

(3)对数正态分布由于对数正态分布的累积分布函数不存在解析式,因此不能直接给出其生成函数。若x服从对数正态分布,则有y=lnx服从正态分布。根据这一思想,对应的随机序列仿真步骤如下:步骤1:生成高斯序列y∼N(μ,σ2)y∼N(μ,σ2)。步骤2:用x=F−1(y)=exp(y)x=F−1(y)=exp(y)即可得到对数正态分布序列。

(4)K分布由于K分布的累积分布函数没有解析式,故不能采用逆变换法生成随机数。由于K分布把杂波看作是功率收一随机过程调制的复高斯过程,可以用两个独立的、具有不同相关时间随机变量的乘积形式来描述其幅度统计特性。K分布随机序列可通过以下两步得到:步骤1:生成瑞利分布序列G(n)和伽马分布随机序列S(n);步骤2:利用公式z(n)=S(n)−−−−√G(n)z(n)=S(n)G(n)生成K分布序列。

2、舍选法

舍选法基本思想是利用拒绝采样,通过设定一个程序可抽样的分布q(x)比如正态分布等等,然后按照一定的方法拒绝某些样本,达到接近p(x)分布的目的。

红色的是p(z),蓝色的是q(z),我们对q(z)乘一个参数k,让k能正好包住p(z),那么对于每一个从q(z)得到的样本z0,我们有一定的概率接受它,概率的大小就是p(z0)/kq(z0)。很容易就能看出来,在p(z)和kq(z)相切的地方的采样,接受率就是1。那么有人问了,接受率能计算出来,但是我们对于一个样本z0,到底怎么判断是接受还是不接受啊?我们有u~Uniform[0,1],对于每一个样本z0,我们一个u0,如果u0

如何生成指定分布的随机数

前言

对于随机数平时我们还是比较常用的,一般都会直接通过各种语言原生自带的随机函数,比如c++中有random()函数,java中有Random类,python有random模块等等。都能很方便生成随机变量,但它们有一个特点,那就是都服从均匀分布,而有些场景需要要生成不同分布的随机变量。

随机变量

随机变量即随机函数,通过该函数能生成每个可能事件对应的一个值。比如我们掷骰子,每次按一定的概率生成一个值。有两种类型变量,*离散型随机变量,能取到的不相同的值是有限个或可列无限多个。*连续型随机变量,能取到的值可以是连续的,在某个区间内可取任意一实数。

概率密度函数

主要用来表示不同点对应的概率大小,即X轴上每个单位长度对应的概率大小。概率等于面积,当某区间长度趋于0时则变为一个点,此时概率大小为f(x)。

常见分布伯努利分布,即0-1分布,随机变量为0或为1,概率为p和1-p。二项分布,进行n次伯努利实验,相对于不同成功次数对应的概率。泊松分布,是二项分布的极限形式。均匀分布,在相同长度间隔的分布概率是等可能的。正态分布,又名高斯分布,正态曲线呈钟型,两头低,中间高。指数分布,描述事件以恒定平均速率连续且独立地发生的过程的概率分布。逻辑斯蒂分布,增长分布,形状有点像正态分布。生成分布算法InverseTransformMethod,首先生成一个均匀分布的随机数,再求指定分布的分布函数F(x),然后求得F(x)的逆函数G(x),将随机数带入逆函数得到的即为指定分布的随机数。Acceptance-RejectionMethod,首先生成一个均匀分布随机数a,设概率密度函数为f(x),然后再生成一个均匀分布随机数b,若b

如何生成随机数+原理详细分析

说到如何生成一个随机数,可能当你百度后会看到这样一段代码。

srand((unsignedint)time(NULL));intret=rand();

那么一个随机数到底是如何生成的呢?我相信善于探索的你一定想知道这其中的原理,那么话不多说,进入正题把!一个随机数到底是如何生成的:说到生成随机数我们都知道要用到一个rand函数,那么这个函数究竟是如何运用的呢,我们可以打开MSDN看看这个函数的用法这里的第一句说到rand函数会返回一个从0到RAND_MAX的整型,那么RAND_MAX的值是多少呢,我们可以将它复制到编译器中然后选中它右击鼠标点击转到定义,就可以看到这句话其实RAND_MAX的值也就是0x7fff,转换为十进制也就是32767,所以说rand函数可以随机生成一个0到32767的整型,当你在编译器中尝试时,你会看到当你天真的以为你已经成功的可以生成随机数的时候,你会发现当年再次运行该代码时,它生成的还是这些随机数,也就是第一次运行代码时代码生成了随机数,但是第二次运行时会生成相同的随机数。这时我们应该想起对rand函数的描述中还有第二句话:在调用rand函数之前,我们要使用srand函数设置生成随机数的起点。我们又在MSDN中查查srand函数:我们可以看到srand函数的参数是一个无符号整型并且无返回值,那么这时我们可以来测试一下,就随便给一个无符号整型传给srand函数但是当我们再次执行程序时照样还是这些随机数,当我们把传入srand函数的改变时,发现所给随机数便改变了:所以我们只要在每次执行程序的时候给srand函数传入一个与上一次不同的数即可,但是我们就是要生成一个随机数,现在又需要一个随机数,这不成死循环了吗?这时我们想到在电脑上有一个东西是时刻在发生着变化的,那就是时间,这时我们需要介绍一个概念,那就是时间戳。时间戳:当前时间与计算机起始时间的差值,单位是秒。计算机的起始时间:1970-01-0108:00:00每一秒的时间戳都不一样,所以我们只要把时间戳传入srand函数即可,这时我们就需要用到time函数,因为time函数的返回值就是时间戳。这里我们可以看到time函数的参数是time_t型指针,返回值是time_t型,这里的time_t我们也可以把它放到编译器中右击鼠标,点击转到定义:这里我们可以看到,其实time_t就是int型被typedef重定义了(也就是起了个别名)而已。而我们也不需要向time函数传入什么指针,于是我们就向time函数传入一个空指针(NULL)即可,也就是time(NULL),但是srand函数的参数是unsignedint型,所以我们如果要将time函数的返回值传入srand函数,那么我们就需要将time函数的返回值强制性转化会unsignedint型,也就是(unsignedint)time(NULL),所以我们最终将代码写为:这样,每次运行代码时所得到的就是真正意义上的随机数了。如何生成规定位数的随机数:生成两位随机数:我们只需要将所得随机数对90取余数,那么我们得到的数就是0-89的数字,这时再加上10便是10-99的数字了。生成三位随机数:道理与生成两位随机数相同我就不再阐述了。

至于文章中用到的MSDN,如果博友们没有也可以搜索http://www.cplusplus.com。也可以查看相关函数的信息。

函数图像绘制工具

函数图形绘制器(绘图工具)绘制给定函数的图像。多个函数分别用不同颜色绘出。函数之间请用逗号,X值与Y值取值范围分隔。输入完毕后请按“绘制图形”按钮。图形计算器允许使用图形窗格下面的控制按钮移动、缩放和居中图形。您也可以使用鼠标拖动来移动图形,用鼠标滚轮来调整其大小。图形计算器可用于可视化其他计算的结果(例如,绘制函数及其导数的图形)。要在图形上绘制单个点,请以x:y格式输入,例如0.5:1.5。通过将点和函数放在括号中,可以对它们进行分组并赋予相同的标签和颜色:(label,[color,]x1:y1,x2:y2)或(label,[color,]function1,function2)。点不能与同一组中的函数混合。图形计算器支持标准html颜色。分段函数可以使用def(var,from,to)定义,例如def(x,1,2)。支持的函数和运算

opencv生成随机图像

opencv生成随机图像

yao好好学习鸭:你好啊我生成的随机图像找不到在哪这怎么处理啊好像都没生成成功但是代码没问题

python-opencv实现图像超像素分割(SLIC、SEEDS、LSC)

unique0210:第二个程序错了倒数第三行最后一句的slic应该是lsc吧

[安装笔记]:Opencv+Ubuntu+cpp版本

ctotalk:感谢

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇