c++ - C++ 多项分布
问题描述
我正在尝试编写一个多项式算法,该算法基本上将二项式分布应用于输入向量的每个值,知道所有先前值的值。它的目的是为知道初始种群的多个等位基因生成一个新种群。
这就是我的代码现在的样子:
void RandomNumbers::multinomial(std::vector<unsigned int>& alleleNumbers) {
/* In this function we need two different records of the size.
* We need the size from the old populations, ( N - n1 - ... - nA )
* and we also need the size from the newly created population,
* ( N - k1 - ... - kA ).
* In order to achieve such a task, we'll use the integer "temp" to store
* the value n1 before modifying it to k1 and so on.
*
*
*/
double totalSize = 0;
for(auto n : alleleNumbers) totalSize+=n;
double newTotalSize(totalSize);
std::cout<< newTotalSize;
for(size_t i = 0; i < alleleNumbers.size(); ++i){
size_t temp = alleleNumbers[i];
alleleNumbers[i] = binomial(newTotalSize,
(alleleNumbers[i])/(totalSize));
newTotalSize-= alleleNumbers[i];
totalSize = temp;
}
}
但我对此完全不确定,我想知道是否已经存在这种多项式算法......
非常感谢。
解决方案
您可以尝试使用 GNU Scientific Library 的gsl_ran_multinomial
命令。
该函数被称为:
gsl_ran_multinomial (const gsl_rng * r, size_t K, unsigned int N, const double p[], unsigned int n[])
其中(n_1, n_2, ..., n_K)
是 sum_{k=1}^K n_k = N 的非负整数,(p_1, p_2, ..., p_K)
是 的概率分布sum(p_i) = 1
。如果数组p[K]
未标准化,则其条目将被视为权重并进行适当的标准化。数组n[]
和p[]
都必须是 length K
。
该函数实现了 CS Davis 的“多项随机变量的计算机生成”(Comp. Stat. Data Anal. 16, 1993. link)中的条件二项式方法,因此您可以使用该方法来实现。如果您需要这份文件的副本,请告诉我。
推荐阅读
- apache-kafka - 有没有办法将chrome历史日志发送到kafka?
- java - Jbpm 7.39 故障
- groovy - jMeter JSR223PostProcessor - 使用脚本运行文件 - 相对路径
- c# - IStringLocalizer 注入.Net Core 2.2
- reactjs - 无法在我的组件中使用来自 redux-form 的数据
- javascript - 使用 axios 在发布请求中传递 ReactJS 状态数据时如何解决问题?
- java - Java:Drag&Drop:从 DropTargetDropEvent 将数据返回到主类
- python-3.x - 你如何创建一个函数来返回它在 python 3 中被调用的行号?
- docker - 如何检查 IBM 容器注册表中是否存在特定的 Docker 映像
- hibernate - 最大连接池