Matlab 按照两个值之间的分布对随机数进行采样

Matlab 按照两个值之间的分布对随机数进行采样,matlab,random,distribution,gaussian,sampling,Matlab,Random,Distribution,Gaussian,Sampling,我想在两个值之间创建一条高斯曲线(这是两个不同计算的终点)。我知道我需要更多的背景资料,但我希望能发挥的结果。因此,让我们假设未知的值可能是1.9和2.1。 我的目标是在这两者之间随机抽取一个数字,并且更加偏向于平均值,而不是一个或另一个极端,作为下一次计算的起点 任何帮助都将不胜感激,提前感谢 更新I: 为清楚起见 蓝线和黑线都从某个原点开始,计算不同,终点的值也不同。仅从这两个值可以设置任意数量的ppoints。n可以在2到100之间-这无关紧要。重点是,创建一个类似钟形曲线所示的分布 根

我想在两个值之间创建一条高斯曲线(这是两个不同计算的终点)。我知道我需要更多的背景资料,但我希望能发挥的结果。因此,让我们假设未知的值可能是1.9和2.1。

我的目标是在这两者之间随机抽取一个数字,并且更加偏向于平均值,而不是一个或另一个极端,作为下一次计算的起点

任何帮助都将不胜感激,提前感谢

更新I:

为清楚起见

蓝线和黑线都从某个原点开始,计算不同,终点的值也不同。仅从这两个值可以设置任意数量的ppoints。n可以在2到100之间-这无关紧要。重点是,创建一个类似钟形曲线所示的分布

根据Severin Pappadeux的优秀建议,我们现在定义了n,现在只剩下定义分布

n=10

IH=1.9:0.01:2.1
v = 1.9 + ((2.1-1.9)/n) * IH(n)

bar(IH)
hold on
bar(n,v,'k')

更新II: 结果

如您所见,曲线乘以两条曲线,每条曲线都有一个可能结果的分布,从中开始另一个计算。其目的是接近设定点。我快做完了,所以

非常感谢


可以从

基本上

min(IH(n)) = 0
max(IH(n)) = n
peak(IH(n)) = n/2
扩展到[1.9…2.1]范围

v=1.9+((2.1-1.9)/n)*IH(n)

它是有界的,很容易取样,而且大体上是高斯分布。您可以改变
n
以获得窄峰或宽峰

采样,在某些C伪代码中

double IH(int n) {
    double s = 0.0;
    for (int i = 0; i != n; ++i)
         s += uniform_random_number();

    return s;
}
更新

翻译成八度

function rv = IH(n)
  rv = 0.0;
  for i = 1:n
    x  = rand;
    rv = rv + x;
  end
endfunction
因此,采样将沿线路进行(例如,100万个事件,IH和8 d.o.f.)

另一个更新,增加了函数QG,它生成所需的随机向量

function [x] = QG (n, k)
  for i = 1:k
    x(i) = 1.9 + ((2.1-1.9)/n)*IH(n);
  end
endfunction
试着按顺序填写历史记录

y = QG(8, 10000);
h = histogram(y);

不能使用两个值作为端点来定义高斯分布,因为高斯分布的范围是无限的。您需要指定要在这两个值之间占多大比例。另外,我一点也不清楚你的图片应该代表什么。谢谢,我进一步澄清了问题陈述。@EasyQuestion简单地翻译成Octave(是Matlab的克隆),试试看it@Easyquestionsonly很高兴听到。IH代表Irwin Hall,因为它返回根据自由度
n
的Irwin Hall分布采样的值。QG代表准高斯分布,即具有某些核心的分布,这些核心看起来是高斯分布,但有界的,因此具有不同的尾部。@问题很简单,这是拟议分布的蒙特卡罗抽样。让我们回顾一下需求。首先,它应该是高斯分布。其次,它应该在一定的范围内。加在一起是不可能的,因为高斯分布是无界的,尾部是+-无穷大。但若你们放松要求,要求一些有边界但具有高斯“核心”的东西,那个么这是可以做到的。I-H分布符合要求。它以中心极限定理为基础,该定理规定,几个独立随机变量的平均值(其和除以
n
)近似为高斯分布。继续…@很简单,如果我们把这些独立的随机变量取为最简单的形式——均匀随机数[0…1)区间-我们得到的是精确的I-H分布。根据定义,它是有界的。如果你的IH有
n
样本,那么所有的均匀随机数可能是
0
,所以最小值总是
0
。或者所有的分布可能是
1
,所以IH(n)的最大值可能是
n*1=n
。所以“core”近似为高斯分布,较大的
n
使其更为高斯分布。总是有边界的。因此,剩下的唯一一件事就是将IH(n)从[0…n]区间移到所需的[1.9-2.1],并填充输出向量。@EasyQuestionly确定。您有原始区间[1.9…2.1],因此,从该区间采样的概率为1,没有低于1.9或高于2.1的事件。因此,您需要计算分布参数
n
,以便在某个区间[a…b],其中
a>1.9
b<2.1
,获得事件的概率为0.95。在与欧文霍尔分布的链接中,有CDF的表达式(x,n),所以对于给定的
n
你只需计算CDF有多少低于0.025。如果你不能计算出来,明天踢我一脚,我会在周末看一看
y = QG(8, 10000);
h = histogram(y);