在我的模型中,我需要进行补丁变量的双线性插值。某些补丁包含固定的补丁变量(让我们调用这些节点)。对于所有非节点补丁,我需要通过双线性插值获得补丁变量的值。然而,节点之间的距离并不总是相同的,所以我试图通过"类似扩散的"进行插值。算法(作为边界条件的节点和重复迭代,非节点指向边界条件之间的线性路径)。由于我的模型是3D模型,我需要在某些平面(xy xz yz)中执行双线性插值,因此我还没有找到一种简单使用diffuse4的方法。我尝试使用neighbor4(或patch-at
的重复平均值来给出正确的平面),同时保持节点处的补丁变量不变。然而,我无法弄清楚为什么这没有给出正确的双线性插值。基本上我的方法遵循以下代码。如果插值是正确的,我希望所有补丁与节点具有相同的value
,但它们不会。
globals
[
nodes
non-nodes
]
patches-own [ value]
to setup
ca
reset-ticks
set nodes (patch-set patch -2 -2 patch 2 -2 patch -2 2 patch 2 2)
set non-nodes (patch-set patches with [ abs pxcor <= max-pxcor and abs pycor <= max-pycor and not member? self nodes ])
load-nodes ; inputs data
ask nodes [ set value 1 ]
ask patch 0 0 [ show value ]
end
to go
if ticks mod 1000 = 0 [
load-nodes
Bi-lin-Interpolate
]
ask patches [
; set value value1
set pcolor scale-color yellow value 5 100]
tick
end
to load-nodes
ask nodes [ set value ((ticks / 1000) + 1) ]
end
to Bi-lin-Interpolate
repeat 10000 [
ask patches [ set value ( sum [value] of neighbors4) / 4 ]
load-nodes ]
ask patch 0 0 [ show value ]
ask patch 2 2 [ show value ]
end
答案 0 :(得分:0)
这段代码似乎很可疑:
ask patches [ set value ( sum [value] of neighbors4) / 4 ]
您只是丢弃当前补丁的值。
如果您想一次更新所有值,则需要遵循How to avoid individual patch updates的建议。