交换仅对下对角线元素生效的行

时间:2013-05-29 13:37:20

标签: matlab matrix

有方形矩阵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中没有更多元素在对角线下面。

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

可以找到常规交换here

2 个答案:

答案 0 :(得分:6)

您可以尝试以下操作:

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

请注意,row1 <= row2可以使用此功能。如有必要,您只需使用min和/或max查找最小/最大的内容。

答案 1 :(得分: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 :)