6

有方矩阵A,我想在上面的 2 行之间进行交换,但限制是这种交换只会对两行对角线下的元素生效。

例子 -

1 2 3 4
3 6 7 8 
6 5 4 2
9 4 6 7

在 row1 和 row2 之间交换将返回相同的矩阵,因为第 1 行的对角线下方没有元素。

但是在 row2 和 row3 之间交换会给出 -

1 2 3 4
6 6 7 8 
3 5 4 2
9 4 6 7

它实际上只是在 2 个元素索引 (3,1) 和 (2,1) 之间交换,因为 row2 中没有更多元素在对角线之下。

给定两个必需的行索引,如何在没有显式循环的情况下获得此函数?

定期交换可以在这里找到 。

4

2 回答 2

6

您可以尝试以下方法:

A([row1 row2],1:row1-1) = A([row2 row1],1:row1-1)

请注意,row1 <= row2要使其正常工作。如有必要,您可以简单地使用min和/或max查找最小/最大的。

于 2013-05-29T14:09:05.160 回答
4

这应该可以解决问题:

function A = swapRowsBelowDiagonal(A, a,b)

    m = min(a,b)-1;
    [A(a,1:m), A(b,1:m)] = swap(A(a,1:m), A(b,1:m));
end

function [y,x] = swap(x,y), end % NOTE: no body, just for fun :) 
于 2013-05-29T14:09:04.033 回答