Подтвердить что ты не робот

Решение для обратной функции в R

Есть ли какой-нибудь способ для R найти решение для обратной функции с одной переменной? Мотивация для меня - позже сказать R использовать вектор значений в качестве входных данных обратной функции, чтобы он мог выплевывать значения обратной функции.

Например, у меня есть функция y(x) = x^2, обратная - y = sqrt(x). Есть ли способ, который R может решить для обратной функции?

Я посмотрел вверх uniroot(), но я не решаю ноль функции.

Любые предложения будут полезны.

Спасибо!

4b9b3361

Ответ 1

Какой обратный вы находите? Если вы ищете символический обратный (например, функцию y, которая идентична sqrt (x)), вам придется использовать символическую систему. Посмотрите ryacas для библиотеки R, которая соединяется с системой компьютерной алгебры, которая, вероятно, может вычислить инверсии, Yacas.

Теперь, если вам нужно только вычислить точечные обратные вызовы, вы можете определить свою функцию в терминах uniroot, как вы написали:

> inverse = function (f, lower = -100, upper = 100) {
   function (y) uniroot((function (x) f(x) - y), lower = lower, upper = upper)[1]
}

> square_inverse = inverse(function (x) x^2, 0.1, 100)

> square_inverse(4)
[1] 1.999976

При заданных y и f(x) это будет вычислять x таким образом, что f(x) = y, также известный как обратный.

Ответ 2

Я не могу комментировать, так как моя репутация слишком низкая. Я новичок в R, и мне потребовалось некоторое время, чтобы понять код Майка, поскольку я не привык к тому, как функции определяются в его ответе. Ниже приведен код Майка в более длинной, но (для меня) более удобочитаемой записи:

inverse <- function(f, lower, upper){
  function(y){
    uniroot(function(x){f(x) - y}, lower = lower, upper = upper, tol=1e-3)[1]
  }
}
square_inverse <- inverse(function(x){x^2}, 0.1, 100)
square_inverse(4)

Надеюсь, это поможет и другим новичкам.