R
が特定の単一変数関数の逆を解決する方法はありますか?その動機は、後でR
に値のベクトルを逆関数の入力として使用して、逆関数の値を出力できるようにすることです。
たとえば、私は関数y(x) = x^2
を持っていますが、逆はy = sqrt(x)
です。 R
が逆関数を解く方法はありますか?
uniroot()
を検索しましたが、関数のゼロを解いていません。
どんな提案も参考になります。
ありがとう!
どのような逆を見つけていますか?シンボリックインバース(たとえば、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
_
与えられたy
とf(x)
に対して、これはx
を計算し、f(x) = y
が逆行列とも呼ばれるようにします。
評判が低すぎるのでコメントできません。私は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)
それが他の初心者にも役立つことを願っています。