在MATLAB中,我有以下脚本输出数据:
A1 = [1 2;3 4]
A2 = [2 2; 4 5]
A3 = [3 5; 7 8]
我需要创建一个for循环来逐步执行每个变量和绘图。 类似的东西:
for i = 1:3
plot(A(i))
end
所以A1会产生一个情节。 A2将生成一个图。 A3将产生一个情节。
由于
答案 0 :(得分:5)
您可以使用eval
for ii = 1:3
cmd = sprintf('plot( A%d );', ii );
eval( cmd );
end
但是,建议不要使用eval
。最好的方法是,如果您可以更改生成A1
... A3
的代码,那么它可以创建单元格数组A{1}
,... A{3}
,甚至结构字段S.A1
,...,S.A3
。
答案 1 :(得分:5)
我建议您更改输出这些变量的脚本,而不是将它们粘贴在单元格数组或结构中。
如果那是不可能的,那么如果只有3个,我会建议你手动将它们粘在一个单元格数组中,即A{1} = A1; A{2} = A2; A{3} = A3
只有当你真的不能做到这两种情况时,你应该考虑使用eval
for ii = 1:n
eval(['plot(A', num2str(ii), ')']);
end
调试我建议将eval
替换为disp
以确保您生成正确的代码
答案 2 :(得分:1)
循环使用eval
(将模拟变量变量)和figure
(将为每个A创建一个数字):
A1 = [1 2;3 4];
A2 = [2 2; 4 5];
A3 = [3 5; 7 8];
for i = 1:3
figure(i);
eval(['plot(A' num2str(i) ');'])
end
如果您有许多因为您可能想要自动保存图表,只需在循环中的eval行后面插入以下行:
print('-dpng','-r100',['A' int2str(i)])