我正在使用数组实现wave equation的模拟,以离散地模拟波可以传播的空间区域。目前,波浪反射出空间区域的边界。但是,我想消除这种反射,以便波浪看起来永远传播。
我知道有很多学术论文讨论非反射/吸收边界条件(例如完美匹配的层?),但大多数似乎都集中在分析解决方案上。我无法弄清楚如何在我的模拟中以数字方式实现非反射边界。这是我写的代码:
for (var i = 1; i < width - 1; ++i) {
for (var j = 1; j < height - 1; ++j) {
var d2f_dx2 = f[i + 1][j] - f[i][j] * 2 + f[i - 1][j];
var d2f_dy2 = f[i][j + 1] - f[i][j] * 2 + f[i][j - 1];
var d2f_dt2 = c2[i][j] * (d2f_dx2 + d2f_dy2);
df_dt[i][j] += d2f_dt2;
}
}
for (var i = 1; i < width - 1; ++i) {
for (var j = 1; j < height - 1; ++j) {
f[i][j] += df_dt[i][j];
}
}
其中f
是字段,df_dt
是字段相对于时间的偏导数,d2f_dt2
是字段相对于时间的第二个偏导数,{{ 1}}是x方向上场的第二个偏导数,d2f_dx2
是y方向场的第二个偏导数。
有谁知道如何调整此代码以获得非反射边界?
答案 0 :(得分:0)
清除了几个25岁的蜘蛛网后,问题的解决方案将取决于您设置方程式以满足以下初始条件和无限远条件。我已经很长时间将初始和无限边界条件转换为偏微分,然后转换为代码,但知道要应用的正确边界条件将提供您试图创建的数值模型。希望这会有所帮助。
对于无阻尼的非反射条件,您希望建模的边界值问题在您{@ 3}}的最后一段下的维基百科文章中有所描述。 The_Sturm-Liouville公式本身可能无法提供正确的模型,但标题下最后一段中所讨论的边界条件是您必须满足的条件。推导在单个维度中解释,但正如文章中所述,一维问题的数值解可以扩展到任意数量的维度。
无阻尼无限传播的边界条件
boundary value at t=0 == value at t=infinity after X whole periods, where
y = Asin(Bx - C) + D or y = Acos(Bx - C) + D.
f(x)t
和f(y)t
的解是周期性三角函数,波传播到无穷大。如果你考虑一下,条件很清楚。在任何时间点,你想要描述的波只是一个无阻尼的周期谐波,它将在正弦,余弦等上建模。在任何时间点波的描述的唯一区别将是幅度和相位为它循环一个正常的时期。三角函数满足初始条件的特性将取决于相位角和时间t = 0时的偏移。随着时间接近无穷大的边界条件将在整个周期完成后成为相同的函数。