[問題] integrate (-inf,inf) 實際的積分範圍
小弟要做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://www.ptt.cc/bbs/Python/M.1578887259.A.56A.html
→
01/13 15:31,
4年前
, 1F
01/13 15:31, 1F
→
01/13 21:48,
4年前
, 2F
01/13 21:48, 2F
→
01/13 21:49,
4年前
, 3F
01/13 21:49, 3F
→
01/13 21:52,
4年前
, 4F
01/13 21:52, 4F
→
01/13 21:53,
4年前
, 5F
01/13 21:53, 5F
想請教一下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
→
01/14 19:59,
4年前
, 6F
01/14 19:59, 6F
→
01/14 19:59,
4年前
, 7F
01/14 19:59, 7F
我要做convolution的其中一個function是不連續的函數
數學底子不好不過想不到不連續函數有什麼可能的解析解QQ
→
01/14 20:00,
4年前
, 8F
01/14 20:00, 8F
G大所說的變數變化是指將兩個函數的定義域都投影到(0,1)區間的對應函數
然後做convolution時直接把積分上下界設定為(0,1)嗎?
我上述的不連續的function有明確的時間範圍,可以投影過去
不過另一個function的值則是從-oo到+oo
這個function在t非常negative或非常positive時值很接近零
有在考慮是否乾脆直接假設超出一個範圍就當作是0,去人為的抓一個上下界
不過也很擔心這是否會對convolution的結果造成影響
另外定義域要映射到另一個區間的話也要考慮單位的轉換
(小弟實際上要解決的是一個物理問題)
不過如果真的這種方法比較可行的話還是不排除試試
→
01/14 20:01,
4年前
, 9F
01/14 20:01, 9F
目前已經知道別人的paper中有做出結果
小弟目前的階段是要去再現別人convolution的結果是否正確
假設對方的結果正確,那我做的積分結果應該會要是收斂的
只是差在目前自己嘗試出來的結果跟paper的不同
所以在檢查數值運算上是否哪邊有問題沒注意到
於是在檢驗數值運算的過程就開始遇到上述的一些狀況QQ
※ 編輯: holycity (1.164.168.128 臺灣), 01/17/2020 15:29:30
討論串 (同標題文章)