在 [a b] 之间生成以概率 c 出现的均匀分布的随机数

Generate uniformly distributed random numbers between [a b] which occur with probability c

我想生成均匀分布且在 [a b] 范围内的噪声,发生概率为 c,否则为零

我有一种方法

x = rand(1,n);
y = zeros(1,n);
    for i = 1:n
        if x(i) > 1-c
            y(i) = rand()*(b-a)+a;
        end 
    end

但是不知道对不对。

我觉得你在这里给你添麻烦了。函数rand生成1到0之间均匀分布的数。区间[0,1]内任意数出现的概率始终为100%。这意味着 n 个数在区间 [a,b] 中的均匀分布可以生成为

val = (b-a) * rand(n,1) + a;

如果您希望某些事情以 c 的概率发生,那么其他事情需要发生 1-c 次,例如

val = (b-a) * rand(n,1) + a;
val(rand(n,1)>c) = 0;

否则 val 为零。这只是零的示例。问题中给出的信息很难给出更好的答案。