我有一个分为子矩阵的大矩阵。
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))
?我现在这不起作用,但我想说明我的观点。
答案 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)