简单的思路就是:
先生成N个随机数的向量,然后把这个向量的和加起来跟X做除法获的倍数,再对向量的每一个数据除以这个倍率:
randVector = rand(X , n) result = round((X\sum(randVector))*randVector,0)
后续如果要实现,向量之后加起来准确等于X,可以计算,向量和与X的差值,把差值随机分配到某一个数据上即可。
应用截绳法可以获得更为均匀的结果,放缩会导致均匀性发生变化。
X = 50.0 n = 10 nodeVector = rand(X , n-1).sort!().append!(X) preVector = move(nodeVector, 1) preVector[0] = 0.0 randVector = nodeVector - preVector
参考链接:
https://en.wikipedia.org/wiki/Irwin%E2%80%93Hall_distribution
https://en.wikipedia.org/wiki/Dirichlet_distribution
https://en.wikipedia.org/wiki/User:Skinnerd/Simplex_Point_Picking