【发布时间】:2015-08-24 16:20:01
【问题描述】:
我必须编写一个名为 saddle 的函数,它在输入矩阵 M 中找到鞍点。对于这个问题,鞍点定义为一个元素,其值大于或等于其行中的每个元素,并且小于或等于其列中的每个元素。该函数应返回一个名为indices 的矩阵,该矩阵正好有两列。 indices 的每一行对应一个鞍点,行的第一个元素包含鞍点的行索引,第二列包含列索引。鞍点在索引中提供的顺序与它们在 M 中的顺序相同,根据列主要排序。如果 M 中没有鞍点,则 indices 为空数组。这是我到目前为止所拥有的:
% function indices = saddle(M)
% Definition of a test matrix M:
M = [0.8147 0.1270 0.6324 0.2785; ...
0.9058 0.9134 0.0975 0.5469];
[ rows,cols ] = size(M);
[valR,posR] = max(M,[],2);
[valC,posC] = min(M,[],1);
indices= [];
for i = 1:length(posR)
for j = 1:length(posC)
if posR(i) == posC(posR(i))
indices= [indices; posR(i),posC(i)];
end
end
end
正如我对代码的评论,我定义了一个测试矩阵,该矩阵在位置 (1,1) 上有一个鞍点,但代码无法正常工作,因为它返回
indices =
1 1
1 1
1 1
1 1
我做错了什么?
【问题讨论】:
-
一些提示:1)您没有使用变量“j”。也许你不需要那个循环。 2)您正在使用 if 语句将 posR(i) 与 posC(posR(i)) 进行比较。 posR 的最大值(对于您的 M 矩阵)为 4,但 posC 的最大值为 2。因此,如果您的行最大值恰好位于索引 4 处,则该比较无法成立。这表明您的 if 语句可能没有比较您想要的内容。