在matlab中循环变量列表

时间:2016-05-04 09:59:22

标签: matlab

我有一个名为Reach1到Reach7

的变量列表(不同大小的数字矩阵)

我想将它们全部绘制成一个图中的子图。

需要循环遍历每个变量,如下所示:

names = {'Reach1' 'Reach2' 'Reach3' 'Reach4' 'Reach5' 'Reach6' 'Reach7'};
for index = 1:7
    subplot(3,3,index)
    plot(names(index)(:,1),names(index)(:,2));hold on;
    plot(names(index)(:,5),names(index)(:,6));
    plot(names(index)(:,9),names(index)(:,10));hold off;
end

在matlab中有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您无法访问names(index),因为它是cell数组,而names{index}可以访问这些数据。

如果您想通过调用Reach1(1,3)来访问变量names{1}(1,3),那么您将失败,因为Matlab会(尝试)将a作为char数组的元素返回。这种方法可以通过eval实现,但 NOT 可以做到这一点!它有很多drawbacks并没有任何好处。

您可以使用Matlabs功能简化代码,这些功能并不明显但很有用。

假设我们在一个单元格数组Reaches={<Reach1>;<Reach2>;...}中包含所有矩阵:

Reaches={rand(4,12);rand(6,12);rand(8,12);rand(2,12);rand(9,12)}; %declare dummy variables
counter=0;

for Reach=Reaches
  counter=counter+1;
  subplot(3,3,counter);
  plot(Reach(:,[1,5,9]),Reach(:,2,6,10));
end

此代码受益于:

  • for能够遍历数组元素。
  • plot能够处理数组。
  • (高级)数组indexing

在此示例中,相应的元素names{ii}传递给Reach变量,计数器counter已提前,plot由矩阵包含第1,5和9列和第2列支持,6和10分别为x和y值。