2017-01-24 18 views
3

我想知道高斯laguerre如何在大範圍內工作。例如, 我在兩個維度都有一個從(0,+ inf)開始的2D函數。當我在python中使用gauss laguerre時,通過總結采樣權重和橫座標的函數,我沒有接近我使用的東西,比如說dblquad。以下是集成示例代碼。 lgw通過使用兩個for循環輸出用於雙重積分的權重和橫座標。 我看不出像x,y = 1e8,1e8這樣的採樣點是如何被捕獲的。增加n並不能提供高水平(至少不是很高)。高斯laguerre集成如何在大範圍內工作?

kzas,kzws = lgw(n) 
for kta,ktw, in zip(kzas,kzws): 
    for kza,kzw in zip(kzas,kzws): 
     fval = integrand(kza,kta) 
     wghtx = kzw*numpy.exp(kza) 
     wghty = ktw*numpy.exp(kta) 
     integral += wghtx*wghty*fval 

有人可以解釋如何捕獲更高的採樣點嗎?我沒有正確使用正交嗎?我可以將函數與小限制集成,比如1e2左右。如果限制較高,該怎麼辦說1e15?我從理論上看到了這個定義,但我沒有看到如何捕獲更高的權重和橫座標。

謝謝

編輯:這是不可能進一步減少我的功能。被積函數的不同部分用數字計算,所以我沒有任何分析表達式。我只能說功能是平滑的並且具有正弦行爲。

+0

替換第一行中的最內部循環你是什麼功能的行爲的參數接近'+ inf'?我懷疑,如果你只是採樣「足夠遠的」點,你永遠不可能得到一個好的數值近似值,並且超出這個「足夠遠」的函數的行爲在某種程度上是不平凡的。你可以在應用數字方法的地方定義一個半徑,並通過分析估算剩餘的半徑? – 9000

+0

@ 9000即使對於像1e10這樣的值,該函數也是非零的,並且僅在5e10之後才爲零。在它之間它以0和1之間以正弦方式變化(不總是,但我可以說它有這種變化)。它的函數值並不是很高,也沒有任何奇點。 – user3840530

回答

0

如果我讀this正確,第n拉蓋爾多項式的根被

N +(N-1)的sqrt(N)

這意味着你必須去出奇的高界從被積函數中較偏遠的點抽樣。

如果你的被積函數沒有太快擺動,你可以嘗試一下,我想是重新調整座標軸。更具體地講,您可以使用調整

\拉姆達\ INT_0^\ infty˚F您的積(\拉姆達X)DX = \ INT_0^\ infty F(X)DX

的支持,你的情況,你會可能要使用一個相當大的\ lambda。

要更加具體,嘗試用

fval = lam*lam * integrand(lam*kza, lam*kta) 
+0

這個方法的主要目的是將函數極限(0,inf)容易地集成。對高度要求的限制會違反目的。特別是當通過內置程序無法提供如此高的學位時。我不是說它不能被計算。應該有一種方法可以讓人們長期使用這種方法來達到這樣的極限。 – user3840530

+0

那麼,對於那種存在於第一位的不適當的積分來說,被積函數最終必須衰減得足夠快。我不得不承認,我對高斯 - 勒讓爾的特定長度範圍的來源沒有直覺,但它們就像它們一樣。而且他們似乎不適合你的積分規模。但正如我所說的,你可以嘗試使用c int_0^infty f(cx)dx = int_0^infty f(x)dx來重新縮放。如果你選擇c足夠大,你可以將你的被積函數支持到一個可管理的範圍內。 –

+0

我試着使用lambda的最後一個建議。我得到的值比不使用lambda大,但仍低於我使用dblquad的值。它可能仍然是正確的,因爲它可能是dblquad計算錯誤。如果我嘗試通過增加lambda來玩耍,我會在指數(nan等)中出現溢出錯誤。所以在max,我可以去lambda的1e9。如果我使用lambda的較低值,我會得到非常小的積分值。我想知道是否有另一種方式來改變這種積分。感謝您的建議。 – user3840530