2017-04-07 81 views
0

我想这个矩阵变成MATLAB在其枢轴位置交换行零,部分旋转?

A = 

    1  2 -1  4  5 
    1 -6  7  5  6 
    0  0  4  7  5 
    0 -3  4  7  7 
    1  5  1  5  6 

这种矩阵。

A = 

    1  2 -1  4  5 
    1 -6  7  5  6 
    1  5  1  5  6 
    0 -3  4  7  7 
    0  0  4  7  5 

因此,任何在其枢轴位置有零的行应该下降。

我可以通过使用下面的代码,以找到在枢轴零行:

count=0; 
for i=1:n 
    for j=1:n 
     if A(i,j)~=0 
      break 
     else 
      count=count+1; 
      row(count)=i; 
      break 
     end 
    end 
end 
row 

>> row = 

    3  4 

但我不知道我怎么能在这点以后进行。我想制作一个适用于任何类型矩阵的代码。 Plz的帮助。

+0

你为什么不能添加在最后一个额外的列指示行中零的个数和然后'基于那个列“sortrows”?零位的位置也很重要吗?而不是展示一个例子,你能否解释你从根本上想要做什么? –

+0

如果两行的第一列相同但其中一个的第二列为零会怎么样?现在排序依赖于第二列吗? –

+0

@SomeGuy不会是一个好选择,因为如果一行像[0 0 4 5 1 0 4]一样,则有三个零,但其中一个不在枢轴位置。所以我需要一种不同的方式 –

回答

0

我想这是你所需要的:

A =[1  2 -1  4  5; 
    1 -6  7  5  6; 
    0  0  4  7  5; 
    0 -3  4  7  7; 
    1  5  1  5  6]; 
% find the last zero in each row 
[val,lastZeroIdx] = min(A == 0,[],2); 
% find rows which their first column is zero 
c = A(:,1) == 0; 
% eliminate rows which their first column isn't zero 
lastZeroIdx(~c) = 0; 
% sort by the location of the last zeros 
[~,rowsIdx] = sort(lastZeroIdx,'ascend'); 
% rearrange A 
B = A(rowsIdx,:) 

,你会得到:

B = [1  2 -1  4  5 
    1 -6  7  5  6 
    1  5  1  5  6 
    0 -3  4  7  7 
    0  0  4  7  5] 
+0

谢谢!完美的作品 –