如何在数组中存储子矩阵

时间:2017-06-09 11:56:36

标签: arrays matlab matrix

我有一个方阵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本身

因为他们:

  1. B列中的条目组成,这些列从1到k连续编号(子矩阵本身的大小)和

    1. 来自B

    2. 的连续编号行
    3. 没有任何零值对角线条目

  2. 感谢您的帮助和想法:)

1 个答案:

答案 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