【问题标题】:Poisson delay formula/function for VB?VB的泊松延迟公式/函数?
【发布时间】:2011-08-21 20:23:01
【问题描述】:

我有一个要求,我需要在发送下一个数据包之前睡一个泊松持续时间。目前我能想到的公式是

( e^(-lambda) X lambda^t ) / fact(t)

但是,对于时间步长 280 和更多,fact(t) 将由于溢出而过时。

有人可以帮我在 VB .NET 中解决这种传统方式吗?

【问题讨论】:

    标签: vb.net poisson


    【解决方案1】:

    我认为您正在寻找到达间隔时间。可以使用生成随机到达间隔时间

    t = (Math.log(1.0-Math.random())/-lambda
    

    您发布的公式定义了在特定时间段内恰好有 t(在您的情况下)到达的概率

    请参阅generating Poisson distributions 上的维基百科文章。

    【讨论】:

      【解决方案2】:

      即使阶乘值变得非常大(正如您所观察到的),λ k 项也变得有些大以进行补偿。有关表示考虑到这一点的分布的方法,请参阅the Wikipedia article on the Poisson distribution:

      VB 实现可能类似于:

      Module Module1
      
          Sub Main()
              Console.WriteLine(Poisson(4, 250))
              Console.ReadKey()
          End Sub
      
          Function Poisson(ByVal lambda As Integer, ByVal k As Integer) As Double
              Poisson = Math.Exp(k * Math.Log(lambda) - lambda - SumOverLn(1, k))
          End Function
      
          Function SumOverLn(ByVal start As Integer, ByVal endval As Integer) As Long
              Dim i As Integer
              SumOverLn = 0
              For i = start To endval
                  SumOverLn = SumOverLn + Math.Log(i)
              Next
      
          End Function
      
      End Module
      

      一段时间后它看起来非常接近 0,以至于它注册为这样。您可能能够调整显示的精度以获得更多小数位,但 0 可能是高值的足够近似值(您从概率论中得到的概念似乎是这些值确实非常接近于零无论如何)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-31
        • 1970-01-01
        • 2019-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多