Matlab:如何将矩阵转换为托普利茨矩阵

3

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

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

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

Toeplitz矩阵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)进行工作,但维度发生了变化。从数学上看,维度不应该改变。

首先,您并没有使用m个不同的初始条件。 值x(1)永远不会改变。 每个for循环迭代都将从完全相同的值开始。 - AlessioX
@Alessiox:抱歉,那是个打错字。我已经修正了。 - Sm1
你应该重新定义你的问题。目前你的问题描述不是很清楚。矩阵R基本上包含了所有长度为Nm个序列/信号。因此,在描述R时,你正确地使用了索引n(离散时间)和m(序列索引)。但在T中,你把事情搞混了。 - AlessioX
感谢您的帮助和建议。我不太确定我是否正确理解了托普利茨矩阵的结构。这个问题基于题为“用于压缩感知的托普利茨结构混沌感知矩阵”的论文。下载链接是https://hal.archives-ouvertes.fr/inria-00530050/document。 - Sm1
B部分,第4页包含Toeplitz矩阵。您能否请看一下?在我的代码中,我已经对从离散动力系统生成的R进行了转置,该系统是混沌映射x,该矩阵的维数为N乘以m,其中m个不同的初始条件用于生成长度为N的m个不同时间序列/信号。在论文中,这个矩阵被表示为从混沌映射获得的phi,并且在第II节A节下的Eq(9)之后,phi是m乘以N。然后作者取phi的Toeplitz,在B部分给出。 - Sm1
1个回答

4
根据Yu等人提供的文章(Toeplitz结构混沌感知矩阵用于压缩感知),涉及到两个混沌感知矩阵。让我们分别探讨它们。
1. 混沌感知矩阵(A节)
明确指出要创建这样的矩阵,您必须建立 m 个独立的信号(序列),每个序列都需要具有 N 的长度,并使用 m 个不同的初始条件 (在]0;1[范围内),然后将这些信号按行连接在一起(即,一个信号=一行)。这实际上就是您的矩阵R,其正确性得到了正确评估。虽然我想建议一种代码改进方法:直接按行构建此类矩阵,而不是构建列然后转置矩阵。
R=zeros(m,N);
R(:,1)=rand(m,1); %build the first column with m initial conditions

请注意:通过运行randn()函数,您会选择具有高斯(正态)分布的值,这些值可能不在论文中所述的范围] 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. Toeplitz混沌感知矩阵(第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

现在,要构建矩阵,您可以考虑以下几点:
  • 第一行是什么样的?它看起来像序列本身,但是翻转了(即从n-10而不是从0n-1
  • 第一列是什么样的?它是x的最后一个项目与范围0m-2中的元素连接而成
让我们构建第一行(r)和第一列(c):
r=fliplr(x);
c=[x(end) x(1:m-1)];

请注意:在Matlab中,索引从1开始,而不是从0开始(因此,我们从1到m-1而不是从0到m-2)。另外,end表示给定数组的最后一个元素。 现在通过查看toeplitz()函数的帮助,可以清楚地说明您可以通过指定第一行和第一列来构建非平方Toeplitz矩阵。因此,最终,您可以构建这样的矩阵:
T=toeplitz(c,r);

这样的矩阵确实具有m*N的尺寸,正如论文中所述。
尽管作者都称其为\Phi,但它们实际上是两个不同的矩阵。
它们没有对类似Beta的矩阵进行Toeplitz变换(Toeplitz矩阵不是某种函数或运算符),也没有将其转化为Toeplitz矩阵。
首先是Beta-Like矩阵(即混沌感知矩阵),然后是Toeplitz-structured混沌感知矩阵:这种结构通常用于Toeplitz矩阵,即对角线恒定结构(沿对角线的所有元素具有相同的值)。

非常感谢您抽出时间和精力阅读论文。您详细的解释不仅帮助我们清除了实现部分,还帮助我们理解了论文中的技术细节。谢谢! - Sm1
再次你好。我注意到矩阵R和x(R(i,j)=4R(i,j-1)(1-R(i,j-1));)包含超出范围[0,1]的元素。理论上,混沌映射包含此范围内的所有值。但是模拟却给出了不在此范围内的元素。您有什么想法为什么会发生这种情况以及我该怎么做吗?谢谢。 - Sm1
1
随着 r 逐渐接近4,Logistic 映射将变成一个越来越混沌的系统(行为),因此某些值离开区间 [0;1] 并发散是正常的。 - AlessioX

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接