如何在 R 中将(一阶)导数编写为函数?
How to write a (first-order) derivative as a function in R?
我需要 p-t*(p^g)*(1-p)^d) 的导数作为 p 的函数。
t、d 和 g 均已定义。
我在尝试:
firstder<-D(expression(p-t*(p^g)*(1-p)^d), "p")
firstderivative<-function(p){
firstder
}
但是,调用
firstderivative(p=0.1)
给我的只是一阶导数的表达式。提前致谢!
firstder
是 class "call"
的对象。
class(firstder)
#[1] "call"
您忘记评估调用了。
firstder <- D(expression(p-t*(p^g)*(1-p)^d), "p")
firstderivative <- function(p){
eval(firstder)
}
g <- 1
d <- 1
t <- 1
firstderivative(p=0.1)
#[1] 0.2
使用 mosaicCore
包非常容易。鉴于您有 F(x)=x^2
并且您希望根据 x
计算导数,因此您有:
library(mosaicCore)
dx2x <- deriv(~ x^2, "x")
x <- -1:2
eval(dx2x)
在你的情况下,它将是:
library(mosaicCore)
dx <- deriv(~expression(p-t*(p^g)*(1-p)^d), "p")
x <- -1:2
eval(dx)
我需要 p-t*(p^g)*(1-p)^d) 的导数作为 p 的函数。 t、d 和 g 均已定义。 我在尝试:
firstder<-D(expression(p-t*(p^g)*(1-p)^d), "p")
firstderivative<-function(p){
firstder
}
但是,调用
firstderivative(p=0.1)
给我的只是一阶导数的表达式。提前致谢!
firstder
是 class "call"
的对象。
class(firstder)
#[1] "call"
您忘记评估调用了。
firstder <- D(expression(p-t*(p^g)*(1-p)^d), "p")
firstderivative <- function(p){
eval(firstder)
}
g <- 1
d <- 1
t <- 1
firstderivative(p=0.1)
#[1] 0.2
使用 mosaicCore
包非常容易。鉴于您有 F(x)=x^2
并且您希望根据 x
计算导数,因此您有:
library(mosaicCore)
dx2x <- deriv(~ x^2, "x")
x <- -1:2
eval(dx2x)
在你的情况下,它将是:
library(mosaicCore)
dx <- deriv(~expression(p-t*(p^g)*(1-p)^d), "p")
x <- -1:2
eval(dx)