課題
- Workspace(ワークスペース)に「ID1, ID2,・・・」といった連番の変数がある.
- これらをfor文でplotしていきたい.
解決方法
- 連番IDの部分を「plot(ID+'i')」i=1,2,・・のイメージで,forループでplotしていく.
- ID+'i'の部分を,eval(), strcat(), num2str()を使って記述する.
使用Matlab関数
以下のようなデータがWorkspaceにあるとします.
- ID1, ID2,・・・,ID9 (各々はベクトルデータ)
これを例えばsubplot()で3×3で9つのグラフを描く場合,以下ですみます.
for i=1:1:10
subplot(3,3,i)
plot(ID,eval(strcat('ID',num2str(i))));
end
ちょっと詳しくみると
num2str(i)
これでfor文中の数字iをstring型に変換し
strcat('ID',num2str(i)))
により,「string型のID+string型のi」を行っています.つまり,「IDi」という形にしています(※).
そして,
eval(strcat('ID',num2str(i))))
により,string型の変数を用いて,Workspace内のベクトル変数を呼び出します.
※ここで間違いやすいのが,例えばi=1のときに「ID1」となるが,これは文字的に同じなだけでWorkspace内のID1とは紐付いていません.