请教如何用一维数据构造hankel 矩阵

请教如何用一维数据构造hankel 矩阵
请教如何用一维数据构造hankel 矩阵
请教如何用一维数据构造hankel 矩阵
img

来一点骚操作:

% m行n列
m=3;
n=5;

X=1:(m+n-1); % 假设这是一维数组长度为m+n-1

kankelMat=zeros(m,n); % 先初始化一个m行n列数组

% 依据单变量索引将数字放到相应的位置
k=0:m*n-1;
kankelMat(k+1)=X(mod(k,m)+1+floor(k./m));

disp(kankelMat)

运行结果:
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7

首先可以直接看矩阵下标规律,很显然

for i = 1 : m
  for j = 1 : n
    a(i, j) = x(i + j - 1);
  end
end

如果从一维考虑,这个问题搞清楚matlab矩阵的索引方式就可以解决,matlab矩阵按列优先索引,一个 m x n 矩阵A的第 (i, j) 个元素的索引为 (j - 1) * m + i,再根据你设定的矩阵中的元素找下标规律,发现a_{(j - 1) * m + i} = x_{i + j - 1},通过此式可以写代码:

for i = 1 : m
  for j = 1 : n
    a((j - 1) * m + i) = x(i + j - 1);
  end
end

也可以进一步推导,与上述回答一致,x(i + j - 1) = A(i, j) = A((j - 1) * m + i) = A(k),通过k = (j - 1) * m + i,可以得出 i + j - 1 = (k-1) % m + (k - 1) / m + 1,其中 % 与 / 分别表示求余数与求商符号,matlab代码为:

k = 1 : n * m
a(k) = x(mod(k - 1, m) + floor((k - 1) / m)) + 1;

楼主你会了吗?可以请教下吗