#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);