2014-09-23 38 views
0

在我的模型中,我需要執行修補變量的雙線性插值。某些補丁包含一個固定的補丁變量(讓我們調用這些節點)。對於所有非節點補丁,我需要通過雙線性插值來獲得補丁變量的值。然而,節點之間的距離並不總是相同的,所以我試圖通過「類似擴散」算法來進行插值(節點作爲邊界條件並且重複迭代,非節點落在邊界條件之間的線性路徑上) 。由於我的模型是3D的,我需要在某些平面(xy xz yz)執行雙線性插值,因此我還沒有找到簡單使用diffuse4的方法。我嘗試使用鄰居4的重複平均(或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

此代碼似乎犯罪嫌疑人:

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

你只是丟棄在當前補丁的價值。

如果您想一次更新所有值,則需要按照How to avoid individual patch updates的建議操作。