2017-04-07 34 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

謝謝!完美的作品 –