【发布时间】:2017-03-31 18:38:04
【问题描述】:
//u' + Au = g(t,u) can be solved by exponential integrators also
//Following snippet is for exp INtegrators
A = -full(Strang(11))
A[end,1]=1;A[1,end]=1;
g(t,u) = 2-u
u0 = zeros(11);u0[6]=1
nsteps = 1000
tmax = 10.0
h = tmax/nsteps
u = u0
t = 0
for k in 1:nsteps
u = expm(-h*A)*u + h*((expm(-h*A)-1)\(-h*A))*g(t,u)
t = k*h
end
//this is for euler's method
for k in 1:nsteps
u += h*(A*u + h*g(t,u))
t = k*h
end
为什么他们的结果很差?
该方法爆炸得很厉害,它应该收敛到 [1.99]*11 或类似的东西?
在实现 Exp Integrator 时是否有任何错误?
【问题讨论】:
-
你能检查矩阵指数中的符号吗,目前它们看起来像原始 ODE 是
u' = A*u + g(t,u)。也许结果是因为你在时间上向后整合。 -
是的,我也尝试过更改符号,但对于欧拉法计算的结果,其答案仍然不同
-
@LutzL 实现有问题吗?因为公式似乎正确?
-
不,公式有一个符号错误,您分别切换了因子。该部门的方向,请参阅答案。
标签: matlab octave julia differential-equations runge-kutta