扩散与邻居平均的双线性插值

时间:2014-09-23 17:11:52

标签: netlogo

在我的模型中,我需要进行补丁变量的双线性插值。某些补丁包含固定的补丁变量(让我们调用这些节点)。对于所有非节点补丁,我需要通过双线性插值获得补丁变量的值。然而,节点之间的距离并不总是相同的,所以我试图通过"类似扩散的"进行插值。算法(作为边界条件的节点和重复迭代,非节点指向边界条件之间的线性路径)。由于我的模型是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

1 个答案:

答案 0 :(得分:0)

这段代码似乎很可疑:

ask patches [ set value ( sum [value] of neighbors4) / 4 ]

您只是丢弃当前补丁的值。

如果您想一次更新所有值,则需要遵循How to avoid individual patch updates的建议。