2015-06-21 40 views
2

我試圖創建一個腳本來解決我的問題,但我被困在一個地方。matlab中的週期性結構

0 
1 
2 
3 

這是座標之一: 與其中包含了一些協調X.而且它看起來像這樣4X1大小的矩陣(簡化給我的情況下,它可能是1209x1矩陣爲例)因此,我已導入txt文件期間,我需要獲得一列不同數量的期間N。每個週期是相同的,並且lenght = 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創建XX+LX+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