我刚刚为一组耦合的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。
感谢您的帮助!
问候,
迈克尔
答案 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]
的等式。