Wolfram 语言

偏微分方程

求解带有周期性边界条件的波动方程

求解一维带有周期性边界条件的波动方程.

指定一个带有吸收边界条件的波动方程. 注意诺依曼(Neumann)值是用于 的一阶时间导数的.

In[1]:=
Click for copyable input
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]:=
Click for copyable input
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]:=
Click for copyable input
bc = PeriodicBoundaryCondition[u[t, x], x == 0, TranslationTransform[{1}]];

使用有限元方法求解方程.

In[4]:=
Click for copyable input
ufun = NDSolveValue[{eqn, ic, bc}, u, {t, 0, 2}, {x, 0, 1}, Method -> {"MethodOfLines"}];

可视化周期性波动函数.

In[5]:=
Click for copyable input
plots = Table[ Plot[ufun[t, x], {x, 0, 1}, PlotRange -> {-0.1, 1.3}], {t, 0, 2, .1}]; ListAnimate[plots]
播放动画
停止播放动画

相关范例

de en es fr ja ko pt-br ru