views:

37

answers:

1

Hi,

Here's an interesting question :)

I have two "vectors of matrices" which I want to tile like the hankel function does for regular vertices. For example: Column Vector:

10
00

20
00

30
00

Row vector:

30 40 50 60
00 00 00 00

The resulting matrix needs to be:

10 20 30 40
00 00 00 00

20 30 40 50
00 00 00 00

30 40 50 60
00 00 00 00

Note that the 0 values can be changed, the resulting structure is the important part.

A related question: I looked in the command "edit repmat" and saw some interesting syntax I couldn't find help for:

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

and B ends up being

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

which is basically repmat(A,2,2);

So my question is, what is this syntax: A(X,X)?

Thanks a lot!

Ofer

A: 

If you want to tile a set of matrices the way HANKEL tiles values, here's one way you can do it. First, you can put all of your unique matrices in one cell array:

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

Now, if you want the first 3 matrices running down the first column and the last 4 matrices running across the last row, you can create an index matrix using HANKEL:

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

index =

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

Then index your cell array with index and use CELL2MAT to convert the resulting cell array to one matrix:

>> 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



For the second part of your question, when you perform an indexing operation like A(X,Y), you are using the elements of X as row indices and the elements of Y as column indices into A. Every combination of values in X and Y is used. So, if X = [x1 x2 x3 x4] and Y = [y1 y2 y3 y4], then the result of B = A(X,Y) is equivalent to:

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)];
gnovice
Hey,Thanks for answering. Maybe I wasn't clear because it's not exactly what I meant.For the first part, I don't want to interleave things. I want the hankel structure but for matrices instead of individual scalars.That is, instead of where hankel would put a number, I want a whole matrix in that position.As for the second part, I guess my question was even more basic - what does A(X,X) do? Actually, what does A(X,Y) do to be more general?Again thank you very much for answering :)
Ofer
@Ofer: I updated my answer based on your clarifications.
gnovice
Wow! Totally awesome! It's exactly what I wanted. Thanks :)
Ofer