Поиск корня функции, содержащей массив, используя uniroot.all - PullRequest
0 голосов
/ 24 декабря 2018

Я пытаюсь найти корни функции, подобной этой

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

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

, где x - скаляр, а Carray - массив.Кажется, проблема в том, что uniroot.all отправляет fa всему массиву x'es одновременно, а затем R запутывается в выполнении Carray + x (предупреждение: «длинная длина объекта не кратна короткой длине объекта»).

Функция f работает, как задумано, когда x является скаляром.Я не уверен, как векторизовать f так, чтобы я мог передать ей массив x'es.

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

да, пример:

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))
0 голосов
/ 24 декабря 2018

Если бы мы знали размер Carray, возможно, было бы возможно векторизовать f более естественно, но для общего Carray вы могли бы использовать Vectorize:

roots <- uniroot.all(Vectorize(f), c(0, 1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...