2010-04-27 56 views
0

我有通過改變已知矩陣的形式考慮下面的規則來獲得未知矩陣:MATLAB中是否有任何函數用於改變矩陣的形式?

H = [-P'|I] %' 
G = [I|P] 

其中

  • H是已知的矩陣
  • G是一個未知的矩陣,其必須計算
  • 我是單位矩陣

因此,例如,如果我們有一個矩陣,

H = [1 1 1 1 0 0; 
    0 0 1 1 0 1; 
    1 0 0 1 1 0] 

其形式必須被改變到

H = [1 1 1 1 0 0; 
    0 1 1 0 1 0; 
    1 1 0 0 0 1] 

所以

-P' = [1 1 1; 
     0 1 0; 
     1 1 0] 

和在二值矩陣-P = P的情況下。

因此

G = [1 0 0 1 1 1; 
     0 1 0 0 1 0; 
     0 0 1 1 1 0] 

我知道如何執行基本行操作來解決它在紙上,但還沒有想出如何使用MATLAB還沒有解決這個問題。

解決給定問題的方法是什麼?

+0

對於-P == P的評論僅當您將其限制爲整數字段時才爲真。你應該在你的問題中明確表達。 – 2010-04-27 09:33:48

+0

如果你把你的Matlab語句格式化爲代碼,這將會非常有用。 – 2010-04-27 11:00:52

+0

@Niko:請看一下幫助,看看如何格式化後,使他們更具可讀性。 – Jonas 2010-04-27 11:23:50

回答

1

如果列在-P'的順序並不重要,這裏的使用功能ISMEMBER一個解決辦法:

>> H = [1 1 1 1 0 0; 0 0 1 1 0 1; 1 0 0 1 1 0]; %# From above 
>> pColumns = ~ismember(H',eye(3),'rows') %'# Find indices of columns that 
              %# are not equal to rows 
pColumns =         %# of the identity matrix 

    1 
    0 
    1 
    1 
    0 
    0 

>> P = -H(:,pColumns)' %'# Find P 

P = 

    -1  0 -1 
    -1 -1  0 
    -1 -1 -1 

>> G = logical([eye(3) P]) %# Create the binary matrix G 

G = 

    1  0  0  1  0  1 
    0  1  0  1  1  0 
    0  0  1  1  1  1 

注:該解決方案將正常工作爲整數或二進制值H。如果H具有浮點值,那麼當使用ISMEMBER時(參見herehere以獲得關於此問題的更多討論),您可能會遇到浮點比較的問題。