odeint和状态变量的临时变化

时间:2013-05-15 16:29:38

标签: c++ odeint

我刚刚为一组耦合的ODE实现了数值积分 来自使用odeint C ++库的离散化PDE。它工作得很好 闪电很快,但有一个问题:

我的ODE系统有所谓的吸收边界条件:时间 我的状态变量n的导数,它是N个双精度的矢量 (人口密度)在系统函数中计算,但在此之前发生 (或在时间积分之后)我想设置:

n[N]=n[N-2];

n[N-1]=n[N-2];

但是,当然这不起作用,因为系统中的状态变量 函数声明为 const ,看起来好像无法更改 除了通过干预图书馆......有什么方法可以解决这个问题吗?

我应该提一下,将dndt[N]dndt[N-1]设置为零可能看起来像 解决方案,但它并没有真正帮助,因为它违背了吸收边界的概念 条件(n[N]n[N-1]将始终具有t=0处的值 然后是n[N-2]在任何时间点的值,所以我更愿意改变n。

感谢您的帮助!

问候,

迈克尔

1 个答案:

答案 0 :(得分:2)

通常,吸收边界条件在运动方程中表现出来。 n[N] = n[N-1] = n[N-2],因此可以将n[N]=n[N-2]n[N-1]=n[N-2]插入dndt[N-2]的等式中。

例如,具有吸收边界Lx[i] = x[i+1]-2 x[i] +x[i-1]的离散拉普拉斯算子x[n]=x[n-1]可以写为Lx[n-1] = x[n-2] - x[n-1]。然后可以省略x[n]的等式。