2010-07-06 168 views
1

这里有一个有趣的问题:)在matlab中拼贴矩阵

我有两个“矩阵向量”,我想要像汉克尔函数一样平铺正常顶点。 例如: 列向量:

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值可以改变,所产生的结构是重要的组成部分。

一个相关的问题: 我看着在命令“编辑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)?

非常感谢!

奥弗

回答

0

如果你想瓷砖一套矩阵方式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使用XY中的值的每个组合。所以,如果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)]; 
+0

嘿, 谢谢回答。也许我不清楚,因为这不完全是我的意思。 对于第一部分,我不想交错的东西。我想要hankel结构,但对于矩阵而不是单个标量。 也就是说,而不是hankel会放置一个数字的地方,我想要一个完整的矩阵。 至于第二部分,我想我的问题更加基本 - A(X,X)是做什么的?其实,A(X,Y)做得更一般吗? 再次非常感谢你回答:) – Ofer 2010-07-06 18:56:41

+0

@Ofer:我根据你的说明更新了我的答案。 – gnovice 2010-07-06 19:28:51

+0

哇!非常棒!这正是我想要的。谢谢 :) – Ofer 2010-07-08 05:28:46