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

使用Julia的Quadgk计算Caputo分数阶导数时遇定义域错误

解决QuadGK计算Caputo分数阶导数在t=3时的定义域错误问题

问题根源

当计算t=3时,被积函数g(x)/(γ(1/2)*√(t-x))在x趋近于3时,分母√(3-x)趋近于0,产生可积奇点。QuadGK的自适应积分采样到接近端点的点时,直接计算出Inf,触发定义域错误,但这个奇点本身是可积的,只是默认积分逻辑没适配这类端点奇异性。

解决方案:变量替换消除端点奇点

通过变量替换将端点奇点转化为常规积分区间,具体推导:
令x = t - t*s²,则dx = -2t*s ds,当x=0时s=1,x=t时s=0,积分上下限反转后抵消负号:
$$
\int_0^t \frac{g(x)}{\sqrt{t-x}} dx = \int_0^1 \frac{g(t - t s²)}{\sqrt{t s²}} \cdot 2t s ds = 2\sqrt{t} \int_0^1 g(t(1-s²)) ds
$$
这样就消除了分母的奇点,转化为常规的[0,1]区间积分。

修改后的代码

using QuadGK, ForwardDiff, SpecialFunctions

f(t) = t^2 * sin(t)
g(t) = ForwardDiff.derivative(f, t)  # 简化写法,直接传入原函数更清晰

# 基于变量替换实现Caputo导数计算
caputo(t) = 2 * sqrt(t) / gamma(1/2) * quadgk(s -> g(t*(1 - s^2)), 0, 1)[1]

# 测试t=3的情况
println(caputo(3))  # 输出接近-3.11522

结果验证

运行上述代码,输出结果约为-3.11522,和Mathematica的计算结果一致,且不会触发定义域错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 13:32:16