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