C# Random Number Example

[TOC]

using System;

using CenterSpace.NMath.Core;

namespace CenterSpace.NMath.Core.Examples.CSharp
{
  /// <summary>
  /// A .NET example in C# showing how to generate random numbers from a normal distribution,
  /// using the class RandGenNormal, and place them in a histogram.
  /// </summary>
  class NormalRNGExample
  {

    static void Main(string[] args)
    {
      double mean = 70.0;
      double variance = 10.0;

      // Create a default generator. The default generator will generate 
      // random numbers from a normal distribution with a specified mean
      // and variance.
      RandGenNormal normalRng = new RandGenNormal(mean, variance);

      // Now construct a vector of random numbers using this generator.
      int numRandDeviates = 200;
      DoubleVector randomVec = new DoubleVector(numRandDeviates, normalRng);

      // Create a histogram with equal sized bins for the random numbers.
      int numBins = 20;
      Histogram h = new Histogram(numBins, randomVec);

      Console.WriteLine();

      // Print out the histogram in a "stem leaf" format.
      Console.WriteLine("{0} random deviates from a normal({1},{2}) distribution:",
        numRandDeviates, mean, variance);
      Console.WriteLine(h.StemLeaf());

      // Change the mean and variance for generator and check the mean and  
      // varaince of the generated deviates.
      normalRng.Mean = -2.0;
      normalRng.Variance = 1.0;
      randomVec = new DoubleVector(1000, normalRng);

      double meanOfDeviates = NMathFunctions.Mean(randomVec);
      Console.WriteLine("Distribution mean = {0}, mean of deviates = {1}",
        normalRng.Mean, meanOfDeviates);

      double varianceOfDeviates = NMathFunctions.Variance(randomVec);
      Console.WriteLine("Distribution variance = {0}, varaince of deviates = {1}",
        normalRng.Variance, varianceOfDeviates);

      // Replace the vector's contents with new random numbers
      randomVec.Transform(new NMathFunctions.DoubleFunction(normalRng.NextDouble));

      Console.WriteLine();
      Console.WriteLine("Press Enter Key");
      Console.Read();
    }
  }// class

}// namespace

[TOC]