为了计算我的2个方程组的行为,我在R中使用lsoda函数。参数a随时间变化:当时间是偶数时为1,否则为0。这是一个可重复性最小的例子:
mo=function(t,x,m){
if(t%%2==0){
a=m
}else{
a=0
}
dx=rep(0,2)
dx[1]=-a*x[1]
dx[2]=a*x[1]
res=dx
return(list(dx))
}
xs=c(10,0)
ti=1:100
m=1
data1=as.data.frame(lsoda(xs,ti,mo,m))
问题在于,当您调查结果时,您会看到x [1]保持为10而x [2]保持为0,这意味着lsoda始终将值0设为(并且从不为1)。这是模数的问题吗?
答案 0 :(得分:0)
lsoda
选择自己的内部时间步长,因此即使您在此条件为真时请求输出,也无法保证t%%2 == 0
将为真(例如,t=2
) 。我的理解是lsoda
将在解决方案时间之间插值以在用户请求的时间获得输出,而不一定在那些时间解决模型。根据经验,当涉及数字ODE求解器时,硬时间或空间界面是Bad Thing™。