考虑离散动力系统,其中x[0]=rand()
表示系统的初始条件。
我通过以下步骤生成了一个m乘n矩阵 - 生成m
个向量,其中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)
,但维度发生了变化。从数学上看,维度不应该改变。
答案 0 :(得分:4)
根据提供的论文(Yu等人的 Toeplitz结构混沌传感矩阵用于压缩传感),涉及两个混沌传感矩阵。让我们分别探讨它们。
明确指出,要创建这样的矩阵,您必须构建m
个独立信号(序列),其中m
个不同的首字母条件(在范围内)0; 1 [)然后连接这些信号行(即一个信号=一行)。这些信号中的每一个必须具有长度N
。这实际上是你的矩阵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
在 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
现在,要构建矩阵,您可以考虑:
x
中与 0 到 m-2 然后构建第一行(r
)和第一列(c
):
r=fliplr(x);
c=[x(end) x(1:m-1)];
请注意:在Matlab中索引从1开始,而不是从0开始(所以不是从 0 到 m-2 ,我们从 1 到 m-1 )。此外,end
表示给定数组中的最后一个元素。
现在通过查看toeplitz()
函数的帮助,明确指出可以通过指定第一行和第一列来构建非平方Toeplitz矩阵。因此,最后,您可以构建如下矩阵:
T=toeplitz(c,r);
如文章所述,这样的矩阵确实具有m*N
维。
即使作者同时称他们为Phi,他们实际上是两个独立的矩阵 他们不采用Beta-Like矩阵的Toeplitz(Toeplitz矩阵不是某种函数或算子),它们也不会将Beta-Like矩阵转换为Toeplitz矩阵。 /> 你首先有类Beta矩阵(即混沌传感矩阵),然后是Toeplitz- 结构混沌传感矩阵:这样的结构是Toeplitz矩阵的典型特征,是一个对角线常数结构(沿对角线的所有元素具有相同的值)。