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