【问题标题】:R - creating a function f(x) from integral of g(x,y)dyR - 从 g(x,y)dy 的积分创建函数 f(x)
【发布时间】:2021-09-25 10:42:01
【问题描述】:

我在 R 中工作,我想知道是否可以创建一个函数 f(x),该函数 f(x) 从函数 g(x,y) 对变量 y 的积分获得,例如 ( 0,1),让我们说:

我试过这段代码

f <- function(x){integrate(function(y){g(x,y),0, 1)}

(使用 g(x,y) 一个显式函数)但除非我修复了 x,否则它不起作用。

还有一些格式化方面的帮助会很棒,因为这是不可读的! 谢谢!

【问题讨论】:

    标签: r numerical-integration


    【解决方案1】:

    它是可用的。你可以试试

    f <- function(x,y) x + y
    f(1,2)
    
    it <- function(x) {
        g <- function(y) f(x,y)
        integrate(g, 0,1)
    }
    it(1)
    

    【讨论】:

      【解决方案2】:

      {caracas} 可能就是您要找的。这是一个可重现的示例:

      library(reticulate)
      library(caracas)
      
      # make symbols x and y:
      x <- symbol("x")
      y <- symbol("y")
      

      函数g

      g <- x ** 3 - y ** 3
      g
      
      #> [caracas]:  3    3
      #>            x  - y
      

      函数fg w.r.t 'y' 从 0 到 1 的积分):

      f <- int(g, var = "y", lower = 0, upper = 1)
      f
      
      #> [caracas]:  3   1
      #>            x  - -
      #>                 4
      

      函数hf w.r.t 'x' 从 0 到 1 的积分):

      h <- int(f, var = "x", lower = 0, upper = 1)
      h
      
      #> [caracas]: 0
      

      【讨论】:

        【解决方案3】:

        也许你可以试试这个

        g <- function(x, y) x^4 + y^2
        f <- Vectorize(function(x) {
            integrate(function(y) g(x, y), 0, 1)$value
        })
        

        你会看到

        > f(c(1, 2, 3, 4))
        [1]   1.333333  16.333333  81.333333 256.333333
        

        curve(f, 0, 5) 给了

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-04-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-24
          • 2023-03-27
          • 1970-01-01
          相关资源
          最近更新 更多