概述
本帖最后由 kastin 于 2015-7-24 15:25 编辑
由于楼主生成的是3个随机数满足和为1,可以采用动态生成法:即先生成1个随机数x,然后生成一个1个0到1-x范围内的随机数y,最后生成一个0到1-x-y范围内的随机数即可。
当n比较大的时候,可以用拒绝法:即生成很多组n-1个随机数,然后分别用1减去他们的和,得到的数如果小于等于零,就舍去(拒绝);保留剩余大于0的那些n元组随机数。
补充资料:
接受-拒绝抽样(Acceptance-Rejection sampling)
原文链接:http://blog.csdn.net/xianlingmao/article/details/7768833
又简称拒绝抽样,直观地理解,为了得到一个分布的样本,我们通过某种机制得到了很多的初步样本,然后其中一部分初步样本会被作为有效的样本(即要抽取的分布的样本),一部分初步样本会被认为是无效样本舍弃掉。这个算法的基本思想是:我们需要对一个分布f(x)进行采样,但是却很难直接进行采样,所以我们想通过另外一个容易采样的分布g(x)的样本,用某种机制去除掉一些样本,从而使得剩下的样本就是来自与所求分布f(x)的样本。
它有几个条件:1)对于任何一个x,有f(x)<=M*g(x); 2) g(x)容易采样;3) g(x)最好在形状上比较接近f(x)。具体的采样过程如下:
1. 对于g(x)进行采样得到一个样本xi, xi ~ g(x);
2. 对于均匀分布采样 ui ~ U(a,b);
3. 如果ui<= f(x)/[M*g(x)], 那么认为xi是有效的样本;否则舍弃该样本; (# 这个步骤充分体现了这个方法的名字:接受-拒绝)
4. 反复重复步骤1~3,直到所需样本达到要求为止。
这个方法可以如图所示:
(说明:这是从其他地方弄来的图,不是自己画的,符号有些和文中不一致,其中pi(x) 就是文中的f(x),q(x)就是文中的 g(x) )
上述方法最早由von neumann 提出,所以又叫von neumann 取舍原则,证明过程见下面链接中的8-9页。
http://wenku.baidu.com/link?url=-3ZGtURi2hl2-Z6uduT5i5jkwbEGvKF2Dy4ldJHUgaPllLbU9atC5GGGMK1eCQIONY0FsDc62gPJiBY9D1VFqWE2J7-31vVX06J8h3t-yvC复制代码
9楼链接中的函数由于为了让n在取很大的值的时候能更有效率,所以选用的算法并不是上面拒绝法,而是一种直接生成的方法。作者说到,“This algorithm does not perform any rejection of solutions - all are generated so as to already fit within the prescribed hypercube。”
最后
以上就是义气树叶为你收集整理的matlab 怎么表示随机数,MATLAB怎么生成一组和为定值的随机数的全部内容,希望文章能够帮你解决matlab 怎么表示随机数,MATLAB怎么生成一组和为定值的随机数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复