Welcome, guest | Sign In | My Account | Store | Cart

Calculating area under the curve using Monte Carlo method for any given function.

Python, 38 lines
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38``` ```# Calculating area under the curve using Monte Carlo method # FB - 201006137 import math import random # define any function here! def f(x): return math.sqrt(1.0 - x * x) # define any xmin-xmax interval here! (xmin < xmax) xmin = -1.0 xmax = 1.0 # find ymin-ymax numSteps = 1000000 # bigger the better but slower! ymin = f(xmin) ymax = ymin for i in range(numSteps): x = xmin + (xmax - xmin) * float(i) / numSteps y = f(x) if y < ymin: ymin = y if y > ymax: ymax = y # Monte Carlo rectArea = (xmax - xmin) * (ymax - ymin) numPoints = 1000000 # bigger the better but slower! ctr = 0 for j in range(numPoints): x = xmin + (xmax - xmin) * random.random() y = ymin + (ymax - ymin) * random.random() if f(x) > 0 and y > 0 and y <= f(x): ctr += 1 if f(x) < 0 and y < 0 and y >= f(x): ctr += 1 fnArea = rectArea * float(ctr) / numPoints print "Area under the curve = " + str(fnArea) ```

FB36 (author) 13 years, 5 months ago

In the given example, it would calculate pi/2 because the given function defines a half-circle.

Pietro Berkes 13 years, 5 months ago

Given that the code is already evaluating the function at a huge number of points (lines 19--23), conventional numerical integration would be far better. Also, the kind of rejection sampling proposed here is very inefficient, and requires knowing the minimum and maximum of the function.

FB36 (author) 13 years, 5 months ago

I certainly did not write this code for any practical purpose. Monte Carlo is probably the most inefficient solution method for almost any problem. I only put it here thinking some people may find it interesting, that's all.

 Created by FB36 on Sun, 13 Jun 2010 (MIT)