0

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

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来构造。

4

1 回答 1

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

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

于 2013-09-17T16:51:49.057 回答