#matlab #for-loop
Вопрос:
Я использую функцию цикла for в Matlab для отображения моих значений в строке, подобной этой
[4;0;5;0;6;0;7;0;8;0;9;0;3;0;6];
, но с помощью этого кода:
A = [4;5;6;7;8;9;3;6];
B = zeros;
C=height(A);
D=15;
for l = 1:2:D
for k = 1:C
B(l,1)=A(k,1);
end
end
в строке отображаются только последние значения, например:
[6;0;6;0;6;0;6;0;6;0;6;0;6;0;6]
Для этого примера я использую только целые числа, но реальное уравнение намного сложнее, и я думаю, что мне действительно нужно использовать функцию цикла.
Спасибо вам за вашу помощь.
Комментарии:
1. Вы просто хотите вставить нули между каждым значением?
Ответ №1:
Когда ты бежишь
for l = 1:2:D
for k = 1:C
B(l,1)=A(k,1);
вы записываете значение в l
-ю запись вектора B
, а затем перезаписываете C-1
время этой записи другими значениями (последним из которых является A(end)
). Основная проблема с вашим подходом заключается в том, что вам не нужны два цикла, так как нет ортогональных измерений, которые нужно пройти; вы могли бы использовать вместо этого:
A = [4;5;6;7;8;9;3;6];
C = size(A,1);
B = zeros( 2*C-1, 1 );
for l=1:C
B( 2*l-1, 1 )=A(l,1);
end
где for
цикл может быть полностью отброшен в пользу векторизованной операции:
B(1:2:end,1) = A(:,1);
Если у вас установлен набор инструментов обработки сигналов, вы можете альтернативно использовать эту upsample()
функцию, особенно если начальные или конечные нули в результате не являются проблемой.