Записать матрицу с данными без цикла, Matlab
Есть единичная функция задана на интервале, например:
t = 0 : 1000;
k = 3;
g1 = 1.*(t >= 40*(k-1) & t <40*(k));
Мне необходимо сделать перебор по kи записать в массив. Через цикл никаких проблем нет, все хорошо, например
for k = 1:5
g(:,k) = 1.*(t >= 40*(k-1) & t < 40*(k));
end
Однако если пытаюсь сделать без цикла,
k = 1:5;
g1 = [];
g1(:,k) = 1.*(t >= 40*(k-1) & t < 40*(k));
Выдает ошибку Matrix dimensions must agree. Я понимаю что значит эта ошибка, однако не понимаю или не знаю как это сделать без цикла, и можно ли в целом это сделать без цикла. С одномерным массивом проблем не возникает при уходов от циклов. Или подскажите где глянуть. Спасибо.
Ответы (2 шт):
Автор решения: Валера Слободянюк
→ Ссылка
Нашел решение следующим образом, может кому пригодится:
[t k] = meshgrid(0:300, 1:5);
kol_ot_sym = 40;
g1 = 1.*(t >= kol_ot_sym*(k-1) & t < kol_ot_sym*(k));
В целом решение меня устраивает, но может есть у кого-то еще варианты или замечания, буду рад увидеть. Спасибо.
Автор решения: Сергей Галкин
→ Ссылка
Можно ещё так:
t=0:500;
x = (cell2mat(arrayfun(@(z)rectpuls(t'-(2*z-1)*20,40),1:5,'UniformOutput',false)))';