r - 对于符号替换,R 与 Matlab 的 subs(f, x, value) 等价的是什么?

标签 r matlab octave

在 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/

相关文章:

r - 临时存储一系列管道中的变量 dplyr

matlab - 如何将归一化频率转换为实际频率

Matlab:用于存储{ Key( double x, double y) : Value (z)} 的数据结构

plot - 逐步绘制 Octave 图(!)成本函数和梯度下降

octave - 如何在 OSX 10.6.8 上以 Octave 打开 .m 文件

R gsub 添加前导换行符

r - LMERConvenienceFunctions 前后拟合函数错误 : model not a mer object

r - GISTools 包 R 中的 map 比例

matlab - 如何定位内置函数的定义位置?

matlab - 为什么绘制这个方程式不能生成正确的曲线?