Дифференциальные уравнения дают «ничто» моему дифференциальному уравнению - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь решить дифференциальное уравнение двух тел. DiffrentialEquations.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)

Код, который здесь находится, в основном скопирован дословно с этой страницы в используя статические массивы. У меня также есть своя собственная версия функции двух тел и функции, которая устанавливает и вызывает ее, но это также имеет ту же ошибку.

Есть мысли о том, что здесь может пойти не так?

1 Ответ

0 голосов
/ 08 сентября 2018

Подпись функции должна быть twoBodyNew(t, y, μ, dy). Это всегда ((du),u,p,t). Документы на этой связанной странице были исправлены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...