2015-04-12 9 views
0

Я пытаюсь аппроксимировать тройной интеграл ∫∫∫xyzdV, где S = [0,1] × [0,1] × [0,1] с использованием метода Монте-Карло. У меня есть этот код:Метод Монте-Карло. Тройной интеграл. Python. неподдерживаемый операнд родителя (ов) для '+'

from numpy import * 
import time 
from scipy.integrate import tplquad 
numpoints=100000 # number of random sample points 
I2d=0.0  # initialize value 
I2dsquare=0.0 # initialize to allow for calculation of variance 
for n in xrange(numpoints): 
    x=random.uniform() 
    y=random.uniform() 
    z=random.uniform() 
    func = lambda x,y,z: x*y*z 
    x1,x2 = 0, 1 
    y1,y2 = lambda x: 0,lambda x: 1 
    z1,z2 = lambda x, y: 0,lambda x, y: 1 
    I2d += tplquad(func, x1,x2,y1,y2,z1,z2) 
    I2dsquare += (tplquad(func, x1,x2,y1,y2,z1,z2))**2 

I2d=I2d/numpoints 
I2dsquare=I2dsquare/numpoints 
EstimError=4*sqrt((I2dsquare - I2d**2)/numpoints) # estimated error 
I2d=4*I2d 
print "Value: %f" %I2d 
print "Error estimate: %f" %EstimError 

И у меня есть эта ошибка:

Traceback (most recent call last): for n in xrange(numpoints): 
File "", line 1, in <module> 

File "/tmp/tmpx_9bf5/___code___.py", line 17, in <module> 
    I2d += tplquad(func, x1,x2,y1,y2,z1,z2) 
File "element.pyx", line 999, in sage.structure.element.ModuleElement.__iadd__ (sage/structure/element.c:8285) 
File "coerce.pyx", line 797, in sage.structure.coerce.CoercionModel_cache_maps.bin_op (sage/structure/coerce.c:7467) 
TypeError: unsupported operand parent(s) for '+': 'Real Field with 53 bits of precision' and '<type 'tuple'>' 

Я понимаю, что есть различные типы в этом коде, но я не понимаю, как это исправить. Если я попытаюсь сделать этот код для квадратичного уравнения, например, все в порядке, но интеграл, к сожалению, не работает.

ответ