矩阵的二维矩阵

时间:2013-09-16 16:15:09

标签: matlab

我有两个对角矩阵。我试图从它们构建一个更大的块对角矩阵。例如,如果我有这个:

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进行构建。

1 个答案:

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

这是一个可行的代码段,但我仍在寻找一种更智能的代码编码方式。