matlab中的对角矩阵

use*_*179 2 matlab matrix

我在matlab中创建这个矩阵时遇到了麻烦,基本上我需要创建一个矩阵,其中-1穿过中心对角线,然后是对角线外面的4s(下面的例子).所有其他值都可以为零.

 A5 = [-1 4 0 0 0;
     4 -1 4 0 0;
     0 4 -1 4 0;
     0 0 4 -1 4;
     0 0 0 4 -1];
Run Code Online (Sandbox Code Playgroud)

我尝试过使用命令,v = [4]; D = diag(v) 但只适用于中心对角线.

Dev*_*-iL 6

这也可以使用toeplitz矩阵完成:

function out = tridiag(a,b,c,N)
% TRIDIAG generates a tri-diagonal matrix of size NxN.
% lower diagonal is a
%  main diagonal is b
% upper diagonal is c
out = toeplitz([b,a,zeros(1,N-2)],[b,c,zeros(1,N-2)]);
Run Code Online (Sandbox Code Playgroud)

>> tridiag(4,-1,4,5)

ans =

    -1     4     0     0     0
     4    -1     4     0     0
     0     4    -1     4     0
     0     0     4    -1     4
     0     0     0     4    -1
Run Code Online (Sandbox Code Playgroud)

注意#1:当您想要的输出是对称的时,您可以省略第二个输入toeplitz.

注意#2:随着矩阵的大小增加,有一点将它存储起来更有意义sparse,因为这可以节省内存并提高性能(假设你的矩阵确实很稀疏,即大部分由零组成,因为它发生了用三对角矩阵).一些有用的功能spdiags,FEXFEX.sptoeplitzblktridiag