创建一个矩阵,该矩阵在任何偏移对角线上

时间:2018-09-06 08:45:10

标签: matlab matrix

我的目标是创建一个在偏移对角线上带有矩阵的函数:

enter image description here

eye(5)函数类似,但是现在在对角线偏移上。最好不要使用两个for循环。我不需要完整的矩阵,而是必须将它们插入现有的矩阵中。我该怎么做?

2 个答案:

答案 0 :(得分:3)

diag内置了以下功能:

diag(ones(4,1),1)
ans =

     0     1     0     0     0
     0     0     1     0     0
     0     0     0     1     0
     0     0     0     0     1
     0     0     0     0     0

diag(ones(4,1),-1)

ans =

     0     0     0     0     0
     1     0     0     0     0
     0     1     0     0     0
     0     0     1     0     0
     0     0     0     1     0

diag(V,k)的语法为:V是要放在对角线上的向量(是1或任何奇数向量),而k是对角线的标签。对角线。 0是主要对角线,正整数逐渐远离上对角线,负整数与下对角线相同;也就是说,在此示例中,k=1给出了第一个上对角线,k=-4给出了左下角。

出于完整性考虑,如果您只希望索引而不是完整矩阵(因为建议您将向量插入当前矩阵),则可以使用以下函数:

function [idx] = diagidx(n,k)
% n size of square matrix
% k number of diagonal
if k==0 % identity
    idx = [(1:n).' (1:n).']; % [row col]
elseif k>0 % Upper diagonal
    idx = [(1:n-k).' (1+k:n).'];
elseif k<0 % lower diagonal
    idx = [(1+abs(k):n).' (1:n-abs(k)).'];
end
end

idx的每一行都包含矩阵的索引。

答案 1 :(得分:0)

triu(B+1,1)-triu(B+1,2)

在第一个对角线上方创建一个,并且

tril(B+1,-2)-tril(B+1,-3)

对于第一个下对角线不一样。