【问题标题】:Finding root of a function containing an array using uniroot.all使用 uniroot.all 查找包含数组的函数的根
【发布时间】:2018-12-26 12:44:48
【问题描述】:

我正在尝试找到这样一个函数的根源

f <- function(x) {
    sum( tanh(Carray + x) ) - x
}

library(rootSolve)
roots <- uniroot.all(f,c(0,1))

其中 x 是一个标量,而 Carray 是一个数组。问题似乎是 uniroot.all 一次向 f 发送整个 x'es 数组,然后 R 对执行 Carray+x 感到困惑(警告:“更长的对象长度不是更短的对象长度的倍数”)。

当 x 是标量时,函数 f 按预期工作。我不确定如何对 f 进行矢量化,以便可以将 x'es 数组传递给它。

【问题讨论】:

    标签: r


    【解决方案1】:

    如果我们知道Carray 的大小,也许可以更自然地矢量化f,但对于一般的Carray,您可以使用Vectorize

    roots <- uniroot.all(Vectorize(f), c(0, 1))
    

    【讨论】:

      【解决方案2】:

      是的,例如:

      f <- function(x) {
          sum(tanh(y+x))/100-x
      }
      vf <- Vectorize(f)
      
      y=runif(100,-1,1)
      
      f(x=0.5)
      f(x=-0.5)
      vf(x=1:2)
      
      uniroot.all(vf,c(-.99,.99))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-01
        • 2012-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-16
        • 2015-09-06
        相关资源
        最近更新 更多