2013-05-18 150 views
2

考慮動態創建和命名陣列

​​

基本上我想使得每次for循環從1運行至下標變化下面的代碼段2,3,...,100因此,實際上經過100次迭代後,我將擁有100個陣列,從Y1Y100

什麼可能是在MATLAB中實現這個最簡單的方法?

UPDATE

這是要運行15次

Y1 = 64; 
fft_x = 2 * abs(Y1(5)); 

爲了簡單起見我已採取恆定輸入。

現在我試圖使用小區是基於馬克的回答是:

Y1 = cell(15,1); 
fft_x = cell(15,1); 

for i = 1:15 
    Y1{i,1} = 64; 
    fft_x{i,1} = 2 * abs(Y1(5)); 
end 

我想我需要做一些改變abs()。請建議。

回答

1

在matlab中創建變量命名變量是不可能的。常見的解決方案是使用一個單元陣列爲Y:

Y=cell(100,1); 
for i =1:100 
    Y{i,1}= x(i:i+3); 
    i=i+3; 
end 

注意,for -loop內的線i=i+3沒有效果。你可以刪除它。

Y=cell(100,1); 
for i =1:100 
    Y{i,1}= x(i:i+3); 
end 
+0

感謝您的回答。你能建議基於我上面的更新。 – gpuguy

+0

索引單元格數組總是使用大括號'{}'完成。如果你改變'fft_x {i,1} = 2 * abs(Y1(5));''fft_x {i,1} = 2 * abs(Y1 {5});''我認爲它會起作用。 –

0

可以在matlab中創建變量命名的變量。如果你真的想這樣做這樣的事情:

for i = 1:4:100 
    eval(['Y', num2str((i+3)/4), '=x(i:i+3);']); 
end 

您組織的索引取決於你計劃使用當然x該怎麼辦...

0

是的,你可以動態命名變量。但是,這幾乎不是一個好主意,並且有更好/更安全/更快的替代方案,例如,如@Marc Claesen所展示的單元陣列。

看看assignin函數(和相關的eval)。你可以做什麼要求:

for i = 1:100 
    assignin('caller',['Y' int2str(i)],rand(1,i)) 
end 

另一個相關的功能是genvarname。除非你真的需要它們,否則不要使用它們。