VB Vectorized RNG Example

← All NMath Code Examples

 

Imports System

Imports CenterSpace.NMath.Core

Namespace CenterSpace.NMath.Core.Examples.VisualBasic

  ' A .NET example in Visual Basic showing how to generate random numbers from a stream.
  Module VectorizedRNGExample

    Sub Main()

      ' Unlike scalar-type generators whose output is a successive random number, vector 
      ' generators produce a vector of n successive random numbers from a given 
      ' distribution. Vector type random number generators will generally perform
      ' better than scalar ones because overhead expense of a function call
      ' is comparable to the total time required for computation. 

      ' A stream is constructed from an optional seed, and an optional enumerated value specifying which
      ' algorithm to use for generating random numbers uniformly distributed in the interval (0, 1).
      Dim Seed As Integer = &H345
      Dim Stream As New RandomNumberStream(Seed, RandomNumberStream.BasicRandGenType.MersenneTwister)

      ' NMath provides distribution modules for many continuous and discrete distributions, each with 
      ' their own distribution parameters.
      Dim mean As Double = 1.0
      Dim Sigma As Double = 1.0
      Dim Dist As New DoubleRandomGaussianDistribution(mean, Sigma)

      ' You can use a stream and distribution to fill an array. 
      Dim N As Integer = 100
      Dim Start As Integer = 0
      Dim A(N) As Double
      Dist.Fill(Stream, A, Start, N)

      ' Or to fill a new vector or matrix.
      Stream.Reset(Seed)
      Dim V As New DoubleVector(N, Stream, Dist)

      Console.WriteLine()

      ' Display a histogram.
      Dim numbins As Integer = 10
      Dim Hist As New Histogram(numbins, V)
      Console.WriteLine(Hist)

      ' If you want the performance of a vectorized random number generator, but still need to access the 
      ' random deviates sequentially, NMath provides Module RandomNumbers, which uses a stream to
      ' buffer the random numbers internally.
      Dim BufferSize As Integer = 100
      Dim Rnd As New RandomNumbers(Of Double, DoubleRandomGaussianDistribution)(Seed, Dist, BufferSize)

      For I = 0 To 9
        Console.WriteLine("Next() = {0}", CType(Rnd.Next(), Double))
      Next

      Console.WriteLine()
      Console.WriteLine("Press Enter Key")
      Console.Read()

    End Sub
  End Module
End Namespace

← All NMath Code Examples
Top