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

如何在DifferentialEquations.jl中实现SecondOrderDDEProblem?报错求助

问题分析与修正

你的代码存在三个关键错误,直接导致了MethodError:

  1. tspan格式不符合要求
    SecondOrderDDEProblem要求tspan是包含起始、结束时间的元组(如(0.0, 1.0)),而非单个结束时间值1.。

  2. 历史函数h定义错误
    历史函数h必须是接收时间参数t的函数,用来返回t < tspan[1]时刻的u(t)状态,不能是你定义的数组[copy(u0),zero(u0)]。通常可将初始时刻前的状态设为恒定初始值u0。

  3. 历史函数调用方式错误
    在f函数中调用历史函数时,只需传入时间参数t-τ,不需要传入p,正确写法是hist = h(t-τ),而非h(p,t-τ)。


修正后的完整代码

using DifferentialEquations

function f(ddu, du, u, h, p, t)
    τ = p
    hist = h(t - τ)  # 修正历史函数调用逻辑
    ddu .= 0.1 * ones(3,3) .- hist ./ u
    nothing
end

τ = 0.1
u0 = rand(3,3)
du0 = zeros(3,3)
# 定义正确的历史函数:t ≤ 0时返回初始状态u0
h(t) = u0
# 修正tspan为标准时间区间格式
tspan = (0.0, 1.0)
prob = SecondOrderDDEProblem(f, du0, u0, h, tspan, p=τ; constant_lags=[τ])

如果你的模型需要访问du的历史状态,可将二阶问题转换为一阶DDE系统,或者扩展历史函数同时返回u和du的历史值,具体需根据模型需求调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 09:26:03