我想計算下面的積分中的R集成()R非謂語函數值與雖然解存在
Error in integrate(function(x) { : non-finite function value
然而,當我整合到1.600001或1.599999,它的工作和收益率0.4710365和0.4710357。
但並沒有什麼特殊的點處,1.6此功能...所以它應該是一些奇怪的數字問題R.
任何想法?
我想計算下面的積分中的R集成()R非謂語函數值與雖然解存在
Error in integrate(function(x) { : non-finite function value
然而,當我整合到1.600001或1.599999,它的工作和收益率0.4710365和0.4710357。
但並沒有什麼特殊的點處,1.6此功能...所以它應該是一些奇怪的數字問題R.
任何想法?
在符合@的BHA的答案,我會去以下解決方案:
> f <- function(x){ifelse(x!=1,((1.-x)^2)/(abs(1.-x))^(1/3),0)} # Set f(1)=0 since it is the limit of 'f' at 1.
> integrate(f,lower=0,upper=1.6,abs.tol=1E-7)
0.4710361 with absolute error < 2.2e-08
「ifelse」避免了與一個量化的問題,「X」
如果你寫你的函數類似這樣的
f <- function(x) {
r <- ((1.-x)^2)/(abs(1.-x))^(1/3)
cat("x=",x,"\n")
cat("r=",r,"\n")
r
}
你可以得到所發生的事情有所瞭解。 試試這個
z <- integrate(f,lower = 0, upper = 1.6, abs.tol = 1E-7,subdivisions=50)
z
而且你會看到integrate
通過的1
值的功能f
。 除以0
(來自1-x)
)給出NaN
。這似乎是integrate
的人爲因素。
隨着您指定的限制,您跳過了函數未定義的點。 你可以避免做
z1 <- integrate(f,lower = 0, upper = 1, abs.tol = 1E-7)
z1
z2 <- integrate(f,lower = 1, upper = 1.6, abs.tol = 1E-7)
z2
z1$value+z2$value
賦予的
[1] 0.4710361
結果我不知道如何通過你做了還是什麼我想什麼來解決這個問題以外。
但是,集成高達1.600001的時候,我也傳遞1的未定義值。還有其他值大於1工作得很好......那麼爲什麼1.6? –
簡而言之,您不會傳遞'x'的值1。在逼近積分的過程中「整合」了這一點。顯然它取決於上限1.6與下限0的組合,這很可能只是由您的特定功能引起的。看看我的函數'f'的輸出。 – Bhas
不錯的解決方案。但是你可以把任何你喜歡的東西放在'ifelse'的第三個參數中。嘗試'10.99'而不是'0'。 – Bhas
@Bhas,這是真的,但0是這個函數唯一正確的極限1 ;-)另外,在調用'integrate'時,插入10.99可能會導致錯誤的結果。 – DeeCeeDelux