我试图生成一个矩形矩阵,主对角线上方的对角线上有1s,主对角线上有-1s。我用的是“眼睛”,它不会在主要部分上面形成对角线。 请在下面找到我的尝试。
N = 5
M1 = -eye([N-1 N])
M2 = eye([N N-1])'
M = M1+M2
我无法自行解决此问题。任何帮助或相关文档的链接将不胜感激。
答案 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)
只需按照正常情况创建eye
和diag
矩阵,将它们添加到一起,然后砍掉不需要的行:
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