web-dev-qa-db-ja.com

Rの逆関数を解く

Rが特定の単一変数関数の逆を解決する方法はありますか?その動機は、後でRに値のベクトルを逆関数の入力として使用して、逆関数の値を出力できるようにすることです。

たとえば、私は関数y(x) = x^2を持っていますが、逆はy = sqrt(x)です。 Rが逆関数を解く方法はありますか?

uniroot()を検索しましたが、関数のゼロを解いていません。

どんな提案も参考になります。

ありがとう!

21
crazian

どのような逆を見つけていますか?シンボリックインバース(たとえば、sqrt(x)とまったく同じ関数y)を探している場合は、シンボリックシステムを使用する必要があります。逆行列を計算する可能性のあるコンピューター代数システムに接続するRライブラリーについては、 ryacas を参照してください、Yacas。

さて、ポイントごとの逆を計算する必要があるだけなら、あなたが書いたようにユニルートに関して関数を定義することができます:

_> 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が逆行列とも呼ばれるようにします。

30
Mike Axiak

評判が低すぎるのでコメントできません。私は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)

それが他の初心者にも役立つことを願っています。

0
Jan H.