问题描述
In[1]:= rect[x_] = If[x <= 0.5,1,0];
In[2]:= N[Integrate[Integrate[rect[(x^2 + y^2)^.5],{x,100.}],{y,0.,100.}]]
Out[3]= 0.19635
但是,当我使用Python中的cubature包进行此操作时,对于超出13的集成限制,甚至对于(-13,13)而言,我都无法获得任何合理的信息。确实必须是+/- 10。
这是python代码:
import time
import numpy as np
from cubature import cubature
start = time.time()
def rect(r):
return np.where(abs(r) <= 0.5,0)
def Wp(r1,r2):
return rect((r1 ** 2 + r2 ** 2) ** 0.5)
def integrand_rectangle(x_array):
return Wp(x_array[:,0],x_array[:,1])
# boundaries
a = 0.0
b_x = 100.0
xmin_t = [a,a]
xmax_t = [b_x,b_x]
val_t,err_t = cubature(integrand_rectangle,2,xmin_t,xmax_t,vectorized=True)
print(val_t)
end = time.time()
print(f"Runtime of the program is {end - start}")
我尝试过交互的数量,相对误差和绝对误差容限,似乎没有什么可以解决的。有解决方案吗?为什么这个经过良好测试的程序包不能执行如此简单的集成?我做错了吗?
我尝试了原始的C-cubature,并且它完美,快速地运行了!这是python-C接口的问题!这是一个错误!