使用uniroot.all

时间:2018-12-24 08:34:31

标签: r

我正试图找到这样的函数的根源

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

是的,例如:

HTMLButtonElement