作者holycity (迪儿~)
看板Python
标题[问题] integrate (-inf,inf) 实际的积分范围
时间Mon Jan 13 11:47:37 2020
小弟要做convolution
原本是用numpy.convolve但出来的结果有些问题
後来改成用scipy.integrate.quad去乖乖做convolution的积分
测试了几个简单的functions结果正确,但也有测到结果很奇怪的
试着print了一下scipy.integrate.quad实际做积分时用的数字
发现他只是很快的在定义域抓一些数字去做计算
尤其是积分范围是(-inf, inf)时抓的数字范围很小
测试的code如下:
import numpy as np
import math
from scipy import integrate
def fn_1(t):
print(t)
return np.power(t, 2) * math.exp(-t**2)
temp_int_1 = integrate.quad(fn_1, -np.inf, np.inf)
temp_int_2 = integrate.quad(fn_1, -10**10, 10**10)
print(temp_int_1)
print(temp_int_2)
--
积分过程读取fn_1时会顺便print当时带入的t
有趣的是两组不同的积分范围带入的t很不同
另外积分范围为[-10**10, 10**10]时输出的结果是0
但上面测试的函数为偶函数,计算出来的结果有矛盾
想请知道个中问题的高手帮忙解惑QQ
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.160.10.233 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1578887259.A.56A.html
1F:→ as30385438: 程式没这麽厉害好吗, 定积分不要丢-inf到inf给他 01/13 15:31
2F:→ GeoMeTric: 1. scipy 的 quad 允许上下界为 inf。 01/13 21:48
3F:→ GeoMeTric: 2. 若上下界有其一为 inf,会转换至 (0, 1) 区间。 01/13 21:49
4F:→ GeoMeTric: 3. QUADPACK 并不适用任何函数,尤其是过大的积分范围 01/13 21:52
5F:→ GeoMeTric: + 相对小的范围有显着地的值。 01/13 21:53
想请教一下G大,目前我想做convolution的计算
function 1的定义域是(-inf, inf)
function 2的定义域是(0, inf) (目前用if t<0, fun_2=0 去让定义域延展到全实数域)
两函数在t<10**9的范围内都仍有不小的值(>=1)
到t~=10**10左右值才会降到很小(<0.01)
有什麽适合的module可以用吗?
还是说python在这部分没办法做,得要用其他科学计算工具?QQ
※ 编辑: holycity (1.160.10.233 台湾), 01/13/2020 23:02:03
6F:→ GeoMeTric: 我不是这方面的专家,以下为个人看法。 01/14 19:59
7F:→ GeoMeTric: 1. 先寻找是否存在解析解,如回文使用的 sympy。 01/14 19:59
我要做convolution的其中一个function是不连续的函数
数学底子不好不过想不到不连续函数有什麽可能的解析解QQ
8F:→ GeoMeTric: 2. 是否能变数变化将定义域对应至 (0, 1) 区间。 01/14 20:00
G大所说的变数变化是指将两个函数的定义域都投影到(0,1)区间的对应函数
然後做convolution时直接把积分上下界设定为(0,1)吗?
我上述的不连续的function有明确的时间范围,可以投影过去
不过另一个function的值则是从-oo到+oo
这个function在t非常negative或非常positive时值很接近零
有在考虑是否乾脆直接假设超出一个范围就当作是0,去人为的抓一个上下界
不过也很担心这是否会对convolution的结果造成影响
另外定义域要映射到另一个区间的话也要考虑单位的转换
(小弟实际上要解决的是一个物理问题)
不过如果真的这种方法比较可行的话还是不排除试试
9F:→ GeoMeTric: 3. 逐渐增加积分范围,看结果是否收敛。 01/14 20:01
目前已经知道别人的paper中有做出结果
小弟目前的阶段是要去再现别人convolution的结果是否正确
假设对方的结果正确,那我做的积分结果应该会要是收敛的
只是差在目前自己尝试出来的结果跟paper的不同
所以在检查数值运算上是否哪边有问题没注意到
於是在检验数值运算的过程就开始遇到上述的一些状况QQ
※ 编辑: holycity (1.164.168.128 台湾), 01/17/2020 15:29:30