我正在使用MATLAB R2015b,我们如何生成一个上对角线元素为1的矩形矩阵?

时间:2016-04-13 01:59:29

标签: matlab matrix

我试图生成一个矩形矩阵,主对角线上方的对角线上有1s,主对角线上有-1s。我用的是“眼睛”,它不会在主要部分上面形成对角线。 请在下面找到我的尝试。

N = 5
M1 =  -eye([N-1 N]) 
M2 =  eye([N N-1])'
M = M1+M2 

我无法自行解决此问题。任何帮助或相关文档的链接将不胜感激。

3 个答案:

答案 0 :(得分:0)

我不知道任何预建功能,但您可以自己轻松制作这样的矩阵:

N=5;
M=7;
diag=-eye(N,M);
upper_diag=horzcat(zeros(N,1),eye(N,M-1))
final=diag+upper_diag

使用单位矩阵和一些连接来移动对角线。此示例假设您正在寻找方阵。

结果如下:

final =

-1     1     0     0     0     0     0
 0    -1     1     0     0     0     0
 0     0    -1     1     0     0     0
 0     0     0    -1     1     0     0
 0     0     0     0    -1     1     0

答案 1 :(得分:0)

只需按照正常情况创建eyediag矩阵,将它们添加到一起,然后砍掉不需要的行:

nCol = 7;
nRow = 5;
M = -eye(nCol) + diag(ones(nCol - 1, 1), 1);
M = M(1:nRow, 1:nCol)

产生

M =

    -1     1     0     0     0     0     0
     0    -1     1     0     0     0     0
     0     0    -1     1     0     0     0
     0     0     0    -1     1     0     0
     0     0     0     0    -1     1     0

答案 2 :(得分:0)

spdiags的四输入版本就是这样做的,产生一个稀疏矩阵。您可能需要转换为full

M = 5; %// number of rows
N = 7; %// number of columns
d = [0 1]; %// specify main diagonal and the one above
v = [-1 1]; %// values in those diagonals
result = full(spdiags(ones(M,1)*v, d, M, N));

这给出了

result =
    -1     1     0     0     0     0     0
     0    -1     1     0     0     0     0
     0     0    -1     1     0     0     0
     0     0     0    -1     1     0     0
     0     0     0     0    -1     1     0