Черепичные матрицы в matlab - PullRequest
1 голос
/ 06 июля 2010

Вот интересный вопрос:)

У меня есть два "вектора матриц", которые я хочу разбить на части, как это делает функция Ханкеля для правильных вершин.Например: Вектор столбца:

10
00

20
00

30
00

Вектор строки:

30 40 50 60
00 00 00 00

Результирующая матрица должна быть:

10 20 30 40
00 00 00 00

20 30 40 50
00 00 00 00

30 40 50 60
00 00 00 00

Обратите внимание, что значения 0 могут бытьизменено, результирующая структура является важной частью.

Смежный вопрос: я посмотрел в команде «edit repmat» и увидел интересный синтаксис, для которого я не смог найти справку:

A=[1,3;2,4];
X=[1,1;2,2];
B=A(X,X);

и B заканчивается

1 3 1 3
2 4 2 4
1 3 1 3
2 4 2 4

, который в основном является repmat (A, 2,2);

Итак, мой вопрос, что это за синтаксис: A (X, X)?

Большое спасибо!

Ofer

1 Ответ

0 голосов
/ 06 июля 2010

Если вы хотите выложить набор из матриц способом HANKEL плиток значений , вот один из способов сделать это.Во-первых, вы можете поместить все свои уникальные матрицы в один массив ячеек:

mat = [1 0; 0 0];
cArray = {mat 2.*mat 3.*mat 4.*mat 5.*mat 6.*mat};  %# Your 6 unique matrices

Теперь, если вы хотите, чтобы первые 3 матрицы проходили по первому столбцу, а последние 4 матрицы проходили по последней строке, выможно создать индексную матрицу, используя HANKEL :

>> index = hankel(1:3,3:6);

index =

     1     2     3     4
     2     3     4     5
     3     4     5     6

Затем индексируйте ваш массив ячеек с помощью index и используйте CELL2MAT , чтобы преобразовать полученный массив ячеек в одну матрицу:

>> cell2mat(cArray(index))

ans =

     1     0     2     0     3     0     4     0
     0     0     0     0     0     0     0     0
     2     0     3     0     4     0     5     0
     0     0     0     0     0     0     0     0
     3     0     4     0     5     0     6     0
     0     0     0     0     0     0     0     0



Во второй части вашего вопроса, когда вы выполняете операцию индексирования, такую ​​как A(X,Y), вы используете элементы Xв качестве индексов строк и элементов Y в качестве индексов столбцов в A. Используется каждая комбинация значений в X и Y.Так, если X = [x1 x2 x3 x4] и Y = [y1 y2 y3 y4], то результат B = A(X,Y) эквивалентен:

B = [A(x1,y1) A(x1,y2) A(x1,y3) A(x1,y4); ...
     A(x2,y1) A(x2,y2) A(x2,y3) A(x2,y4); ...
     A(x3,y1) A(x3,y2) A(x3,y3) A(x3,y4); ...
     A(x4,y1) A(x4,y2) A(x4,y3) A(x4,y4)];
...