Arrays 使用五点模板计算带有向量输入的函数,并收敛到最大输出值

Arrays 使用五点模板计算带有向量输入的函数,并收敛到最大输出值,arrays,matlab,optimization,cell,iteration,Arrays,Matlab,Optimization,Cell,Iteration,我熟悉纸上的迭代方法,但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] } 。。。由2x1列向量组成的29x33单元阵列,我从以下方面获得:

我熟悉纸上的迭代方法,但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] }
。。。由2x1列向量组成的29x33单元阵列,我从以下方面获得:

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

A = squeeze(num2cell(permute(cat(3,X,Y),[3,1,2]),1))
[感谢stackOverflow的成员帮助我做到这一点]

我有一个函数,它调用每个列向量并返回一个值。我想建立一个2-D 5点模具方法,评估一个列向量及其4个邻域,并从这5个列向量中找出通过函数获得的最大值

i、 e.如果我从中间开始,评估的分数将是:

一,

二,

三,

四,

五,

在这5个点中,该方法将选择函数返回值最大的点,移动到该点,然后重新运行该方法。这将持续下去,直到达到全局最大值。这基本上是一种迭代优化方法(尽管是一种原始方法)。注意:我没有访问优化工具箱的权限


非常感谢各位。

编辑:很抱歉,我没有正确阅读你们Q的迭代部分。也许其他人想用这个作为一个真正答案的模板,我现在太忙了

一种使用for循环的解决方案(可能有一种更优雅的解决方案):

但如果您只是在寻找最大值,这相当于:

maxoverall=max(cat(1,A{:}));
A{14,17}(1)
A{14,17}(2)
A{15,16}(1)
A{15,16}(2)
A{16,17}(1)
A{16,17}(2)
A{15,18}(1)
A{15,18}(2)
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{:}));