在 Octave 中,我使用以下代码对 2 变量函数进行微分,然后使用 subs() 将 x 替换为 0。基本上在做力矩生成函数、泰勒级数展开等时,我们区分然后用一些 a 代替 x。我无法在 R 中找到等效的替换函数。你能告诉我该怎么做吗?谢谢
pkg load symbolic; #octave symbolic package
syms lamb, x; #declare lamb, x symbols
mgf = lamb / (lamb - x); #moment generating function of exponential
mgf1 = diff(mgf, x, 1); #1st differivative
mgf1_0 = subs(mgf1, x, 0); #substitute 0 for E(X)
最佳答案
使用基础 R:
f <- quote( lambda / (lambda - x) )
Df <- D(f, "x")
do.call("substitute", list(Df, list(x = 0)))
## lambda/(lambda - 0)^2
或者我们可以在特定的 x 和 lambda 值下评估 Df:
eval(Df, list(x = 0, lambda = 3))
## [1] 0.3333333
创建函数来表示结果
我们可以使用 Df
定义一个 R 函数 der
,它计算特定 x 和 lambda 值的导数。
der <- function(x, lambda) {}
body(der) <- Df
der(0, 3)
## [1] 0.3333333
柯里化(Currying)
如果我们想将 x 设置为 0 并创建 lambda 的结果函数
make_der0 <- function(x = 0) function(lambda) der(x, lambda)
der0 <- make_der0()
der0(3)
## [1] 0.3333333
这被称为柯里化(Currying)或局部化,各种包也有:
library(functional)
der0a <- Curry(der, x = 0)
der0a(3)
## [1] 0.3333333
library(purrr)
der0b <- partial(der, x = 0)
der0b(3)
## [1] 0.3333333
关于r - 对于符号替换,R 与 Matlab 的 subs(f, x, value) 等价的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62720216/