Решение для обратной функции в R
Есть ли какой-нибудь способ для R
найти решение для обратной функции с одной переменной? Мотивация для меня - позже сказать R
использовать вектор значений в качестве входных данных обратной функции, чтобы он мог выплевывать значения обратной функции.
Например, у меня есть функция y(x) = x^2
, обратная - y = sqrt(x)
. Есть ли способ, который R
может решить для обратной функции?
Я посмотрел вверх uniroot()
, но я не решаю ноль функции.
Любые предложения будут полезны.
Спасибо!
Ответы
Ответ 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)
Надеюсь, это поможет и другим новичкам.