Thursday, March 7, 2013

C++ Coding - Using NAG for normal

Question Generate pseudo random numbers from the normal distribution with NAG libraries



Given the long winded approach from this post we are now going to use numerical libraries instead. See the following post (University of Manchester only) for how to set up a visual studio project with NAG libraries:

NAG with Visual Studio

Once you get up to the stage of adding a new cpp file create a file and add the following code with headers

#include <iostream>
#include <nag.h>
#include <nag_stdlib.h>
#include <nagg05.h>
using namespace std;

int main()
{
  return 0;
}
The extra headers at the top are used to reference specific NAG types (nag.h), NAG's version of stdlib (nag_stdlib.h), and the g05 chapter of NAG's libraries which is the one that contains random number generators (nagg05.h). The first 2 libraries must always be included where as the last one depends on what functions we are calling.

The particular function we are interested in is the function g05ddc which accepts two real numbers as arguments (mean and variance) and returns a normally distributed random number (see here for documentation). Then to call the function we can simply write

cout << g05ddc(0.,1.) << endl; // call the random number generator
and to set the seed we must use the function g05cbc. You should note that when working with NAG we should use NAG types (Integer, Nag_Boolean etc) because different compilers store numbers in different ways. So to generate some normally distributed numbers the code is as follows
#include <iostream>
#include <nag.h>
#include <nag_stdlib.h>
#include <nagg05.h>
using namespace std;

int main()
{
  // declare a nag type integer
  Integer seed=1;
  // set the seed
  g05cbc(seed);
  // generate some numbers
  for(int i=0;i<100;i++)
    cout << g05ddc(0.,1.) << endl; // call the random number generator
  return 0;
}

No comments:

Post a Comment