DifferentialEquations 将 "nothing" 交给我的微分方程

DifferentialEquations hands in "nothing" to my differential equation

我正在尝试求解二体微分方程。 DifferentialEquations.jl 曾经毫不费力地求解我的方程,但在某些时候,它开始将 nothing 作为初始条件交给微分方程。

这是否是最近经常出现的范围界定问题的潜在问题?

using Unitful, RecursiveArrayTools, DifferentialEquations

function propagateTrajNewWay(df::DataFrame, idx::Int)
    x  = df.E[idx]u"m"
    y  = df.F[idx]u"m"
    z  = df.G[idx]u"m"
    r0 = [x, y, z]
    vx = df.dE[idx]u"m/s"
    vy = df.dF[idx]u"m/s"
    vz = df.dG[idx]u"m/s"
    v0 = [vx, vy, vz]
    rv0 = ArrayPartition(r0, v0)
    tspan = (df.time[idx]u"s", df.time[end]u"s")
    μ = 3.986004418e14u"m^3/s^2"
    # prob = ODEProblem(twoBody, u0, tspan)
    # println(prob)
    # sol = solve(prob, VCABM(), reltol = 1e-12, abstol = 1e-12)
    prob = ODEProblem((t, y, dy) -> twoBodyNew(t, y, dy, μ), rv0, tspan)
    sol = solve(prob, VCABM())
    return sol
end

function twoBodyNew(t, y, dy, μ)
    show(y)
    r = norm(y.x[1])
    dy.x[1] .= y.x[2]
    dy.x[2] .= -μ .* y.x[1] / r^3
end


function propWholeTraj(df)
    for ii = 1:size(df, 1)
        propagateTrajNewWay(df, ii)
    end
end

propWholeTraj(df)

此处的代码基本上是从 this page 上逐字复制的 使用静态数组。我也有自己版本的二体函数和设置调用它的函数,但是这个也有同样的错误。

想知道这里可能出了什么问题吗?

函数签名应该是twoBodyNew(t, y, μ, dy)。总是 ((du),u,p,t)。该链接页面上的文档已修复。