2014-08-30 19 views
1

我有一個R函數,我試圖整合,但對於函數參數的某些(極端)值,integrate返回不正確的解決方案。我相信這個問題可能是integrate爲這些極值中的一些選擇了不正確的積分點,但首先我會提供證明這個問題。R積分:返回錯誤的解決方案(正在使用錯誤的積分點?)

我希望整合的功能如下。

當我嘗試計算下面,我得到的1正確的解決辦法:

integrate(integrandFunc_F, lower=-Inf, upper=Inf, func_u= 8, func_u_lowerBar= 8, 
    func_u_upperBar= 8, func_mean_v= 30, func_sigma_v= .1, func_sigma_epsilon= 2, 
    func_sigma_y= 1, func_gamma= 1/1.1, func_rho= .05) 

然而,當我試着計算下面,我得到的0不正確的解決方案:

integrate(integrandFunc_F, lower=-Inf, upper=Inf, func_u= 8, func_u_lowerBar= 8, 
    func_u_upperBar= 8, func_mean_v= 50, func_sigma_v= .1, func_sigma_epsilon= 2, 
    func_sigma_y= 1, func_gamma= 1/1.1, func_rho= .05) 

上面我表示我相信這個問題可能與選擇積分點有關。如果在上述函數中取消#print(x)的註釋,則可以看到在func_mean_v = 30的情況下,integrate在相對較大/接近30的正交點上穩定。但是,在func_mean_v=50情況下,在幾次迭代之後,integrate選擇接近0的正交點。接近0的正交點不適合評估此功能,其中包含正態分佈,其平均值爲func_mean_v.

有關如何解決此問題的任何想法?在某些情況下,爲什麼integrate會迭代到接近0的正交點?請注意,func_mean_v = 30func_mean_v = 50的選擇無疑是該功能的極限參數,但是我需要能夠正確計算這些情況。

+0

你試過降低容忍整合的融合?對於適用於所有被積函數的自適應數值積分沒有一般規則(它怎麼知道被積函數在-Inf和+ Inf之間的非零值),所以有時候[需要幫助](http:// r .789695.n4.nabble.com /益智與集成的環比無限範圍-td2548525.html)。 – baptiste 2014-08-30 18:09:18

+0

我試着降低'rel.tol'並增加'subdivisions'的數量。也沒有解決這個問題。有沒有辦法提供'集成'與一組正交點開始?對於正態分佈,不應該很難知道被積函數在哪裏非零。 – Adam 2014-08-30 18:31:08

+0

如果你知道被積函數在哪裏非零,那麼對整合變量進行移位和可選的重定標就是邁向imho的方法;它將極大地幫助「整合」。 – baptiste 2014-08-30 18:37:55

回答

1

你可以在積分變量,以中心爲頂點移位,

wrapper <- function(x, func_mean_v, ...) 
    integrandFunc_F(x+func_mean_v, func_mean_v=func_mean_v, ...) 


integrate(wrapper, rel.tol = 1e-8, lower=-Inf, upper=Inf, func_u= 8, func_u_lowerBar= 8, 
      func_u_upperBar= 8, func_mean_v= 50, func_sigma_v= .1, func_sigma_epsilon= 2, 
      func_sigma_y= 1, func_gamma= 1/1.1, func_rho= .05) 
# 1 with absolute error < 1.3e-09 
+0

謝謝@baptiste。你能編輯顯示給你解決方案1的確切代碼嗎?包裝是一個函數,它內部定義了integrandFunc_F?或者他們是分開定義的? – Adam 2014-08-30 18:48:52

+0

這是_is_的確切代碼!你可能會對包裝器缺少'{}'感到困惑,它們對於單行者來說並不是必需的。 – baptiste 2014-08-30 18:51:01

+0

謝謝!所以我保留了我以前的'integrandFunc_F'的原始定義,然後像在這裏所做的那樣定義函數'wrapper'。 – Adam 2014-08-30 18:58:26