# 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
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)
Diff to Previous Revision
--- revision 2 2010-06-13 19:19:09
+++ revision 3 2010-06-16 19:20:27
@@ -29,7 +29,11 @@
for j in range(numPoints):
x = xmin + (xmax - xmin) * random.random()
y = ymin + (ymax - ymin) * random.random()
- if math.fabs(y) <= math.fabs(f(x)):
+ 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
+ if f(x) == 0 and y == 0 and y >= f(x):
ctr += 1
fnArea = rectArea * float(ctr) / numPoints