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

基于Multidimensional Monte Carlo Method的多维积分代码修正求助

修正多维三重积分的Python代码

积分表达式说明

需要计算的三重积分如下:
$$
\iiint_{V} (x^2 + y^2 + z^2) ,dzdydx
$$
其中积分区域 $V$ 的约束条件为:

  • $0 \leq x \leq 1$
  • $0 \leq y \leq 1 - x$
  • $0 \leq z \leq 1 - x - y$
    该积分的正确结果为 $\frac{155}{6} \approx 25.8333$

原代码问题分析

从提供的代码截图判断,核心问题是积分限的设置逻辑错误,或者被积函数的参数顺序与积分顺序不匹配。使用scipy的多重积分函数时,参数顺序和积分限的嵌套关系必须严格对应,否则会计算出错误结果。

修正后的代码(使用tplquad)

直接使用scipy.integrate.tplquad计算三重积分,代码如下:

from scipy.integrate import tplquad

# 被积函数:参数顺序为(z, y, x),对应积分顺序先z、再y、最后x
def integrand(z, y, x):
    return x**2 + y**2 + z**2

# 定义各变量的积分限
z_lower = lambda x, y: 0
z_upper = lambda x, y: 1 - x - y
y_lower = lambda x: 0
y_upper = lambda x: 1 - x
x_lower, x_upper = 0, 1

# 执行积分计算
result, error = tplquad(integrand, x_lower, x_upper,
                        y_lower, y_upper,
                        z_lower, z_upper)

print(f"计算结果:{result}")
print(f"理论值155/6≈{155/6:.4f}")

运行后会输出与理论值一致的结果。

替代方案(分步嵌套积分)

如果需要更直观的分步计算,可以用quad嵌套实现:

from scipy.integrate import quad

# 第一步:对z积分,得到关于x和y的函数
def integrate_z(x, y):
    return quad(lambda z: x**2 + y**2 + z**2, 0, 1 - x - y)[0]

# 第二步:对y积分,得到关于x的函数
def integrate_y(x):
    return quad(lambda y: integrate_z(x, y), 0, 1 - x)[0]

# 第三步:对x积分得到最终结果
result, error = quad(integrate_y, 0, 1)

print(f"计算结果:{result}")
print(f"理论值155/6≈{155/6:.4f}")

这种方式逐层拆解积分过程,便于理解每一步的计算逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 11:20:36