[問題] integrate (-inf,inf) 實際的積分範圍

看板Python作者 (迪兒~)時間4年前 (2020/01/13 11:47), 4年前編輯推噓0(009)
留言9則, 2人參與, 4年前最新討論串1/3 (看更多)
小弟要做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
程式沒這麼厲害好嗎, 定積分不要丟-inf到inf給他
01/13 15:31, 1F

01/13 21:48, 4年前 , 2F
1. scipy 的 quad 允許上下界為 inf。
01/13 21:48, 2F

01/13 21:49, 4年前 , 3F
2. 若上下界有其一為 inf,會轉換至 (0, 1) 區間。
01/13 21:49, 3F

01/13 21:52, 4年前 , 4F
3. QUADPACK 並不適用任何函數,尤其是過大的積分範圍
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
1. 先尋找是否存在解析解,如回文使用的 sympy。
01/14 19:59, 7F
我要做convolution的其中一個function是不連續的函數 數學底子不好不過想不到不連續函數有什麼可能的解析解QQ

01/14 20:00, 4年前 , 8F
2. 是否能變數變化將定義域對應至 (0, 1) 區間。
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
3. 逐漸增加積分範圍,看結果是否收斂。
01/14 20:01, 9F
目前已經知道別人的paper中有做出結果 小弟目前的階段是要去再現別人convolution的結果是否正確 假設對方的結果正確,那我做的積分結果應該會要是收斂的 只是差在目前自己嘗試出來的結果跟paper的不同 所以在檢查數值運算上是否哪邊有問題沒注意到 於是在檢驗數值運算的過程就開始遇到上述的一些狀況QQ ※ 編輯: holycity (1.164.168.128 臺灣), 01/17/2020 15:29:30
文章代碼(AID): #1U6-XRLg (Python)
文章代碼(AID): #1U6-XRLg (Python)