【问题标题】:Generate uniformly distributed random numbers between [a b] which occur with probability c在 [a b] 之间生成以概率 c 发生的均匀分布的随机数
【发布时间】:2015-03-10 16:58:07
【问题描述】:

我想生成均匀分布且在 [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

但我不确定它是否正确。

【问题讨论】:

  • “以 c 的概率均匀发生”是什么意思?
  • 我不知道你想实现什么,但你可以用x = rand(1,n)<c; y = zeros(1,n); y(x)=rand(size(y(x))).*(b-a)+a 替换它,这对于大 n 来说要快得多,并且效果相同。
  • rand 已经在均匀分布(又名等概率)下生成随机数。你所拥有的是正确的,但请使用 Daniel 的方法并将其矢量化。
  • @Daniel 我不确定,但我认为 OP 希望 70% 的值在此区间内并均匀分布。我不确定他想对其余的值做什么,所以当 OP 告诉我们 x 时,问题可能会变得更加复杂。刚刚意识到我的答案与您的评论相似。只需发送一个答案,然后我将删除我的。
  • 我想生成均匀分布且在 [a b] 范围内并且以 c 的概率发生的噪声。否则为零

标签: matlab random floating-point numbers


【解决方案1】:

我认为你在这里给你带来了困难。函数rand生成1到0之间均匀分布的数字。区间[0,1]中的任何数字出现的概率总是100%。这意味着在区间[a,b] 中均匀分布的n 数具有均值(a+b)/2 可以生成为

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

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

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

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

【讨论】:

  • 我想生成均匀分布且在 [a b] 范围内并且以 c 的概率发生的噪声。否则为零。
  • @imtiyazkhan 那么向量 val 应该是你要找的。 变量val 将是n 样本的向量,其中c% 不为0,并且均匀分布在区间[a,b]。所以换句话说,在给定伯努利分布噪声的情况下,噪声功率是均匀分布的。如果这不是您正在寻找的答案,您应该重新表述您的问题。
  • @帕特里克。看来我所做的和你的一样。如果它是正确的,那么我的也是正确的。
  • @imtiyazkhan 我想,但是您可能更喜欢我的版本或评论中的Daniels version。那个是矢量化的。这意味着它更干净,而且可能更快。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-09
  • 2015-06-24
  • 2012-09-18
  • 2011-03-07
  • 1970-01-01
相关资源
最近更新 更多