2013-09-16 102 views
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来构建。

+2

当'E'和'D'只有3个时,A'有40行? –

+2

你试过了吗?[E,D,零(尺寸(E); D,E,D;零(尺寸(E)),D,E]'? –

+0

@高性能标记 - 正确,所以我解释得很差。在我的例子中,它们都是3x3,在我的实例中,它们都是40x40。 –

回答

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(佛只是一个常数这里):

vector = zeros(Distance_Resolution,1) - Fo; 
A2 = diag(vector); 
A1 = toeplitz([1+4*Fo, -Fo, zeros(1,Distance_Resolution-2)]); 

这是一个可行的代码片段,但我仍然在寻找一个更聪明的方式来编写的。