2016-10-28 2 views
0

У меня есть 3D-матрица, H, где третье измерение имеет размера 200000 и каждое измерение содержит 2 * 2 квадратной матрицузначения Собственных 3D-матрица

H=reshape([imgx(:),imgxy(:),imgyx(:),imgy(:)]',2,2,[]); 

Я хочу, чтобы вычислить собственные значения для всех 200000 матриц. Для этого я использую формулу:

[V,D]=eig(H); 

Но проблема в том, EiG() не работает для матриц 3-D. Как это можно решить без использования петель?

+0

вам нужно кольцую для каждого из 200000 единиц, кстати, это не будет быстро без параллельных вычислений инструментов. – GameOfThrows

+0

Да, вот почему я хочу сделать это без циклов. Позвольте мне задать вопрос, пожалуйста. – Navdeep

+0

Как я уже сказал, вам понадобится параллельная вычислительная техника, чтобы ускорить ее, или она будет очень медленной. – GameOfThrows

ответ

4

Я думаю, что вы ищете это: вы делаете (разреженный) блочно-диагональную матрицу A:

A = [a1 0 0 ... 
     0 a2 0 ... 
     0 0 a3 ... 
     : : : \ ] 

с ai для 1 < i < 200,000 «номер страницы» из исходного массива (третье измерение) , Вы можете сделать это, используя spdiags(). Тогда собственные значения A являются собственными значениями исходных матриц.

Однако, существует несколько проблем с этим подходом. Связь между собственными значениями и матрицей ai, к которой они относятся, трудно восстановить после использования eig(s). Плюс, я думаю, что это полный перебор, а не быстрее, чем цикл, потому что ваши подматрицы настолько малы.

Поскольку все они 2 × 2, их characteristic equations являются квадратными и чрезвычайно простыми в решении. Так почему бы не сделать это вручную:

% Compute the necessary factors 
a = 1; 
b = -H(1,1,:) - H(2,2,:); 
c = H(1,1,:) .* H(2,2,:) - H(1,2,:) .* H(2,1,:); 

% to be used in the quadratic formula: 
lambda1 = (-b + sqrt(b.^2 - 4*a*c)) /2/a; 
lambda2 = (-b - sqrt(b.^2 - 4*a*c)) /2/a; 

с H оригинал 3D массив. Так как a = 1, это упрощает для

sqdiscr = sqrt(b.*b - 4*c); 
lambda1 = -b + sqdiscr; 
lambda2 = -b - sqdiscr; 
+0

Да, так как это всего лишь 2x2, прямой метод расчета - это способ пойти imo. – Bernhard

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