【问题标题】:Integration of function when matrix is included in RR中包含矩阵时的函数积分
【发布时间】:2021-11-10 16:05:46
【问题描述】:

我想集成一个看起来像这样的功能

f <- function(x) 1.96 * sqrt(t(c(1,x)) %*% m %*% c(1,x))

m 在哪里

m <- matrix(c(3.855, -0.206, -0.206, 0.01), nrow = 2, ncol = 2, byrow = T)

由于我的函数内部的矩阵乘法产生一个标量,对于x 的任何值,这只是f(x) 的一维积分。怎样才能顺利解决呢?

【问题讨论】:

  • 给定此示例数据,您的预期输出是什么?
  • 抱歉我不明白你的问题?样本数据是我放在那里的,这样人们就知道它是一个 2x2 矩阵,最后函数内部的矩阵乘法产生了一个标量。
  • 不确定是否复杂。您正在寻找的返回值的实际值和实际结构是什么。我认为 StéphaneLaurent 的答案是最好的,当然,我只是在要求类似于 “期望 3.74”“期望 7x14 的矩阵,所有 42 秒”(显然不是第二个)。
  • 实际上我正在尝试在一个函数中执行一个函数,这是内部函数。我只是期望一个标量值作为输出。

标签: r matrix vector matrix-multiplication numerical-integration


【解决方案1】:

只需使用integrateVectorize

integrate(Vectorize(f), lower = 0, upper = 1)

【讨论】:

  • 高效优雅,点赞!
【解决方案2】:

这是没有Vectorize 的另一种选择(但我相信@Stéphane Laurent 的方法更节省空间)

> ff <- function(x) 1.96 * sqrt(diag(t(rbind(1, x)) %*% m %*% rbind(1, x)))

> integrate(ff, lower = 0, upper = 1)
3.745299 with absolute error < 4.2e-14

其中ff 已经是一个向量化函数,因为它是使用rbind + diag 构造的以接受向量参数。

【讨论】:

  • 实际上这对我的问题更有效,因为我将在几个函数中执行一个函数,这样我就不需要使用 Vectorize。谢谢分享!
猜你喜欢
  • 1970-01-01
  • 2020-07-15
  • 2018-03-23
  • 1970-01-01
  • 1970-01-01
  • 2014-08-07
  • 1970-01-01
  • 2014-08-09
  • 2021-07-21
相关资源
最近更新 更多