Matlab:如何将矩阵转换为 Toeplitz 矩阵

Matlab: How to convert a matrix into a Toeplitz matrix

考虑离散动力系统,其中 x[0]=rand() 表示系统的初始条件。

我通过以下步骤生成了一个 m x n 矩阵——生成 m 个具有 m 个不同初始条件的向量,每个向量的维度为 N(N 表示样本数或元素)。该矩阵称为 R。如何使用 R 创建 Toeplitz 矩阵 T?吨 数学上,

 R =               [ x_0[0], ....,x_0[n-1];
                    ...,        ,.....;
                    x_m[0],.....,x_m[n-1]]

托普利茨矩阵 T =

                        x[n-1], x[n-2],....,x[0];
                        x[0], x[n-1],....,x[1];
                          :    :           :
                         x[m-2],x[m-3]....,x[m-1]

我尝试使用 toeplitz(R) 但维度发生了变化。从数学上看,尺寸应该没有变化。

根据提供的论文(用于压缩传感的 Toeplitz 结构化混沌传感矩阵,作者 Yu 等人)涉及两个混沌传感矩阵。让我们分别探讨一下。

  1. 混沌感知矩阵(第A节)

明确指出,要创建这样的矩阵,您必须构建 m 个具有 m 不同初始条件(在范围 ]0;1[ 内)的独立信号(序列),然后将此类连接起来每行的信号(即,一个信号 = 一行)。这些信号中的每一个都必须具有长度 N。这实际上是您的矩阵 R,它按原样正确评估。虽然我想建议代码改进:而不是构建一个列然后转置矩阵你可以直接构建每行这样的矩阵:

R=zeros(m,N);
R(:,1)=rand(m,1); %build the first column with m initial conditions

请注意:运行 randn() 您的 select 值具有高斯(正态)分布,这些值可能不在范围内]0;1[ 如论文中所述(等式 9 正下方)。相反,通过使用 rand(),您可以在该范围内获取均匀分布的值。

之后,您可以根据for循环分别构建每一行:

for i=1:m
    for j=2:N %skip first column
        R(i,j)=4*R(i,j-1)*(1-R(i,j-1));
        R(i,j)=R(i,j)-0.5;
    end
end
  1. 托普利茨混沌感知矩阵(第 B 部分)

B 节开头明确指出,要构建 Toeplitz 矩阵,您应该考虑具有给定的单一初始条件的单个序列 x .那么让我们构建这样的序列:

x=rand();
for j=2:N %skip first element
   x(j)=4*x(j-1)*(1-x(j-1));  
   x(j)=x(j)-0.5;
end

现在,构建矩阵你可以考虑:

  • 第一行怎么样?好吧,它看起来像序列本身,但是翻转了(即不是从 0n-1,而是从 n-10)
  • 第一列是什么样子的?它是 x 中的最后一项,与 0m-2
  • 范围内的元素连接

然后让我们构建第一行 (r) 和第一列 (c):

r=fliplr(x);
c=[x(end) x(1:m-1)];

请注意:在 Matlab 中,索引从 1 开始,而不是从 0(所以不是从 0m-2,我们从1m-1)。另外 end 表示给定数组中的最后一个元素。

现在查看toeplitz()函数的帮助,明确说明可以通过指定第一行第一列来构建非平方托普利茨矩阵。因此,最后,您可以构建这样的矩阵:

T=toeplitz(c,r);

这样的矩阵确实有维度 m*N,正如论文中所报道的那样。

尽管作者都称它们为\Phi,但它们实际上是两个独立的矩阵。
他们取Beta-Like Matrix的Toeplitz(Toeplitz矩阵不是某种函数或运算符),他们也不将Beta-Like Matrix转换为Toeplitz-matrix .
你先有 Beta-Like Matrix(即 Chaotic Sensing Matrix),然后是 Toeplitz-structured Chaotic Sensing Matrix:这样的 structure 是Toeplitz 矩阵的典型特征,即对角线常数结构(沿对角线的所有元素都具有相同的值)。