我有两个变体的代码来解决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参数解决过ODEs,因为这是大多数教程说要做的。
发布于 2020-06-05 08:06:07
如果使用就地表单,则必须确保修改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
endhttps://stackoverflow.com/questions/62203699
复制相似问题