【问题标题】:Is there any function in MATLAB for changing the form of a matrix?MATLAB中是否有任何函数可以改变矩阵的形式?
【发布时间】:2011-02-04 05:48:22
【问题描述】:

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

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

在哪里

  • H 是已知矩阵
  • G 是一个需要计算的未知矩阵
  • I 是单位矩阵

例如,如果我们有一个矩阵,

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

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

【问题讨论】:

  • 您对 -P == P 的评论只有在您将其限制为整数字段时才是正确的。您应该在问题中明确说明。
  • 如果您将 Matlab 语句格式化为代码格式,将会有很大帮助。
  • @Niko:请查看帮助以了解如何格式化帖子以使其更具可读性。
  • 两个问题:1)在你的例子中-P'不应该等于[1 1 1; 0 1 1; 1 1 0],这会给出G = [1 0 0 1 0 1; 0 1 0 1 1 1; 0 0 1 1 1 0]? 2)您没有指定如何重新排序H。是否需要交换列,或者是否可以将不在I 中的列简单地向左移动?换句话说,[1 1 1; 0 1 1; 1 0 1]-P' 的有效值吗?
  • 您还需要使用 Matlab 执行基本的行操作。我建议您从关于 [Permutation Matrices][1] 的 Wikipedia 文章开始。开始后更新您的问题。 [1]:en.wikipedia.org/wiki/Permutation_matrix

标签: matlab matrix


【解决方案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)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多