如何在DifferentialEquations.jl中实现SecondOrderDDEProblem?报错求助
问题分析与修正
你的代码存在三个关键错误,直接导致了MethodError:
tspan格式不符合要求
SecondOrderDDEProblem要求tspan是包含起始、结束时间的元组(如(0.0, 1.0)),而非单个结束时间值1.。历史函数h定义错误
历史函数h必须是接收时间参数t的函数,用来返回t < tspan[1]时刻的u(t)状态,不能是你定义的数组[copy(u0),zero(u0)]。通常可将初始时刻前的状态设为恒定初始值u0。历史函数调用方式错误
在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
相关产品推荐
相关产品推荐

