2013-09-16 2 views
0

У меня есть две диагональные матрицы. Я пытаюсь построить из них большую блочную диагональную матрицу. Например, если бы я это:2D-матрица матриц

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

Где А

[E D 0 

D E D 

0 D E] 

Это для 3х3. 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

Как у 'A' есть 40 строк, когда' E' и 'D' имеют только 3? –

+2

Вы пробовали '[E, D, нули (размер (E); D, E, D; нули (размер (E)), D, E]'? –

+0

@High Performance Mark - Правильно, поэтому я плохо объяснил. В моем примере все они 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 х Distance_Resolution х Distance_Resolution. Я определил А1 и А2 через помощь над плакатом (Fo это просто константа здесь):

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

Это работоспособный фрагмент кода, но я до сих пор ищет разумный способ кодировать его.

Смежные вопросы