我有一个由a=[1000 1000 1000 1000 1000];
定义的向量。我被要求在区间[-9,9]中添加均匀的噪声,但仍然将所有元素的总和保存为5000.我该怎么做?提前致谢。
您可以使用rand
添加均匀的随机噪声。来自Matlab documentation:
通常,您可以使用公式r = a +(b-a)。* rand(N,1)在区间(a,b)中生成N个随机数。
vec = [1000 1000 ... 1000];
noise = -9 + 18 * rand(size(vec));
然后你需要将噪音集中在0附近:
noise = noise - mean(noise);
最后,将它添加到初始向量:
vec = vec + noise;
例如:
>> vec = [1000 1000 1000 1000 1000];
>> noise = -8 + 18 * rand(size(vec));
>> vec_noise = vec + noise - mean(noise)
vec_noise =
1.0e+03 *
1.0002 0.9968 1.0021 0.9988 1.0020
>> sum(vec_noise)
ans =
5000
我知道它不是一种优雅的方式,但你可以为循环中的每个向量元素绘制噪声,检查先前噪声的总和以及剩余噪声的可能最大值和最小值。如果您当前的噪音+先前噪音的总和超过可能的剩余范围,请再次绘制(在新范围内)。必须设置最后一个元素的噪声,使噪声和等于零。