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

Rak*_*van 0 matlab matrix

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

A = eye(32)* -1;
Run Code Online (Sandbox Code Playgroud)

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

And*_*eak 7

n=32;
toeplitz([-1; zeros(n-1,1)],[-1 1 1 zeros(1,n-3)])
Run Code Online (Sandbox Code Playgroud)

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


Tro*_*kin 6

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

n       = 32;
Asparse = spdiags(ones(n,1)*[-1,1,1],[0,1,2],n,n);
Afull   = full(Asparse);
Run Code Online (Sandbox Code Playgroud)


小智 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
Run Code Online (Sandbox Code Playgroud)

请注意,MATLAB使用列主要顺序表示矩阵.对于第一个超对角线,我们从第(n + 1)个元素开始,并在其上选择每个第(n + 1)个元素.除了从(2*n + 1)个元素开始之外,我们对第二个超对角线进行类似的操作.

  • 由于矩阵是方形的,使用`A(n + 1:n + 1:end)= 1;`和`A(2*n + 1:n + 1:1)可能有意义(并且可能稍微快一点)结束)= 1;`.如果这个答案在很多情况下是最快的,我不会感到惊讶. (2认同)

hor*_*ler 5

只是使用diageye:

n = 32;
z = ones(n-1,1);
A = diag(z,1)+diag(z(1:n-2),2)-eye(n);
Run Code Online (Sandbox Code Playgroud)

还有:

n = 32;
A = gallery('triw',n,1,2)-2*eye(n)
Run Code Online (Sandbox Code Playgroud)

使用gallery'triw'选项的功能.