2013-07-23 12 views
0

我熟悉紙上的迭代方法,但MATLAB編碼對我來說是比較新的,我似乎無法找到一種編碼方式。使用五點模板來評估與矢量輸入的函數並收斂到最大輸出值

在代碼語言...

實際上,這就是我:

A = { [1;1] [2;1] [3;1] ... [33;1] 
     [1;2] [2;2] [3;2] ... [33;2] 
     ... ... ... ... .... 
     [1;29] [2;29] [3;29] ... [33;29] } 

... 2×1列向量的29x33單元陣列,這是我得到了來自:

[X,Y] = meshgrid([1:33],[1:29]) 

A = squeeze(num2cell(permute(cat(3,X,Y),[3,1,2]),1)) 

[感謝StackOverflow的成員誰幫我做這件事]

我有一個功能,調用這些列向量中的每一個並返回單個值。我想建立一個二維5點模板方法來評估一個列向量及其4個鄰居,並通過這5個列向量中的函數找到最大值。

即,如果我是從中間開始,評估的點將被:

1.

A{15,17}(1) 
A{15,17}(2) 

2.

A{14,17}(1) 
A{14,17}(2) 

3.

A{15,16}(1) 
A{15,16}(2) 

4.

A{16,17}(1) 
A{16,17}(2) 

5.

A{15,18}(1) 
A{15,18}(2) 

在這些5點,該方法會選擇一個從功能上最大的返回值,移動到該點,並重新運行方法。這將繼續,直到達到全球最大值。它基本上是一種迭代優化方法(儘管是最原始的方法)。注意:我無權訪問優化工具箱。

非常感謝。

回答

0

編輯:對不起,我沒有正確閱讀你Q的迭代部分。也許其他人想用這個模板作爲真正的答案,我現在太忙了。使用循環

一個解決方案(有可能是一個更優雅的一個):

overallmax=0; 
for v=2:size(A,1)-1 
    for w=2:size(A,2)-1 
     % temp is the horizontal part of the "plus" stencil 
     temp=A((v-1):(v+1),w); 
     tmpmax=max(cat(1,temp{:})); 
     temp2=A(v,(w-1):(w+1)); 
     % temp2 is the vertical part of the "plus" stencil 
     tmpmax2=max(cat(1,temp2{:})); 
     mxmx=max(tmpmax,tmpmax2); 
     if mxmx>overallmax 
      overallmax=mxmx; 
     end 
    end 
end 

但如果你只是尋找最大值,這相當於:

maxoverall=max(cat(1,A{:}));