Решение задачи, зависящей от градиента, в Julia

#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.