You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matlab技术问询:输入翻转Toeplitz矩阵及向量生成指定填充矩阵

问题1:如何在Matlab中输入翻转的Toeplitz矩阵?

Toeplitz矩阵的核心特征是沿主对角线元素相等,“翻转”通常对应三种场景,以下是简洁实现方式:

  • 行翻转的Toeplitz矩阵:生成标准Toeplitz矩阵后,沿行维度翻转

    c = [1,2,3]; % 矩阵第一列
    r = [1,4,5,6]; % 矩阵第一行
    flipped_row_toeplitz = flip(toeplitz(c, r), 1);
    
  • 列翻转的Toeplitz矩阵:生成标准Toeplitz矩阵后,沿列维度翻转

    flipped_col_toeplitz = flip(toeplitz(c, r), 2);
    
  • 翻转结构的Toeplitz矩阵(第一行为原第一行的翻转):直接将第一行参数传入flip构造

    flipped_struct_toeplitz = toeplitz(c, flip(r));
    

若你需要的是反对角线对称的矩阵(每行左移/右移的结构),这其实是Hankel矩阵,直接使用hankel函数更简洁,无需结合Toeplitz翻转。

问题2:基于向量生成指定填充矩阵的简洁方法

给定向量a = [4, 2, 5, 6],目标矩阵是每行左移一位、末尾填充指定值的结构,这属于Hankel矩阵的变形,无需繁琐的flip+toeplitz组合,以下两种简洁实现:

方法1:利用hankel函数

直接构造扩展向量后生成Hankel矩阵,一步到位:

a = [4, 2, 5, 6];
fill_val = 1; % 填充值,后续可替换为0等
rows = 3; % 目标矩阵行数

% 构造扩展向量,原向量后补足够数量的填充值
ext_a = [a, fill_val * ones(1, rows - 1)];
% 生成Hankel矩阵,取前rows行、原向量长度的列
A = hankel(a(1:rows), ext_a(1:length(a)))

运行结果:

A =
     4     2     5     6
     2     5     6     1
     5     6     1     1

方法2:矢量化下标生成(无额外依赖)

通过索引计算直接生成矩阵,灵活性更强:

a = [4, 2, 5, 6];
fill_val = 1;
rows = 3;
cols = length(a);

% 生成所有元素的索引,超过原向量长度则指向填充值
idx = min((1:rows)' + (1:cols) - 1, length(a) + rows - 1);
ext_a = [a, fill_val * ones(1, rows - 1)];
A = ext_a(idx)

内容的提问来源于stack exchange,提问作者Ryan Hubscher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 06:47:47