matlab中的对角矩阵

时间:2016-07-18 21:13:11

标签: 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];

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

2 个答案:

答案 0 :(得分:6)

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

const char *__crashreporter_info__ = NULL;
asm(".desc ___crashreporter_info__, 0x10");

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)]);

注意#1:当您想要的输出是对称的时,您可以省略>> 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 的2 nd 输入。

注意#2:随着矩阵大小的增加,更有意义的是将其存储为sparse,因为这样可以节省内存并提高性能(假设你的矩阵确实是稀疏,即主要由零组成,因为它发生在三对角矩阵中)。一些有用的函数是spdiagssptoeplitz FEX blktridiag < SUP> FEX

答案 1 :(得分:2)

使用D = diag(u,k)u转换为主对角线以上的k级别,将D = diag(u,-k)转换为相反的方向。请注意,您需要u处于所需的k对角线的正确长度,因此如果最终矩阵为n * n,则k的对角线将仅具有n-abs(k)元素。

对于你的情况:

n = 5;           % the size of the matrix 
v = ones(n,1)-2;   % make the vector for the main diagonal
u = ones(n-1,1)*4; % make the vector for +1 and -1 diagonal
A5 = diag(v)+diag(u,1)+diag(u,-1) % combine everything together

给出了:

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