【发布时间】:2020-03-08 16:03:38
【问题描述】:
假设我有一个 nxn 矩阵。我的目标是找到第一列的最大元素,交换包含最大元素的行和第一行。接下来,我想找到第二列的最大元素,不包括第一行,然后交换这个新的最大元素的行和第二行。再次,找到第 j 列的最大元素,不包括第 1:j-1 行,然后将最大元素行与第 j 行交换,直到第 n-1 列(如在第 n 列期间,我只能选择从第 n 行开始)。 我目前的设置如下
for j = 1:n-1
[~,row]=max(A(j:n,j));
temp = A(row,:);
A(row,:)=A(j,:);
A(j,:)=temp;
...
虽然切换功能运行良好,[~, row]=max(A(j:n,j)) 能够并且始终如一地针对我专门处理的矩阵在 j 的第二次迭代期间输出第 1 行。我在这背后的思考过程是 j:n 代表我们要检查的行。注意到 j=2,对于它的第二次迭代,我希望这将搜索第 2 到第 n 行;但是,它似乎仍然检查每一行。
虽然之前有人问过这个问题,但我发现答案是同一行代码。
【问题讨论】:
-
您真的要交换整行吗?这表明只有最后一列定义了矩阵的最终排序
-
是的,这适用于 GEPP,所以行作为一个整体需要交换。例如,矩阵 [4,5,6; 1,2,3; 7,8,9]。我希望第一次迭代输出 [7,8,9; 1,2,3; 4,5,6],第一次迭代时 max{2,1,7]=7,然后是 [7,8,9; 4,5,6; 1,2,3],在第二次迭代中 max{2,5}=5。 Tbh,在我正在寻找的状态下,这个算法似乎不会考虑最后一列。
-
max{2,1,7]=7是怎么结束的,根据你的描述,我预计最多 7,1,4。 -
我的错误。是的,期望的结果是 max{4,1,7}。