如何有效地制作Toeplitz矩阵MATLAB

时间:2019-03-19 22:19:32

标签: matlab matrix toeplitz

假设我有一个向量x和2个常量,其初始化如下:

x = [ones(1,21) zeros(1,79)]; %step of 100 components
p = 2; q = 0;

现在,我要构建此矩阵:

enter image description here

但是在这种情况下,例如x(q-1)= x(-1)不存在,所以我希望它为0,我想知道是否有办法用最少的行数代码。请注意,矩阵可以用函数toeplitz()编写,但是我不知道如何用零代替向量x的不存在位置。

我希望有人能帮助我。谢谢您的回答。

1 个答案:

答案 0 :(得分:2)

您需要注意从零开始或从一开始的索引。

在您的问题中,您指出负索引无效-在MATLAB中,索引0也无效。下面的代码假定您的x(q)如前所述是从零开始的,但是我进行了+1转换。如果q+p-1numel(x)附近,请注意这一点。

x = [ones(1,21) zeros(1,79)]; %step of 100 components
p = 2; q = 0;

% Set up indexing matrix using implicit expansion (R2016b or newer)
m = ( q:-1:q-p+1 ) + ( 0:1:q+p-1 ).';
% Convert from 0-based to 1-based for MATLAB
m = m + 1;
% Set up output matrix, defaulting to zero
M = zeros( size( m ) );
% Put elements where 'm' is valid from 'x' into output 'M'
M( m > 0 ) = x( m( m > 0 ) );

输出为(q+p) * p矩阵。