矢量投影在矩阵上沿对角线

lib*_*orw 5 matlab matrix

是否有一种简单的方法来生成以下矩阵:

a = 
  4 5 6 7
  3 4 5 6
  2 3 4 5
  1 2 3 4
Run Code Online (Sandbox Code Playgroud)

这是矢量[1 2 3 4 5 6 7]沿对角线的投影?

谢谢

gno*_*ice 5

您可以使用HANKELFLIPUD函数执行此操作:

a = flipud(hankel(1:4,4:7));
Run Code Online (Sandbox Code Playgroud)

或使用TOEPLITZFLIPLR功能:

a = toeplitz(fliplr(1:4),4:7);
a = toeplitz(4:-1:1,4:7);       %# Without fliplr
Run Code Online (Sandbox Code Playgroud)

您还可以将这些解决方案推广到任意向量,其中您已选择中断向量的中心点.例如:

>> vec = [6 3 45 1 1 2];  %# A sample vector
>> centerIndex = 3;
>> a = flipud(hankel(vec(1:centerIndex),vec(centerIndex:end)))

a =

    45     1     1     2
     3    45     1     1
     6     3    45     1
Run Code Online (Sandbox Code Playgroud)

上面的示例将向量的前三个元素放在第一列上,向后放置向量的第四个元素沿第一行运行.