0% found this document useful (0 votes)
158 views13 pages

Computational Lab in Physics: Monte Carlo Integration

The document describes Monte Carlo integration, which uses random sampling to estimate integrals. It involves defining a simple bounding domain, calculating the integral over that domain, and determining the fraction of the bounding domain occupied by the actual domain of interest. This fraction is then used to estimate the integral over the actual domain. Examples are given for integrating the function f(x)=x^2 from 0 to 1 and generating random numbers in ROOT.

Uploaded by

benefit187
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
158 views13 pages

Computational Lab in Physics: Monte Carlo Integration

The document describes Monte Carlo integration, which uses random sampling to estimate integrals. It involves defining a simple bounding domain, calculating the integral over that domain, and determining the fraction of the bounding domain occupied by the actual domain of interest. This fraction is then used to estimate the integral over the actual domain. Examples are given for integrating the function f(x)=x^2 from 0 to 1 and generating random numbers in ROOT.

Uploaded by

benefit187
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 13

Computational Lab in Physics:

Monte Carlo Integration.

Monte Carlo
Integration via Monte Carlo
 A function can have a complicated domain D.
 Define a simple domain D’.
 Choose D’ such that it contains D.
 D’ is a superset of D.
 Integral of domain D’ is easy.
 Integral of domain D is calculated as product of:
 fraction of area (or volume) of D’ taken by D
 Integral of domain D’.
 Fraction can be obtained via Monte Carlo methods.
 Throw a point randomly within D’.
 Check if the point is also in D.
 Repeat many times:
 Fraction ~ (points thrown in D) / (all points).

2
Example: Integrate f(x)=x2
 Need a definite integral
 Use b 1


a
f ( x)dx   x 2 dx
0
 Take our superdomain D’ to be:
 0<x<1 ; i.e. limits of integration (a,b)
 y_min< y <y_max such that:
 y_min = min(y(x)) for 0<x<1

 y_max = max(y(x)) for 0<x<1

 What is the area of this superdomain?


 Square of unit sides, so area = 1.

3
Do the Monte Carlo…
 This is the key to the idea:
 Throw pairs of uniform random numbers
 Each pair represents a point in our 2-D space
 2 points for x-y plane

 3 points for x,y,z 3D

 4 points for 4D…

 If the pair is within the area we are trying to


calculate, count it
 Fraction = points within / all points
 For our example:
 obtain random number for x (in region 0-1)

 obtain random number for y (in region 0-1)

 if (y<f(x)) increment counter

4
In code, with ROOT: User defined
functions

double function(double* x,double* par) {


//the syntax above works for
//functions of many variables
//with many parameters.
//This example is for a 1-D function
//with no additional parameters.
return x[0]*x[0];
}

5
Using TF1 with a User-Defined
function:
double function(double* x,double* par) {
return x[0]*x[0];
}

void userDefined() {
// Illustration of a user defined 1-D function
TF1* theFunc = new TF1("theFunc",function,A,B,0);
//To evaluate the user defined function above,
//use the Eval method:
cout << “f(x) for x=0.5 is “ << theFunc->Eval(0.5) <<
endl;
}

6
Generating Random Numbers:
 Use TRandom3:
 Do NOT use TRandom
 TRandom3 is the recommended generator.

//Argument to the constructor is the seed.


TRandom3 rnd(1); //seed = 1;
//Generate a uniform random number:
rnd.Uniform(); //default, limits are 0 <x< 1
rnd.Uniform(a);//limits are 0 <x< a
rnd.Uniform(a,b);//limits are a <x< b

Other random numbers defined:


-Exp(tau)
-Integer(imax)
-Gaus(mean,sigma)
-Rndm()
-Uniform(x1)
-Landau(mpv,sigma)
-Poisson(mean)
-Binomial(ntot,prob)
Note: Use seed=0 if you want a unique seed every time.
 See class reference for more info. 7
Putting it all together in code, Part 1
double function(double* x,double* par) {
return x[0]*x[0];
}
double monteCarloIntegral(double A, double B, int numberOfRealizations, int seed=1) {
TF1* theFunc = new TF1("theFunc",function,A,B,0);
double yLower = theFunc->Eval(A); // this assumes that
double yUpper = theFunc->Eval(B); // f(A)<f(B) for A<B
TH2D* allPoints = new TH2D("allPoints","All Points",1000,0,1,1000,0,1);
TH2D* intPoints = new TH2D("intPoints","Integral Points",1000,0,1,1000,0,1);
double regionArea = (yUpper-yLower) * (B-A);
int sum = 0;
// Generate points ramdomly within the rectangular region. If they fall below the function to be integrated sum is
// incremented by one.
TRandom3 rnd(seed);
// Note: If seed==0, it will be picked by TUUID object
for (int i=0; i<numberOfRealizations; ++i) {
double xValue = rnd.Uniform(A,B);
double yValue = rnd.Uniform(yLower,yUpper);
allPoints->Fill(xValue,yValue);
if (theFunc->Eval(xValue)> yValue) {
sum++;
intPoints->Fill(xValue,yValue);
}
}
TCanvas* mcIntCnv = new TCanvas("mcIntCnv","Monte Carlo Integration",500,500);
allPoints->Draw();
intPoints->SetMarkerColor(2);
intPoints->Draw("same");
theFunc->Draw("same");
allPoints->SetXTitle("x");
allPoints->SetYTitle("f(x)");
//
double fraction = sum/static_cast<double>(numberOfRealizations); 8
return fraction*regionArea + yLower*(B-A);
Putting it all together in code, Part 2

void exampleMonteCarloIntegration() {
gStyle->SetOptStat(0);
double a, b, result;
int numberOfRealizations;
cout << "Input interval limits A and B, and numberOfRealizations:" << endl;
cin >> a >> b >> numberOfRealizations;
cout.precision(10);
result = monteCarloIntegral(a,b,numberOfRealizations);
cout << "Integral is " << result << ", error " << result-(1./3.) << endl;
return;
}

9
Resulting Histograms:
 Black Points:
 All generated points
 Intervals:
 0<x<1
 0<y<1

 Red Points:
 Generated points with:
 y<f(x)=x2

 Black line: y=x2.


 Fraction:
 # Red pts / # Black pts
 Integral:
 Area of Square x Fraction
10
Homework, Part 1: Area of Unit Circle
or the value of Pi

 Problem 22.1 from Text (50 points)


 Calculate the area of a unit circle.
 Use Monte Carlo integration.

 Modify the program given to do the


integral.
 Make also the corresponding histograms.
 Calculate the error for the given number
of tries.

11
Homework, Part 2:
Calculate the overlap area between
circles… and spheres.
 Write a ROOT macro that calculates the overlap area
between circles of radius 7.5 fm whose centers are
separated by 4 fm. (50 points)

 Extra Credit: The above is the step towards a


calculation used in high-energy nuclear physics. Next
step is to find the overlap volume of two spheres
(e.g. Au nuclei, which to first order can be
approximated as 2 hard spheres of radius 7.5 fm) For
10 extra points, write a program that does the
calculation in 3-D instead of 2-D, i.e.
 Your program should print out a result that answers this
question: What is the overlap volume in fm3 of two
spheres of radius 7.5 fm whose centers are separated
by 4 fm?
12
Dimensions:

R
ad
iu
s
=
7.
5
fm

b=4 fm
13

You might also like