R语言 具有无穷大和函数界的二重积分

31moq8wy  于 2023-01-10  发布在  其他
关注(0)|答案(1)|浏览(478)

我试图在R中积分0到无穷大和0到x为界的二重积分。但是,adaptIntegrate()不能以函数为界,integral2也不能以无穷大为界。是否有其他函数可以在这些特定的界上积分?
下面是adaptIntegrate的代码:

f <- function(x){exp((-(1/2)*x[1] - (1/3)*x[2]))}
adaptIntegrate(f, lowerLimit = c(0,0), upperLimit = c(Inf,x)

同样对于积分2:

xmin <- 0; xmax <- 1
ymin <- 0; ymax <- function(x) sqrt(1 - x^2)
I <- integral2(f, xmin, xmax, ymin, ymax)
ocebsuys

ocebsuys1#

可以嵌套两个integrate来计算二重积分,外部的部分函数对内部的部分函数积分。由于integratef求值为向量化函数,因此需要另一个嵌套在sapply中的函数来向量化integrate本身,计算每个整点(并设置上界)。
这回答你的问题了吗?

f <- function(x, y){
  exp((-(1/2)*x - (1/3)*y))}

partial_x <- integrate(
  function(x) sapply(x, function(x) {
      partial_y <- integrate(
        function(y) sapply(y, function(y) 
          f(x, y)), 
        lower = 0, 
        upper = x)
      return(partial_y$value)
    }), 
  lower = 0,  
  upper = Inf)

partial_x$value
#> [1] 2.4

你也可以使用Vectorize代替sapply来达到同样的目的,并且不需要嵌套在sapply中的函数-

integrate(
  Vectorize(\(x) integrate(
    Vectorize(\(y) f(x, y)), 
    lower = 0, upper = x)$value),
  lower = 0, upper = Inf)$value

同样的方法用于任意嵌套积分。
创建于2023年1月6日,使用reprex v2.0.2

相关问题