求解Julia中的梯度相关常微分方程

求解Julia中的梯度相关常微分方程,julia,scientific-computing,differentialequations.jl,Julia,Scientific Computing,Differentialequations.jl,我正在尝试使用Differential Equation.jl求解以下ODE: 其中p是用于投影的矩阵。我很难想象如何解决这个问题。有没有办法用Julia直接解决这个问题?或者我应该试着用手重新排列方程(我已经试过了),以适应通常的微分方程格式? 我已经开始写下一些方程式,这些方程式可以在下面找到,但我并没有走多远 function ODE(u, p, t) g,N = p Jacg = ForwardDiff.jacobian(g, u) sum = zer

我正在尝试使用Differential Equation.jl求解以下ODE:

其中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)

感谢您的帮助。

如果您想使用不合适的表格,您必须返回衍生工具,即

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

我认为你只是混淆了变异和非变异的派生形式。

如果你想使用不合适的形式,你必须返回派生形式,即

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

我认为你只是混淆了变异和非变异的衍生形式。

这确实有帮助。我如何协调Proj_N(N)*sum=0的条件。我必须将其转化为DAE问题吗?要么是DAE问题,要么使用ManifoldProjection回调。这实际上很有帮助。我如何协调Proj_N(N)*sum=0的条件。是否必须将其转化为DAE问题?DAE问题或使用ManifoldProjection回调。