← 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 create a random number generator for a
' particular probability distribution using a specified uniform deviate
' method. Also shown is how to access and modify the uniform deviate
' generating object from the NMath Core random number generator object.

Sub Main()

Console.WriteLine()

' Create a RandomNumberGenerator.UniformRandomNumber delegate object
' from the method System.Random.NextDouble().
Dim SysRand As New Random()
Dim UniformDeviates As RandomNumberGenerator.UniformRandomNumber = AddressOf SysRand.NextDouble

' Now, construct a binomial random number generator using this delegate to
' generate uniformly distributed random deviates between 0 and 1 (the
' binomial generator will transform these uniform deviates into binomial
' deviates).
Dim Trials As Integer = 2000
Dim Prob As Double = 0.002
Dim BinRand As New RandGenBinomial(Trials, Prob, UniformDeviates)

' Create a vector of binomial deviates and use it to create a histogram.
Dim N As Integer = 200
Dim RandomVec As New DoubleVector(N, BinRand)

' Create histogram
Dim NumBins As Integer = 20
Dim H As New Histogram(NumBins, RandomVec)
Console.WriteLine(H.StemLeaf())

' Change the uniform deviate generator to use the method NextDouble() form
' NMath Cores RandGenMTwist class.
Dim Seed As Integer = 999

' Construct the MT generator with the given seed.
Dim MT As New RandGenMTwist(Seed)

' Create the delegate.

' Use the delegate to generate the uniform deviates necessary to for the
' binomial generator.
BinRand.UniformDeviateMethod = UniformDeviates

' Generate a vector of binomial deviates.
Dim RandomSequence1 As New DoubleVector(N, BinRand)

' All NMathCore random number generator classes have Reset() and Reset(int)
' methods that attempt to reset the underlying uniform generator with the
' time of day, for the no argument reset, or the given seed, for the integer
' argument version. These methods return true if the reset was successful and
' false if it was not. The reset methods will succeed if the following
' conditions are met:
' 1. The uniform generator delegate is an instance method, i.e. the Target
'    property of the Delegate class returns a non-null reference.
' 2. The object reference thus obtained has a method named Initialize that
'    returns void and takes no arguments, for the Reset() method, or a
'    single integer argument for the Reset(int) method.
' The RandGenMTwist class has an Initialize(int) method, so the Reset(int)
' method should succeed.
If (BinRand.Reset(Seed)) Then
' Random sequences started using the same seed, so they should be identical.
Dim RandomSequence2 As New DoubleVector(N, BinRand)
Console.WriteLine("randomSequence1 == randomSequence2 is {0}", RandomSequence1.Equals(RandomSequence2))
Else
Console.WriteLine("Could not reset generator")
End If

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