Search This Blog

Wednesday, September 21, 2011

Programación

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