2013-05-18 95 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。除非你真的需要它们,否则不要使用它们。