matlabのGUIから解法される方法

matlabssh経由で使用するとGUIの表示が非常に遅い。Alt-tabでウィンドウの表示切り替えするとなると表示まで2秒くらい待たされる。ストレスフル。
ということでGUIを捨ててCUIで全て行うことにした。m-fileは元々vimで書いてたし。

  • matlab起動時に-nodisplayオプションをつけるとCUIで使用可能
    • なんとscreen上でmatlabが使える!超便利。
  • matlabシェル上で頭に!をつけるとshellコマンドが使用可能
    • matlab shell上でrmとかmkdirとか使えるわけだ。
    • m-fileにも書けるから便利。
    • m-fileにshellscriptが書けるわけだ。多分。
    • matlab(CUI)上でvimが起動できる。面白い。
  • CUIで画像保存はsaveas(plot(..略..), 'filename.jpg', 'jpg');こんな感じ。jpgなら。
    • plot関数が長いときはh = plot(...);と変数にでも入れる
  • matlab起動時に-rオプションで初回コマンドを指定できる
  • shell上で画像表示するにはxview, xliなど。
    • リモート上ではsshに-Xか-Yオプションが必要。

ということで

x=-pi:0.1:pi;
y=sin(x);
h=plot(x,y,'-');
saveas(h, 'hoge.jpg', 'jpg');
!xview hoge.jpg
exit

というm-file(PlotTest.mとする)書いて、
シェル上から

$ matlabr2007b -nodisplay -r PlotTest

てなかんじに実行すると良い感じ。


別にmatlab -nodisplayで起動しっ放しでいいじゃん、と初め思ったのけどダメだった。
おそらくmatlabのバグなのだろうけど、matlabr2007b起動してsaveasを複数回行うと、2回目以降の画像がやたら小さくなる。screenとかCUIとかは関係なかった。2009ではもう直っているだろうか。




GUIではなく、linux shell上で動くというのはとても大きなメリットだと感じている。
全てscreen上につっこめるわけだから。




追記:
上記スクリプトだとmatlab起動コストが気になる。そりゃそうか。