#r
Вопрос:
В R я могу вычислить производную первого порядка следующим образом:
g=expression(x^3 2*x 1)
gPrime = D(g,'x')
x = 2
eval(g)
Но я думаю, что это не очень читабельно. Я предпочитаю делать что-то вроде этого:
f = function(x){
x^3 2*x 1
}
fPrime = D(g,'x') #This doesn't work
fPrime(2)
Возможно ли это? Или есть более элегантный способ сделать это ?
Ответ №1:
1) D Это зависит от конкретной формы f, но для аналогичных, тело которых представляет собой одну строку, окруженную { … }, единственным аргументом которой является x, и чьи операции находятся в таблице производных, это работает:
# f is from question
f = function(x){
x^3 2*x 1
}
df <- function(f) {
fun <- function(x) {}
environment(fun) <- environment(f)
body(fun) <- D(body(f)[[2]], "x")
fun
}
df(f)
## function (x)
## 3 * x^2 2
2) numDeriv::град Также подумайте о том, чтобы сделать это численно:
library(numDeriv)
grad(f, 2)
## [1] 14
3) вывод Другой подход заключается в использовании deriv
в базе R с аналогичными ограничениями (1).
df2 <- function(f) {
fun <- function(x) {
f2 <- deriv(body(f)[[2]], "x", function.arg = TRUE)
attr(f2(x), "gradient")
}
environment(fun) <- environment(f)
fun
}
f2Prime <- df2(f)
f2Prime(2)
## x
## [1,] 14
4) Вывод::Вывод Еще одним приближением является пакет вывода.
library(Deriv)
Deriv(f, "x")
## function (x)
## 2 3 * x^2