2015-07-19 73 views
-1

我需要找到衍生物的功能等衍生物F,使得f <-function(x)的{X^2}(或類似的),而不yacas

f<-function(x){x^2} 

之後定義我想有一個導函數g,這樣我就能夠得到這樣的:

g(5)  # entered 
    10   # answer 

沒有Yacas或類似的沉重軟件。我發現R令人驚訝地發現x^2的衍生物,但是沒有辦法區分f<-function(x){x^2}

我試圖做這樣的事情:

f<-function(x){x^2} 
g<-Deriv(f,"x") 

我得到了一個錯誤:

Error in list2env(list(), NULL, <environment>) : 
names(x) must be a character vector of the same length as x 

我也試過這樣:

> f1<-'x^2' 
> g<-Deriv(f1,"x") 
> g 
#Result: 
"2*x" 

我能變換我的函數f到像f1這樣的函數並且逆轉過程? 還有別的辦法嗎?

回答

3

你可以定義你的函數作爲表達式:

f <- expression(x^2) 

這樣的表達可以通過使用eval()來處理:

#> eval(f,list(x=2)) 
#[1] 4 

在這種情況下,表達的,而不是函數的優點在於,前者允許使用符號演算以獲得一階導數:

g <- D(f,"x") 
#> g 
#2 * x 

爲了評價這種表達一階導數(更確切地說它的類是call),你可以使用作爲是爲f做過相同的語法:

#> eval(g,list(x=5)) 
#[1] 10 
3

假設一個線體和一個可變x的功能:

f <- function(x) x^2 
g <- f 
body(g) <- D(body(f), "x") 

,並提供:

> g 
function (x) 
2 * x 
+0

感謝。它的工作原理,但如果我寫f <-function(x){x^2},而不是f <-function(x)x^2,那麼它就不會出錯:D(body(f),「x 「):函數''{''不在派生表中。 –

+0

對。 {不支持。 –

+0

要從{}中釋放函數,使用f <-f [[2]]會很有幫助。 –