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

如何用代码求解含嵌套高斯积分的反常二重积分?

关于含高斯积分的无穷积分求解方案

先明确:原积分是发散的

当$y \to \infty$时,内层积分$\int_0^y e{-x2}dx$收敛到$\frac{\sqrt{\pi}}{2}$,因此被积函数$y^2 e{\int_0y e{-x2}dx}$趋近于$y^2 e{\frac{\sqrt{\pi}}{2}}$,而$\int_0\infty y^2 dy$是发散的,所以原无穷积分不存在有限值。这应该是你用quadgk得不到理想结果的核心原因——积分本身发散,必须截断到有限上限计算近似值。

优化计算的可行方案

1. 用MATLAB内置误差函数替代内层积分,提升计算精度

内层积分$\int_0^y e{-x2}dx$可以用误差函数精确表示:
$$\int_0^y e{-x2}dx = \frac{\sqrt{\pi}}{2} \text{erf}(y)$$
MATLAB的erf是高度优化的内置函数,计算精度远高于多项式拟合,不会出现病态问题。原积分改写为:
$$\int_0^Y y^2 e^{\frac{\sqrt{\pi}}{2} \text{erf}(y)} dy$$
其中$Y$是你选定的截断上限。直接用quadgk计算的示例代码:

Y = 5; % 可根据需求调整截断上限
f = @(y) y.^2 .* exp( (sqrt(pi)/2)*erf(y) );
result = quadgk(f, 0, Y, 'RelTol', 1e-8, 'AbsTol', 1e-10);
disp(result);

2. 自适应选择截断上限,平衡精度与计算量

如果不确定选多大的$Y$,可以通过判断被积函数的增长速率来确定:当$y$足够大时,$\text{erf}(y) \approx 1 - \frac{e{-y2}}{\sqrt{\pi}y}$,此时被积函数近似为$y^2 e^{\frac{\sqrt{\pi}}{2}} \left(1 - \frac{e{-y2}}{\sqrt{\pi}y}\right)$,后续积分的增量可以近似估算。比如设置一个阈值,当新增的积分增量小于你设定的精度要求时,就停止增大$Y$。示例逻辑:

target_tol = 1e-6;
Y = 1;
prev_result = 0;
while true
    f = @(y) y.^2 .* exp( (sqrt(pi)/2)*erf(y) );
    current_result = quadgk(f, 0, Y);
    delta = current_result - prev_result;
    if abs(delta) < target_tol
        break;
    end
    prev_result = current_result;
    Y = Y + 1; % 每次增大1,也可调整步长
end
disp(['截断上限Y=', num2str(Y), '时,积分结果为', num2str(current_result)]);

3. 变量替换降低被积函数增长速度

考虑做变量替换$t = e^{-y}$,把无穷积分转化为有限区间积分,同时减缓被积函数的增长。令$y = -\ln t$,则$dy = -\frac{1}{t}dt$,当$y=0$时$t=1$,$y\to\infty$时$t\to0$,原积分变为:
$$\int_0^1 (-\ln t)^2 e^{\frac{\sqrt{\pi}}{2} \text{erf}(-\ln t)} \cdot \frac{1}{t} dt$$
这个积分的被积函数在$t\to0$时的增长速度会比原函数慢,可能更适合数值积分计算。示例代码:

f = @(t) (-log(t)).^2 .* exp( (sqrt(pi)/2)*erf(-log(t)) ) ./ t;
result = quadgk(f, 0, 1, 'RelTol', 1e-8);
disp(result);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 16:35:32