2

我刚刚使用 odeint C++ 库从离散 PDE 中实现了一组耦合 ODE 的数值积分。它运行良好,速度快如闪电,但有一个问题:

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

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

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

但是,这当然是行不通的,因为系统函数中的状态变量被声明为const,并且看起来除了通过干预库之外无法更改...有什么办法解决这个问题吗?

我应该提到将dndt[N]and设置dndt[N-1]为零可能看起来像一个解决方案,但它并没有真正帮助,因为它违背了吸收边界条件的概念(n[N]然后n[N-1]总是具有它们在的值t=0,而不是n[N-2]在任何点的值及时),所以我真的更喜欢改变 n。

谢谢你的帮助!

问候,

迈克尔

4

1 回答 1

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]然后可以省略等式。

于 2013-05-15T18:48:17.043 回答