MATLABでevalを用いる(sprintfを用いる)
先輩にevalを用いるとコードを圧縮できると聞いてメモ。
ざっくり言うと eval(文字列) と書くと コード上にその文字列をコマンドとして実行したのと同じ結果を出すということらしい。
これだけ聞くと??って感じであるが,例えば次のように使う。
eval(['A', int2str(n),' = magic(n)'])
つまり,
A1=hoge(1);
A2=hoge(2);
...
とコードを書くのが面倒なので上の様にfor文の様に書かせることが出来るのだ。
つまりfuga1,fuga2...といった連番の処理をコードに書かせることが出来るといった感じか。
なるほど便利かと思いきや,MATLABではこのやり方を推奨していない。
どうせならfuga1~といったまどろっこしい書き方ではなくfugaの中に配列として入れてしまえばいいというわけだ。
ファイルを連番で保存するときも
eval(['save myfile',int2str(n),'.mat'])
ではなく
currentFile = sprintf('myfile%d.mat',n); save(currentFile,'randomData')
と書いてくれと書いてあったのでsprintfを使うようにしますか。
ここまで書いておいてなんだが,ぶっちゃけ
しばらくはお世話になることはないと思う