繁体   English   中英

与scipy.integrate.simps集成,但覆盖一个子集

[英]Integrate with scipy.integrate.simps but over a subset

我有一个域X离散X_0, ... X_n 我想使用scipy.integrate.simps集成功能f(x) = x^0.5 但是,我不想在整个X进行积分,而是在[a, b] \\in X进行积分。

现在,总积分\\int_X f(x) dx将使用

X = np.linspace(1, 2) # generate discretized space
simps(X**0.5, X)

但是,如果我只想在1.5和2之间进行集成怎么办? 当我无法确保离散化网格实际上具有点X_i = 1.5时,是否有任何方法无需手动插值f(1.5)即可?

您描述的情况非常不寻常; 通常,当一个人可以随意评估一个函数时,应该使用quad方法进行积分。 让集成例程决定在哪里评估函数要比在等距的点盲目评估然后尝试从中获取积分要有效得多。

但是,如果您对已经分散的函数不满意, 并且不想进行插值,那么一种快速而肮脏的方法是将积分范围之外的值替换为零:

simps(np.where(X >= 1.5, Y, 0), X)

由于这种截断会产生不连续的功能,因此集成的准确性将不如通常的辛普森公司高。 与实际值0.660873 ...相比,上面的返回0.660880 ...相反,在整个间隔(1、2)中, simps在小数点后产生6个正确的数字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM