我正在尝试实现一个模拟波浪行为的细胞自动机。我正在使用带有r=2
的Von Neumann邻域,就像这里的一样
我的问题是:我应该如何计算边界上单元格的状态?
例如:我有一个数组a
,我想计算a[0][0]
的值。
细胞的状态是在(-1,1)范围内的浮动,其中0是陆地。在"常规"细胞上,我可以获取邻居的状态,但当邻居较少(<12)时,结果是错误的,并"产生"新的浪潮。
您的问题有不同的解决方案。
- 周期边界条件:将晶格视为环面,并使用模来循环单元
示例:a[-1][0]=a[n-2][0]
好的一面是:这通过平移使晶格不变来避免任何"边界效应",这应该会导致更自然的进化。坏的一面:在较小的尺度上,这可能会产生不希望的影响,如共振。
如果你想对你的模型进行定量研究,比如相变、平均场等,这种方法特别适合
- 惰性边界条件:考虑晶格的边界具有吸收规则,即它们模拟总是具有相同惰性状态的"外部"细胞
例如:a[-1][0]=10e-6左右,因为0表示陆地。
好的一面:你可以避免共振效应。不利的一面:潜在的边界效应,以及缺乏外部波源。
这种方法更适合定性使用:检查实现的有效性,寻找模型伪像(例如,类似马的模式?),或者简单地呈现一个对观察者来说看起来有机的系统。
- 要有创造力
示例:所有边界单元格都是陆地(0)。