Is there any way for R
to solve for the inverse of a given single variable function? The motivation is for me to later tell R
to use a vector of values as inputs of the inverse function so that it can spit out the inverse function values.
For instance, I have the function y(x) = x^2
, the inverse is y = sqrt(x)
. Is there a way R
can solve for the inverse function?
I looked up uniroot()
, but I am not solving for the zero of a function.
Any suggestions would be helpful.
Thanks!
What kind of inverse are you finding? If you're looking for a symbolic inverse (e.g., a function y that is identically equal to sqrt(x)) you're going to have to use a symbolic system. Look at ryacas for an R library to connect with a computer algebra system that can likely compute inverses, Yacas.
Now, if you need only to compute point-wise inverses, you can define your function in terms of uniroot as you've written:
> 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
For a given y
and f(x)
, this will compute x
such that f(x) = y
, also known as the inverse.
I cannot comment as my reputation is too low. I am a newbie to R, and it took me a while to understand Mike's code as I was not used to the way functions are defined in his answer. Below is Mike's code in a longer, but (to me) easier readable notation:
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)
I hope it helps others newbies as well.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With