在大矩阵matlab中访问子矩阵中的元素

时间:2014-07-05 09:07:27

标签: matlab matrix sparse-matrix

我有一个分为子矩阵的大矩阵。

clear all
clc

X  = [1 2 3; 4 5 6; 7 8 9];
B1 = zeros(3,9);
B2 = zeros(3,3);
m1 = diag([11 12 13]);
m2 = diag([14 15 16]);
m3 = diag([17 18 19]);
G = [ X B1; B2 m1 m2 m3]; 

结果是

G =

     1     2     3     0     0     0     0     0     0     0     0     0
     4     5     6     0     0     0     0     0     0     0     0     0
     7     8     9     0     0     0     0     0     0     0     0     0
     0     0     0    11     0     0    14     0     0    17     0     0
     0     0     0     0    12     0     0    15     0     0    18     0
     0     0     0     0     0    13     0     0    16     0     0    19

现在我的问题是如何访问子矩阵(m1,m2,m3)的对角元素,无论是从索引i = 1到i = 3,还是访问特定的m,例如i = 2 M2?另一个问题是,是否可以通过名称作为大矩阵的索引来访问子矩阵?例如,G(m1(1,1))?我现在这不起作用,但我想说明我的观点。

1 个答案:

答案 0 :(得分:3)

访问子矩阵的对角线

要获得子矩阵的对角线,您必须选择子矩阵,然后使用diag函数:

diag(G(1:3,1:3))

子公司标签

您可以定义这样的标签:

m1_s={[4:6],[4:6]}

表示第4行到第6行,第4列到第6行。使用G(m1_s{:})获取子矩阵。

显然你可以结合两种技术。例如,获取子矩阵m1的对角线:

diag(G(m1_s{:}))

解释{:} here,它将单元格数组m1_s转换为逗号分隔列表。写G(m1_s{:})G(m1_s{1},m1_s{2})

相同

/更新:

可以使用函数句柄实现更加动态的标记方式:

m_s=@(c)({[4:6],[1:3]+c*3})

现在你可以使用

m1_s=m_s(1)
G(m1_s)