julia / DifferentialEquations的微分方程的正确定义

问题描述 投票:0回答:1

我有两种代码变体来求解ODE系统y'= A * y + b。这个不起作用(它运行但是给出错误的结果,即它返回初始数据u0作为常量解):

using LinearAlgebra
using DifferentialEquations

function RHSfun(du,u,p,t)
    du= p[1]*u + p[2]
    return du
end


A=[-1 0 0; 0 -1 0; 0 0 -1]

b=[1 ; 2 ; 3 ]

parm = [A,b]


 tspan=(0.0,5.0)
 u0=[0.0; 0.0 ; 0.0]
 prob=ODEProblem(RHSfun,u0,tspan,parm)
 sol=solve(prob)

但是如果我从RHSfun中删除参数du,它就可以工作,这似乎与文档背道而驰(并且我已经解决了使用du参数定义的ODE)。

我不是在寻求其他解决问题的方法(我知道有几种工作版本),但是想知道为什么上述方法不起作用。我之前已经用du参数解决了ODE,因为这是大多数教程所说的。

julia differential-equations
1个回答
0
投票

如果使用就地表单,则必须确保您正在修改du数组,例如:

function RHSfun(du,u,p,t)
    du .= p[1]*u + p[2]
    return nothing
end

或更有效地,您可以使用mul!。请注意,您返回的内容无关紧要。如果要使用分配形式,则不要指定变异参数:

function RHSfun(u,p,t)
    du = p[1]*u + p[2]
    return du
end
© www.soinside.com 2019 - 2024. All rights reserved.