2015-06-21 4 views
2

Я пытаюсь создать сценарий для решения моей проблемы, но я застрял в одном месте. Так я импортировал файл .txt с размером матрицы 4x1 (упрощенно Приведем пример, в моем случае это может быть 1209x1 матрица), которая содержит некоторую координату X. И это выглядит следующим образом:Периодическая структура в matlab

0 
1 
2 
3 

Это координаты для одного период, и мне нужно получить один столбец для разного количества периодов N. Каждый период одинаков и длина = L

Таким образом, вы можете сделать это вручную с помощью этого сценария, например, для N = 3 периода:

X=[X; X+L; X+2*L]; 

так, например, если L = 3

затем я получу

0 
1 
2 
3 
3 
4 
5 
6 
6 
7 
8 
9 

это работает хорошо, но это не является эффективным в том случае, если мне нужно работать с числом периодов, скажем, N = 1000, или, если мне нужно быстро изменить их количество. Любое решение параметризовать эту операцию, поэтому я могу просто поместить число для N и получить X для N периодов?

Спасибо и наилучшими пожеланиями

+0

описания моей проблемы было немного неправильно (о массивах), поэтому я отредактировал первое сообщение – topkek1

ответ

0

У меня нет MATLAB на этой машине, так что я не могу проверить, но самый простой реализации будет что-то вроде:

n = 1000; 
L = 3; 
nvalues = length(X); % Assuming X is your initial vector 

newx = zeros(n*nvalues, 1); % Preallocate new array 
for ii = 0:(n-1) 
    startidx = (nvalues*ii) + 1; 
    endidx = nvalues*(ii+1); 

    newx(startidx:endidx) = X + ii*L 
end 
+0

спасибо большого, работает отлично! – topkek1

0

Вы можете использовать bsxfun для создания X, X+L, X+2*L ... и затем изменить его к вектору

>> F=bsxfun(@plus, X, (0:(N-1))*L) 
F = 
    0  3  6 
    1  4  7 
    2  5  8 
    3  6  9 
>> X=F(:) 
X = 
    0 
    1 
    2 
    3 
    3 
    4 
    5 
    6 
    6 
    7 
    8 
    9 

или в более краткая форма:

>> X=reshape(bsxfun(@plus, X, (0:(N-1))*L), [], 1) 
X = 
    0 
    1 
    2 
    3 
    3 
    4 
    5 
    6 
    6 
    7 
    8 
    9 
+0

спасибо! Я только начал изучать Matlab, и вся эта информация очень полезна. – topkek1

Смежные вопросы