2011-08-21 60 views
2

我有一個需求,在發送下一個數據包之前,我需要在泊松時間內休眠。電流式I能想到的是VB的泊松延遲公式/函數?

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

然而,對於時間的步驟280和更多的事實(T)將成爲由於溢出過時。

有人可以幫助我解決這個傳統的方式在VB.NET中?

回答

2

我認爲你正在尋找到達時間間隔。可使用

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

您發佈的公式來生成的隨機到達間隔時間是一個定義概率有恰好噸(你的情況)特定的時間週期內進港航班。

請參閱維基百科有關generating Poisson distributions的文章。

0

即使階乘值變得非常大(正如您所觀察到的),術語也會變得稍大以彌補。換一種方式來表示,考慮到這一分佈情況,參見the Wikipedia article on the Poisson distribution:

enter image description here

一個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對於高數值可能是足夠恰當的近似值(您從概率論中得出的概念似乎是這些值確實非常接近零無論如何)。