周期境界条件で波動方程式を解く
周期境界条件で一次元の波動方程式を解く.
吸収境界条件で波動方程式を指定する.ノイマン値は, の一次時間導関数のためであることに注意する.
In[1]:=

eqn = D[u[t, x], {t, 2}] ==
D[u[t, x], {x, 2}] +
NeumannValue[-Derivative[1, 0][u][t, x], x == 0 || x == 1];
波動方程式の初期条件を指定する.
In[2]:=

f[x_] = D[0.125 Erf[(x - 0.5)/0.125], x];
vInit[x_] = -D[f[x], x];
ic = {u[0, x] == f[x], Derivative[1, 0][u][0, x] == vInit[x]};
右辺境界における解が左辺側に伝播するような周期境界条件を指定する.
In[3]:=

bc = PeriodicBoundaryCondition[u[t, x], x == 0,
TranslationTransform[{1}]];
有限要素法を使って方程式を解く.
In[4]:=

ufun = NDSolveValue[{eqn, ic, bc}, u, {t, 0, 2}, {x, 0, 1},
Method -> {"MethodOfLines"}];
周期波動関数を可視化する.
In[5]:=

plots = Table[
Plot[ufun[t, x], {x, 0, 1}, PlotRange -> {-0.1, 1.3}], {t, 0,
2, .1}];
ListAnimate[plots]
