Вы можете просмотреть
[1 2 5 6 9 10 13 14 17 18 ....]
как следующую сумму:
[0 1 0 1 0 1 0 1 ...] + [1 1 5 5 9 9 13 13 ...]
= [0 1 0 1 0 1 0 1 ...] + [0 0 4 4 8 8 12 12 ...] + [1 1 1 1 1 1 1 1 ...]
= [0 1 0 1 0 1 0 1 ...] + 4*[0 0 1 1 2 2 3 3 ...] + [1 1 1 1 1 1 1 1 ...]
Каждый из этих кусков должен быть проще для создания:
[0 1 0 1 0 1 0 1 ...] = mod(0:1:9, 2)
[0 0 1 1 2 2 3 3 ...] = floor(0.5 * (0:1:9))
[1 1 1 1 1 1 1 1 ...] = ones(1, 10)
Помещение вместе:
>> mod(0:1:9, 2) + 4*floor(0.5*(0:1:9)) + ones(1,10)
ans =
1 2 5 6 9 10 13 14 17 18
Но, перейдя ко второй части вашего вопроса, есть более простой способ решить его, если ваша цель - вставить два ноля после каждых двух элементов. Начните с изменения формы вашего длинного массива в виде матрицы размером 2 на (n / 2):
>> y = reshape(x, 2, 6)
y =
-0.41416 -3.39666 0.83481 -0.75471 -0.60284 -1.10128
0.37756 -0.42352 -0.66782 0.54008 -1.43141 -0.18244
Теперь вставьте две строки нулей:
>> z = [y; zeros(2, 6)]
z
-0.41416 -3.39666 0.83481 -0.75471 -0.60284 -1.10128
0.37756 -0.42352 -0.66782 0.54008 -1.43141 -0.18244
0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
Затем измените форму обратно на 1-мерный массив:
>> w = reshape(z, 1, 24)
w =
Columns 1 through 7:
-0.41416 0.37756 0.00000 0.00000 -3.39666 -0.42352 0.00000
Columns 8 through 14:
0.00000 0.83481 -0.66782 0.00000 0.00000 -0.75471 0.54008
Columns 15 through 21:
0.00000 0.00000 -0.60284 -1.43141 0.00000 0.00000 -1.10128
Columns 22 through 24:
-0.18244 0.00000 0.00000