Как построить матрицу теплица в MATLAB вручную

#matlab

#matlab

Вопрос:

Мне нужно построить матрицу теплица в MATLAB под названием H , где H имеет размер 256 x 256 , из вектора h размера 64 x 1 . Мне нужно заполнить матрицу H по l -й строке элемента H и p столбцам-го элемента, как показано ниже:

H(l,p) = h(l-p) if 0 <= (l-p) =< 64 . В противном случае, H(l,p)=0;

Я создал код, как показано ниже:

 h = randn(64,1); 

H = zeros(256,256); 
for l= 1:256
    for p = 1 : 256 
        if (l-p <= 64 amp;amp; l-p >= 0)  
            H(l,p) = h(l-p); 
        end 
    end 
end

  
  

Но, я думаю, что в коде есть ошибка, поскольку это не дает мне ожидаемых результатов.

Как мне получить матрицу теплица?

Ответ №1:

Возникает проблема для l-p=0 , потому что h(0) это вызвало бы нулевой элемент h , а поскольку MATLAB использует индексацию на основе 1, это привело бы к сбою. Просто удалите знак равенства в проверке:

 h = randn(64,1); 

H = zeros(256,256); 
for l= 1:256
    for p = 1 : 256 
        if (l-p <= 64 amp;amp; l-p > 0)  % Removed the = sign
            H(l,p) = h(l-p); 
        end 
    end 
end
  

Ответ №2:

Вы можете просто использовать toeplitz :

 H = toeplitz(h_extended)
  

Где вы расширили h от размера 64 с 0 до размера 256.

Комментарии:

1. Разумное решение, конечно, но в OP буквально указано в их названии «Как построить матрицу теплица вручную » (курсив мой). Я предполагаю, что OP должен уточнить, достаточно ли toeplitz ручного управления или нет…

Ответ №3:

Вот ручной способ, который использует векторизацию с неявным расширением вместо циклов:

 t = 1:numel(h);
H = h(abs(t-t.') 1);