在MATLAB或Octave中定义自己的概率密度函数并用它来生成随机数是可能的吗?
MATLAB和Octave都内置了rand、randn等默认函数,可以从均匀分布或正态分布中随机抽取点,但似乎没有文档说明如何定义自己的概率密度函数。
从任意随机分布中进行抽样并不总是简单的。对于众所周知的分布,有一些技巧可以实现它们,并且大多数已经在统计工具箱中实现了,就像Oli所说的那样。
如果您感兴趣的分布形式比较困难,那么有许多抽样算法可以帮助您,例如拒绝抽样、切片抽样、Metropolis-Hastings算法等。
如果您的分布是离散的,或者可以相当准确地近似为离散分布,那么您可以使用randsamp
进行多项式抽样。
我最近不得不做了几次这样的事情,这并不是一件容易完成的事情。我最喜欢的技术是使用反向变换抽样。
这个想法非常简单: