La integración se realiza con el método de Riemann, es decir se construye un llenado de la región a integrar con simplicios adecuados, es decir figuras de lados rectos. Aunque las curvas obtenidas sean fractales en ocasiones, no se comete un error al calcular el área, o volumen de mayor dimensión que se desee.
Sin embargo existe otro método. El método de Monte Carlo consiste en poner puntos al azar en la región a integrar, y su universo. Después se cuentan las que están dentro y las que están fuera. El cociente entre las que están dentro sobre el total de puntos del universo, es una medida del área.
Presento en Python un programa para calcular el área:
import numpy as np #aca se importo la libreria numpy
#la idea es aproximar un circulo
Ni=0
No=0 #inicializamos variables
NT=0
for i in range(0,1000000): #ciclo, podemos usar un numero cualquiera, pero hay que tener bien en cuenta que este representa el
x=2*r*np.random.rand() #numero de puntos aletorios
y=2*r*np.random.rand()
NT=NT+1
d=np.sqrt((x-r)**2+(y-r)**2) #definimos el rango
if d
Obviamente este programa no está terminado, aquí hay otro:
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)
El segundo programa tomado de ActiveState
No comments:
Post a Comment