MATLAB中是否有用于改变矩阵形式的函数?

时间:2010-04-27 09:27:55

标签: matlab matrix

考虑到以下规则,我必须通过改变已知矩阵的形式来获得未知矩阵:

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解决它。

解决给定问题的方法是什么?

1 个答案:

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