2014-12-31 25 views
0

在MATLAB中有一個方法來定義一個變量說runningValue並陸續將值壓它的時候一個未知的數字?值壓到矢量控制迴路中

我一直在做的是這樣的:

runningValue = 0; 
for j=1:length(someVector) 
    ... 
    runningValue(end+1) = (some value); 
    ... 
endfor 

但是,這迫使領先的0。我知道,一切完成後,我可以只是把Ĵ(1)= [];但我想知道是否有更優雅的方式來做到這一點。

請注意,變量的長度運行值變量不是先驗已知的;特別是,我們不填充長度(someVector)元素,指的是上面的僞碼以及Ĵ指數是沒有用的。

+6

'runningValue = [];'也許用於初始化? – Divakar

+0

不知道你能做到 - 謝謝! – Sargera

回答

1

除了初始化runningValue空,你不妨試試減少appendition的數量,這是一個O(n)的操作。與其在每個循環中追加一個元素,您可以在數組已滿時將其大小加倍。這樣一來,你從n個減少appendition的數量的log(n):

runningValue = []; 
len = 0; 
for j = 1:n 
    if (j > len) 
    runningValue = [runningValue zeros(size(runningValue))]; 
    len = length(runningValue); 
    end 
    runningValue(j) = (some value); 
end 
runningValue(j+1:len) = []; % If you need to remove the extra zeros 
0

您可以使用現有的矢量加上另一元素簡單地構建新的載體:

runningValue = []; 
for j=1:5 
    runningValue = [runningValue i]; % i can be the element you want to append to the vector 
end 

此代碼將輸出:

runningValue = 

    1 2 3 4 5