我有一个 2x1 列向量的矩阵 [35rows x 39columns],代表有序对。我还有一个函数可以创建一个 9 点模板并评估这些点,然后返回 9 个值并选择最大的一个。然后它创建另一个 9 点模板,以最大返回值所在的位置为中心,并继续直到函数在矩阵中的全局最大值处终止。
我的问题是,我怎样才能通过忽略它已经评估的点来提高模板的效率?我不想每次都评估 9 分,因为它会花费更长的时间,我正在努力使这个过程尽可能快。
过程:1.) 评估一个点及其周围的 8 个点,2.) 选择最大的返回值,3.) 移动到该点,4.) 重复
我正在引用一个单元格,所以我使用 {i,j} 索引。
这是我的代码:
for k = 1:10^(6)
Setpoint1 = Field{i,j}(1);
Setpoint1 = Field{i,j}(2);
Setpoint2 = Field{i-1,j-1}(1);
Setpoint2 = Field{i-1,j-1}(2);
Setpoint3 = Field{i-1,j}(1);
Setpoint3 = Field{i-1,j}(2);
Setpoint4 = Field{i-1,j+1}(1);
Setpoint4 = Field{i-1,j+1}(2);
Setpoint5 = Field{i,j-1}(1);
Setpoint5 = Field{i,j-1}(2);
Setpoint6 = Field{i,j+1}(1);
Setpoint6 = Field{i,j+1}(2);
Setpoint7 = Field{i+1,j-1}(1);
Setpoint7 = Field{i+1,j-1}(2);
Setpoint8 = Field{i+1,j}(1);
Setpoint8 = Field{i+1,j}(2);
Setpoint9 = Field{i+1,j+1}(1);
Setpoint9 = Field{i+1,j+1}(2);
从那里我进行了 9 个函数调用,并仅记录 rSquared 值(temp1 等是具有多个字段的对象,但我只关心 rSquared。)
tempVec = [temp1.rSquared,temp2.rSquared,temp3.rSquared,temp4.rSquared,temp5.rSquared,temp6.rSquared,temp7.rSquared,temp8.rSquared,temp9.rSquared];
nextCenter = find(tempVec==max(tempVec));
if nextCenter == 1
break;
end
if nextCenter == 2;
i = i-1;
j = j-1;
elseif nextCenter == 3;
i = i-1;
elseif nextCenter == 4;
i = i-1;
j = j+1;
elseif nextCenter == 5;
j = j-1;
elseif nextCenter == 6;
j = j+1;
elseif nextCenter == 7;
i = i+1;
j = j-1;
elseif nextCenter == 8;
i = i+1;
elseif nextCenter == 9;
i = i+1;
j = j+1;
end
nextCenter = [];
end
丹,当我将它与不同的算法进行比较时,我才发现 :( 我可以解决这个问题,我需要帮助的只是这个模板。