1
我使用R的集成函數,但被積函數給我帶來一些麻煩(它有一個奇點)。考慮這一點,柯西主值數值積分
distrib <- function(x){
dnorm(x, mean=700,sd=50)
}
phi <- function(nu, epsilon=20, maxi=Inf){
fun <- function(nup) {
lambdap <- 1e7/nup
distrib(lambdap)/(nup*(nup - nu))
}
# first part: from epsilon to nu - epsilon
I1 <- integrate(fun, epsilon, nu-epsilon, rel.tol = 1e-8,
subdivisions = 200L)
# second part: from nu + epsilon to Infty
I2 <- integrate(fun, nu+epsilon, maxi, rel.tol = 1e-8,
subdivisions = 200L)
I1$value + I2$value
}
x <- seq(1e7/500, 1e7/1000, length=200)
phi1 <- sapply(x, phi)
phi1 <- sapply(x, phi, epsilon=5)
#Error in integrate(fun, epsilon, nu - epsilon, rel.tol = 1e-08, subdivisions = #200L) :
# the integral is probably divergent
是否有計算R,使得主值的一個更好的辦法,比切斷參數玩耍和手動調節它,直到它給出了一個結果(不一定準確)?
是否有可能重新說明問題 - 如果您將評估函數的值分配爲1/fun,那麼您最終會在接近奇點的多個點進行評估。另一種觀察方式是採用反函數並將其整合兩次 - 在奇點的任一側。現在你的x會擴展到無窮大,但你的奇點已經消失... – Floris 2013-03-06 23:16:22
@baptiste你可以放寬公差參數,因爲精度不是必須的。例如用'rel.tol = 1e-6'來收斂。 – agstudy 2013-03-06 23:42:20
@弗洛裏你建議改變變量,對吧?我不知道這種類型的被積函數是好的,但我想這是一種選擇。 – baptiste 2013-03-07 04:39:27