1

这是一个有趣的问题:)

我有两个“矩阵向量”,我想像 hankel 函数对常规顶点所做的那样平铺。例如:列向量:

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

非常感谢!

提供

4

1 回答 1

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

然后使用 CELL2MAT 索引您的单元格数组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。使用和中的每个值组合。因此,如果和,则 的结果等价于:XYX = [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)];
于 2010-07-06T15:01:50.757 回答