【发布时间】:2017-06-09 11:56:36
【问题描述】:
我有一个方阵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的连续编号的行
没有任何零值对角线条目
感谢您的帮助和想法:)
【问题讨论】:
-
您能否添加一个
B的示例,您希望在这种情况下得到什么结果? -
我做到了,感谢您的反馈
-
你说行号和列号必须都是1:k,但是你还想提取B([2,3],[1,2])。应该只有其中一个行/列是 1:k,还是这个条目有误?
-
列从1开始连续编号,行也连续编号,但不一定从1开始