如何创建包含(人工生成的)高斯(正态)分布的向量?

New*_*lls 2 c++ algorithm math statistics

如果我有数据(每日股票图表是一个很好的例子,但它可能是任何东西),其中我只知道X单位出售的范围(高 - 低)但我不知道任何给定项目的确切价格出售.为简单起见,假设价格范围包含足够的桶(例如,40美分范围内增加40美分)以使这种分配变得切实可行.如何分配这些项目以形成存储在向量中的正常钟形曲线?它不一定是完美的而是现实的.

我(非常)天真的想法是假设由于随机数应该形成正态分布,我可以做类似二进制RNG的事情.例如,如果有40个桶,那么如果'0'出现40次,则第0个桶增加,如果'1'连续出现,则第39个桶增加.如果'1'出现20次,那么它就在向量的中间.对每个项目执行此操作,直到考虑了X个单位.这可能是也可能不对,在任何情况下似乎都比必要的效率更低.我正在寻找更明智的东西.

这不是家庭作业,只是一个困扰我的问题,我的统计数据不符合要求.大多数文献似乎都是关于在已经存在之后分析分布,而不是关于如何人为地创建分布.

我想用c ++编写这个,所以在R或matlab中预先打包的解决方案或者对我来说不太有用.

谢谢.我希望这是有道理的.

Dav*_*men 8

大多数文献似乎都是关于在已经存在之后分析分布,而不是关于如何人为地创建分布.

关于如何创建一个的文献很多.Box-Muller变换,Marsaglia极地方法(Box-Muller的变体)和Ziggurat算法是三个.(谷歌这些条款).Box-Muller方法都很容易实现.

更好的是,只需使用已经存在的随机生成器来实现其中一种算法.boost和新的C++ 11都有这样的包.