我有一个a=[1000 1000 1000 1000 1000];
定义的向量。我被要求在区间[-9,9]中添加均匀噪声,但是仍然将所有元素的总和保存为5000。我该怎么做?提前致谢。
答案 0 :(得分:2)
您可以使用rand
添加均匀的随机噪声。来自Matlab documentation:
通常,您可以使用公式r = a +(b-a)在区间(a,b)中生成N个随机数。* rand(N,1)。
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
答案 1 :(得分:1)
我知道这不是一种优雅的方法,但是您可以为循环中的每个矢量元素绘制噪声,检查先前噪声的总和以及剩余噪声的可能的最大值和最小值。如果您当前的噪声+先前噪声的总和将超出可能的剩余范围,请再次绘制(在新范围内)。必须设置最后一个元素的噪声,以使噪声总和等于零。