2013-05-09 50 views
0

在MATLAB中,我有以下從腳本數據的輸出:MATLAB:情節與For循環固定變量

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會產生一個情節。

感謝

回答

1

循環升模擬可變變量)和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)]) 
+0

完美!!!!謝謝。 – user1608954 2013-05-09 22:04:15

+5

@ user1608954我強烈建議不要使用eval,而是調整你的腳本來製作一個單元矩陣A,這樣A {1} == A1等...使用eval就會打開自己的錯誤世界,很難調試,難以閱讀和難以維護。 – Dan 2013-05-09 22:26:08

+0

+1表示使用figure(),但其他兩個答案都忘記包含它。 – Dan 2013-05-10 06:37:50

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

5

我建議你改變輸出這些變量的腳本,而不是把它們粘在單元格數組或結構體中。

如果如果只有3這是不可能的,那麼我建議你把它們粘在單元陣列手動即A{1} = A1; A{2} = A2; A{3} = A3

只有當你真的真的不能做任何的那些,你應該考慮使用eval

for ii = 1:n 
    eval(['plot(A', num2str(ii), ')']); 
end 

調試我建議更換evaldisp,以確保您使用生成eval(WIL正確的代碼