You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言带依赖关系的双重积分计算方法及结果正确性咨询

R中双重积分计算的正确性验证

最初的错误代码及原因

最初尝试的代码无法运行,核心问题是变量作用域冲突:

inner_func <- function(x) { 
  alpha=23
  beta=14
  return(x^(alpha-1)*(1-t-x)^(beta-1))
}

innerintegral <- Vectorize(
  function(t) {
    integrate(inner_func,0,1-t)$value
  }
)

integrate(innerintegral,0,1)

内层函数inner_func引用了外层积分变量t,但t并未被传递到inner_func的作用域中,R无法识别该变量,导致运行报错。

改进后的代码及正确性验证

改用嵌套sapply的代码是正确的,它解决了变量作用域问题,每次计算内层积分时,都会将当前的t值明确传递给被积函数:

fun0 <-  function(x,t){
  alpha <- 10
  beta <- 10
  return(x^(alpha-1)*(1-t-x)^(beta-1))
}

integrate(function(t) { 
  sapply(t, function(t) {
    integrate(function(x) fun0(x,t), 0, 1-t)$value
  })
}, 0, 1)$value

结果准确性验证

可以通过解析解验证计算结果:
该双重积分的表达式为:
$$I = \int_{t=0}^1 \left( \int_{x=0}^{1-t} x{\alpha-1}(1-t-x){\beta-1} dx \right) dt$$

  1. 内层积分是变上限的Beta函数,根据Beta函数性质:
    $$\int_{0}^{a} x{\alpha-1}(a-x){\beta-1}dx = a^{\alpha+\beta-1} \cdot \frac{\Gamma(\alpha)\Gamma(\beta)}{\Gamma(\alpha+\beta)}$$
    这里$a=1-t$,因此内层积分结果为:
    $$(1-t)^{\alpha+\beta-1} \cdot \frac{\Gamma(\alpha)\Gamma(\beta)}{\Gamma(\alpha+\beta)}$$

  2. 外层积分转化为:
    $$I = \frac{\Gamma(\alpha)\Gamma(\beta)}{\Gamma(\alpha+\beta)} \int_{0}^{1} (1-t)^{\alpha+\beta-1} dt$$
    计算定积分$\int_{0}^{1} (1-t)^{\alpha+\beta-1} dt = \frac{1}{\alpha+\beta}$,因此最终解析解为:
    $$I = \frac{\Gamma(\alpha)\Gamma(\beta)}{(\alpha+\beta)\Gamma(\alpha+\beta)}$$

当$\alpha=10$、$\beta=10$时:

  • $\Gamma(10)=9!=362880$,$\Gamma(20)=19!=121645100408832000$
  • 代入计算得:$I = \frac{362880 \times 362880}{20 \times 121645100408832000} ≈ 5.412544e-08$

这个结果和代码运行输出完全一致,说明方法和结果都是正确的。

内容的提问来源于stack exchange,提问作者Arnoneel Sinha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 00:01:02