#julia #scientific-computing #differentialequations.jl
#джулия #научные вычисления #дифференциальные уравнения.jl
Вопрос:
Я пытаюсь решить следующую задачу, используя DifferentialEquation.jl :
Где P — матрица, используемая для проекции. Мне трудно представить, как решить эту проблему. Есть ли способ напрямую решить ее с помощью Julia? Или я должен попытаться изменить уравнение вручную (что я уже пробовал), чтобы соответствовать обычному формату дифференциального уравнения? Я уже начал с записи некоторых уравнений, которые можно найти ниже, но я не продвинулся очень далеко.
function ODE(u, p, t)
g,N = p
Jacg = ForwardDiff.jacobian(g, u)
sum = zeros(size(N,1))
for i in 1:size(Jacg,1)
sum = sum Jacg[i,:] .* (u / norm(u)) .* N[:,i]
end
Proj_N(N) * sum
nothing
end
prob = ODEProblem(ODE, u0, (0.0, 3.0), (g, N))
sol = solve(prob)
Любая помощь приветствуется и заранее благодарна.
Ответ №1:
Если вы хотите использовать неуместную форму, вы должны вернуть производную, т.Е.
function ODE(u, p, t)
g,N = p
Jacg = ForwardDiff.jacobian(g, u)
sum = zeros(size(N,1))
for i in 1:size(Jacg,1)
sum = sum Jacg[i,:] .* (u / norm(u)) .* N[:,i]
end
Proj_N(N) * sum
end
Я думаю, вы просто смешивали мутирующие и немутирующие производные формы.
Комментарии:
1. Это действительно помогло. Как бы я согласовал условие, что Proj_N (N) * sum = 0, хотя. Должен ли я превращать это в проблему DAE?
2. Либо проблема DA, либо использование обратного вызова ManifoldProjection.