我有两个对角矩阵。我试图从它们构建一个更大的块对角矩阵。例如,如果我有这个:
D = diag(zeros(3,1)+1)
D =
1 0 0
0 1 0
0 0 1
和...
E = diag(zeros(2,1)+2, -1) + diag(zeros(2,1)+2, +1) + diag(zeros(3,1)+4)
E =
4 2 0
2 4 2
0 2 4
我有一个方程式,表示A * U = X
A是
[E D 0
D E D
0 D E]
这是3x3。 5x5看起来像这样:
A =
[E D 0 0 0
D E D 0 0
0 D E D 0
0 0 D E D
0 0 0 D E]
A是由这些矩阵组成的另一个对角矩阵。我需要生产40x40,当然需要非常长的时间来手动完成。
我该如何定义?我还没弄明白如何使用blkdiag进行构建。
答案 0 :(得分:0)
我手动解决了这个问题,因为我找不到Matlab函数来帮助我。
for n = 1:Distance_Resolution
A(((n-1)*Distance_Resolution +1):n*Distance_Resolution, ((n-1)*Distance_Resolution +1):n*Distance_Resolution) = A1;
if n == Distance_Resolution
else
A((n*Distance_Resolution+1):(n+1)*(Distance_Resolution), ((n-1)*Distance_Resolution+1:n*Distance_Resolution)) = A2;
A((n-1)*Distance_Resolution+1:n*Distance_Resolution, (n*Distance_Resolution+1):(n+1)*(Distance_Resolution)) = A2;
end
end
这将生成一个具有上述指定要求的块矩阵,其长度为Distance_Resolution x Distance_Resolution x Distance_Resolution。我通过上面的海报帮助定义了A1和A2(Fo在这里只是一个常数):
vector = zeros(Distance_Resolution,1) - Fo;
A2 = diag(vector);
A1 = toeplitz([1+4*Fo, -Fo, zeros(1,Distance_Resolution-2)]);
这是一个可行的代码段,但我仍在寻找一种更智能的代码编码方式。