在matlab中创建块三对角矩阵

时间:2016-05-14 23:54:37

标签: matlab matrix

我正在编写一个用于求解非线性偏微分方程的Matlab代码。我达到了一个点,我需要一个(M + 1)^ 2乘(M + 1)^ 2块矩阵,其中包含A作为主对角线,B在位置(i,i + 1),而C in(i,i) +2)。即,B和C在主对角线A之上。 有没有一种简短的方法来构建这样的块矩阵?

1 个答案:

答案 0 :(得分:1)

首先,您可以使用triu函数构建单个块,如下所示:

M = 4;
A = 2; B = 3; C = 4;
onesMat = ones(M+1,M+1);
block = A*eye(M+1) + B*(triu(onesMat,1)-triu(onesMat,2)) + C*(triu(onesMat,2)-triu(onesMat,3));

block =
     2     3     4     0     0
     0     2     3     4     0
     0     0     2     3     4
     0     0     0     2     3
     0     0     0     0     2

如果我的理解是正确的,并且您希望通过重复同一个块M+1次来创建块对角矩阵,则可以使用blkdiag

blocks = repmat({block}, M+1, 1);
res = blkdiag(blocks{:});