定期从矢量构造矩阵

nam*_*nam 1 matlab matrix vectorization

我有一个b包含30个条目的向量.

我想避免使用for循环来构造这样的矩阵:

在此输入图像描述

其中b_ii向量的第n个条目b.

例如,定义向量

b = [2 6 -7 3 1 -4 -1  1 11  8 -4  9  2  0  2 -1  0  4  4  4  2 -4  2  5  1 3  2 -1  1 -2]
Run Code Online (Sandbox Code Playgroud)

我尝试使用for循环的地方是:

A = zeros(5,5);
for i = 1:5
    A(i) = b(i+5);
    A(i+5) = b(i+6);
    A(i+10) = b(i+7);
    A(i+15) = b(i+8);
    A(i+20) = b(i+9);
end
Run Code Online (Sandbox Code Playgroud)

结果是

在此输入图像描述

有没有更快更通用的方法来生成这个矩阵?

Adi*_*iel 6

你可以使用toeplitz:

A=fliplr(toeplitz(b(10:14),b(10:-1:6))

A =

-4    -1     1    11     8
-1     1    11     8    -4
 1    11     8    -4     9
11     8    -4     9     2
 8    -4     9     2     0
Run Code Online (Sandbox Code Playgroud)

顺便说一句,这里的索引是你的例子中的6到14,而不像图中那样是7到15.您可以将其更改为您的首选目的.

  • @Wolfie嗯......这是黑魔法.:)方法非常简单 - 第一个向量是第一列,第二个向量是第一个向量.所有其余的都是对角线副本...... (2认同)