我有一个方阵B
,我想提取它的子矩阵,它有连续的行号和列编号为1到k,k每个自然数不超过n(矩阵的大小)。它还需要具有非零的主对角线条目。
此外,我想以数组形式存储子矩阵(下一步是检查它们的决定因素是否为正,但我不会在这个问题中包含它。这是我构建的代码:
for i = 1:n
for j = 1:n-i+1
submat2{i,j} = B([j:j+i-1],[1:i]);
for k = 1:i
maindiag{i,j,k} = prod((submat2{i,j}(i,i) ~= 0));
end
matmaindiag = []
for l = 1:size(maindiag(i,j,:),3)
matmaindiag = [matmaindiag cell2mat(maindiag(i,j,l))]
if prod(matmaindiag ~= 0)
boundsub{end+1} = submat2{i,j};
end
end
end
end
有没有更好的方法呢?
例如,如果我有:
B =
6 7 8 9
11 12 13 14
0 17 18 19
0 0 23 24
然后我要提取的子矩阵是:
B([1],[1]),B([1],[2]),B([1,2],[1,2]),B([2,3],[1] ,2]),B([1,2,3],[1,2,3]),B([2,3,4],[1,2,3])和B本身
因为他们:
由B
列中的条目组成,这些列从1到k连续编号(子矩阵本身的大小)和
来自B
没有任何零值对角线条目
感谢您的帮助和想法:)
答案 0 :(得分:1)
我想出了这个
n = size(B,1)
for i = 1:n
for j = 1:n-i+1
submat{i,j} = B([j:j+i-1],[1:i]);
end
end
bousub = []
for i = 1:n
for j = 1:n-i+1
dia = diag(submat{i,j});
if (prod(dia) ~= 0)
bousub{end+1} = submat{i,j};
end
end
end