2

odeint C++ ライブラリを使用して、離散化された偏微分方程式から結合された一連の ODE の数値積分を実装しました。うまく機能し、非常に高速ですが、1 つの問題があります。

ODE の私のシステムには、いわゆる吸収境界条件があります。N double のベクトル (人口密度) である状態変数 n の時間導関数は、システム関数で計算されますが、それが起こる前 (または後)時間積分) 設定したい:

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

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

ただし、システム関数の状態変数がconstとして宣言されているため、もちろんこれは機能しません。これは、ライブラリをいじる以外に変更できないように見えます...これを回避する方法はありますか?

dndt[N]とを 0に設定dndt[N-1]することは解決策のように見えるかもしれませんが、境界条件を吸収するという概念に反するため、実際には役に立ちません (n[N]そして、任意の時点での の値ではなく、 でn[N-1]の値を常に持つことになります)。間に合うように)、だから私は本当に n を変更したいと思います。t=0n[N-2]

助けてくれてありがとう!

よろしく、

マイケル

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 に答える