我一直在尝试用数字方法评估一系列复杂的积分。到目前为止我使用的函数是来自dblquad
包的pracma
,但程序遇到了困难。以下是这些困难的一个例子(在一些初步功能之后)。
require(pracma)
n.dens <- function(x, y, rho){
n.dens <- 1/(2*pi*sqrt(1-rho^2))*exp(-1/(2*(1-rho^2))*(x^2 + y^2 - 2*rho*x*y))
return(n.dens)
}
bisquare.psi <- function(x, k){
bisquarepsi <- ifelse(abs(x)<=k, (6/k^2)*x*(1-(x/k)^2)^2, 0)
return(bisquarepsi)
}
e.x. <- function(x, y){
f <- x/sqrt(2) - y/sqrt(2)
return(f)
}
weights.o <- function(x, y, rho){
sigma <- sqrt(1-rho)
u <- e.x.(x, y)/sigma
weights <- bisquare.psi(u, k = 4.685065)/u
return(weights)
}
rho <- 0.9
dblquad(function(x, y, rho) weights.o(x,y, rho)*n.dens(x, y, rho),
xa = -Inf, xb = Inf, ya = -Inf, yb = Inf, rho = rho)
但是这又回来了
Error in integrate(function(y) f(x, y), ya, yb, subdivisions = subdivs, :
non-finite function value
我很想知道,还有另一个用户友好的程序可以完成这项工作吗?请记住,集成的限制是无限的,因此功能需要能够处理。提前谢谢。