首页 > 解决方案 > 在任何偏移对角线上创建一个矩阵

问题描述

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

在此处输入图像描述

与函数非常相似eye(5),但现在在偏移对角线上。最好不要使用双for循环。我不想要完整的矩阵,而是必须将它们插入现有的矩阵中。我怎样才能做到这一点?

标签: matlabmatrix

解决方案


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是要放在对角线上的向量(无论是一个,还是任何奇数向量),并且k是对角线的标签。0是主对角线,正整数越远离上对角线,负整数越远离下对角线;iek=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包含矩阵的索引。


推荐阅读