考虑到我需要一个n大小的矢量,其中每个元素都定义在[-1,1]之间。元素a [i]是由-1 + 2 * rand()生成的浮点数。我需要一种优雅的方法来确保数组元素的总和等于零。
我发现了两种可能的解决方案:
第一个是这个matlab函数https://www.mathworks.com/matlabcentral/fileexchange/9700-random-vectors-with-fixed-sum。它在R中也有一个实现,但是在C上实现它的工作量很大,因为此函数用于2d数组。
此线程在此处提供第二个值:在C ++中生成具有固定总和的随机值。本质上,这个想法是生成具有正态分布的n个数字,然后用我的总和将它们归一化。(我已经使用python波纹管实现了它),向量总计为1.0。它适用于除零以外的每个和值。
import random as rd
mySum = 1;
randomVector = []
randomSum = 0
for i in range(7):
randomNumber = -1 + 2*rd.random()
randomVector.append(randomNumber)
randomSum += randomNumber
coef = mySum/randomSum
myNewList = [j * coef for j in randomVector]
newsum = sum(myNewList)
Run Code Online (Sandbox Code Playgroud)
那么,有没有办法使用C或C ++做到这一点?如果您知道已经实现的功能,那就太好了。谢谢。