для цикла отображается только последнее значение итераций

#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() функцию, особенно если начальные или конечные нули в результате не являются проблемой.