[TOC]
Imports System
Imports CenterSpace.NMath.Core
Namespace CenterSpace.NMath.Core.Examples.VisualBasic
' <summary>
' A .NET example in C# showing how to generate random numbers from a stream.
' </summary>
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 dstributed in the interval (0, 1).
Dim Seed As Integer = &H345
Dim Stream As New RandomNumberStream(Seed, RandomNumberStream.BasicRandGenType.MersenneTwister)
' NMath provides distribution Modulees 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)
' 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
[TOC]