求解R中函数的逆

时间:2012-04-10 00:16:19

标签: r inverse

R有没有办法解决给定单变量函数的逆?我的动机是让我稍后告诉R使用值向量作为反函数的输入,以便它可以吐出反函数值。

例如,我有函数y(x) = x^2,反函数是y = sqrt(x)。有R可以解决反函数的方法吗?

我查了uniroot(),但我没有解决函数的零点问题。

任何建议都会有所帮助。

谢谢!

2 个答案:

答案 0 :(得分:29)

你发现了什么样的逆转?如果您正在寻找符号反转(例如,函数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

对于给定的yf(x),这将计算x,使f(x) = y也称为逆。

答案 1 :(得分:0)

我无法发表评论,因为我的声誉太低了。 我是R的新手,花了我一段时间来理解Mike的代码,因为我不习惯在他的答案中定义函数的方式。 下面是Mike的代码,虽然更长,但(对我而言)更易于理解:

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)

我希望它也可以帮助其他新手。