我有两种代码变体来求解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,因为这是大多数教程所说的。
如果使用就地表单,则必须确保您正在修改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