2012-04-10 140 views
18

R有沒有任何方法可以求解給定單變量函數的逆?我的動機是稍後告訴R使用值的向量作爲反函數的輸入,以便它可以吐出反函數值。例如,我有函數y(x)= x^2,反函數是y = sqrt(x)。有沒有一種方法R可以解決反函數?求解R中函數的反函數

我擡頭看uniroot(),但我沒有解決一個函數的零。

任何建議將有所幫助。

謝謝!

回答

25

你發現了什麼樣的反轉?如果您正在尋找一個符號反轉(例如,與sqrt(x)相同的函數y),您將不得不使用符號系統。查看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

很好,雖然分號是不必要的... – 2012-04-10 00:58:45

+1

啊,R不是我的主要語言,所以我不知道這是什麼風格...我會修復它。 – 2012-04-10 03:54:01

+0

我打算建議生成一個大向量'y < - f(seq(0,100,.001)',並使用結果通過'ecdf'或類似工具用y建立x的分佈函數,但是Mike的方法 – 2012-04-10 12:36:21