R:将表达式转换为积分函数

标签 r

我的目标是对 0 和 1 之间的可微函数的导数的平方进行积分:我尝试了 2 个代码: 尝试1:

expToFunc <- function(f) {
  #input as an expression in terms of x
  function(x) eval(f)
}

int <- function(f) {
  Df2 <- substitute(expression(y^2), list(y = D(f,'x')))
  integrate(expToFunc(Df2),0,1)
}

int(expression(x*(x-1)))

返回 integrate(expToFunc(Df2), 0, 1) 中的错误:函数求值给出的结果长度错误。, 我认为我的第一个函数没有按预期运行 expToFunc(expression(x*(x-1))) 返回 function(x) eval(f),所以代码将 f 解释为该字母而不是输入?

尝试2 类似,只是尝试使用表达式字符串将表达式转换为函数

expToFunc <- function(str) {
  #input as a string in terms of x
  function(x) str
}

int <- function(f) {
  Df2 <- substitute(expression(y^2), list(y = D(f,'x')))
  integrate(expToFunc(Df2[[1]]),0,1)
}

int(expression(x*(x-1)))

它返回与尝试 1 相同的结果,并且用 Df2[[2]] 代替 Df2[[1]] 令人困惑

Df2 <- substitute(expression(y^2), list(y = D(expression(x * (x-1)),'x')))
Df2[[1]]
% expression
Df2[[2]]
% ((x - 1) + x)^2

我显然缺少表达式类或集成函数的某些内容,但我不确定是什么。非常感谢任何帮助。

最佳答案

1) 计算表达式并将其分配给函数 f 的主体。然后积分f

int <- function(expr) {
  f <- function(x) {}
  body(f) <- eval(substitute(expression(y^2), list(y = D(expr,'x'))))
  integrate(f, 0, 1)
}

int(expression(x*(x-1)))
## .3333333 with absolute error < 3.7e-15

2) 这种变体也有效。

int2 <- function(expr) {
  f <- function(x) {}
  body(f) <- eval(substitute(D(expr, "x")))
  integrate(function(x) f(x)^2, 0, 1)
}

int2(expression(x * (x - 1)))
## .3333333 with absolute error < 3.7e-15

3) gsubfn包中的as.function.formula可以将公式变成函数。

library(gsubfn)
int3 <- function(fo) {
  integrate(function(x) as.function(fo)(x)^2, 0, 1)
}

int3(~ x*(x-1))
## .3333333 with absolute error < 3.7e-15

关于R:将表达式转换为积分函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73903171/

相关文章:

r - 可视化文本之间的距离

javascript - 在 JavaScript 中检索 R 对象属性 - 第 2 部分

R 清理 csv 文件

r - ggplot2 中的继承有哪些限制?

r - ggplot2:快速热图绘制、 reshape ?

r - 如何使用预测计算 R 中预测数据的标准误差

r - 如何在 brms::marginal_effects() 生成的图中指定 y 限制?

r - 在 R Plotly 中定义调色板颜色顺序

r - 在嵌套列表中查找元素的索引?

r - xtable 用于不支持的功能(使用 R)