如何在Matlab上创建这个矩阵?

时间:2015-11-17 21:21:24

标签: matlab matrix

我正在尝试创建一个矩阵(32 x 32),其主对角线为-1,第一和第二超对角线为1。 0到处都是。

A = eye(32)* -1;

这给了我一个主对角线上带-1的矩阵,我该怎么办?

8 个答案:

答案 0 :(得分:7)

n=32;
toeplitz([-1; zeros(n-1,1)],[-1 1 1 zeros(1,n-3)])

是你需要的。这将创建一个非对称的Toeplitz矩阵(带矩阵),其第一列由[-1; zeros(32-1,1)]给出,第一列由[-1 1 1 zeros(1,32-3)]给出。如有必要,您还可以将大小为n的函数定义为输入参数。

答案 1 :(得分:6)

您可以使用spdiags将对角线直接设置为稀疏矩阵和full - 如果需要,可以设置。

n       = 32;
Asparse = spdiags(ones(n,1)*[-1,1,1],[0,1,2],n,n);
Afull   = full(Asparse);

答案 2 :(得分:5)

n = 32
A = -1*eye(n); %Create 32x32 Identity
A(n+1:n+1:n^2) = 1; %Set 1st Superdiagonal to 1
A(2*n+1:n+1:n^2) = 1; %Set 2nd Superdiagonal to 1

请注意,MATLAB使用column-major order作为矩阵。对于第一个超对角线,我们从第(n + 1)个元素开始,并在其上选择每个第(n + 1)个元素。除了从(2 * n + 1)个元素开始之外,我们对第二个超对角线进行类似的操作。

答案 3 :(得分:5)

只需使用diageye

n = 32;
z = ones(n-1,1);
A = diag(z,1)+diag(z(1:n-2),2)-eye(n);

还有:

n = 32;
A = gallery('triw',n,1,2)-2*eye(n)

使用带有gallery选项的'triw'功能。

答案 4 :(得分:4)

diag允许您创建一个通过对角线的矩阵:

-diag(ones(n,1),0)+diag(ones(n-1,1),1)+diag(ones(n-2,1),2)

主对角线的最后一个参数0,1和超级对角线的1和2。

答案 5 :(得分:3)

如果我可以建议更多深奥的代码,首先创建一个满1s的向量,然后创建单位矩阵,然后使用向量移位创建带有这些1的对角矩阵,并将其向右移1,减少数量向量中的元素,然后再次为最后的超对角线。

n = 32;
vec = ones(n,1);
out = -eye(n) + diag(vec(1:end-1),1) + diag(vec(1:end-2),2);

答案 6 :(得分:2)

N = 32;
A = -diag(ones(N,1)); % diagonal
tmp1=diag(ones(N-1,1),1); %1st supra
tmp1=diag(ones(N-2,1),2); @2nd supra
A = A+tmp1+tmp2; 

使用diag

答案 7 :(得分:2)

另一种方法:它使用信号处理工具箱中的convmtx

n = 32; %// matrix size
v = [-1 1 1]; %// vector with values
M = convmtx(v, n);
M = M(:,1:end-numel(v)+1);