MATLAB ユーザーコミュニティー

MATLAB & Simulink ユーザーコミュニティー向け日本語ブログ

MATLAB チョットデキル 人たちが教えるイチオシ機能

 

初めて知ったときにそうだよ、コレだよコレってなりました。
~テツ高垣 (@Urahustet) さんのコメントより~

 

お久しぶりです、井上 @ 引き続き在宅勤務です。
Twitter でも「MATLAB インストールした?」「MATLAB ってなんぞ?」「MATLAB 完全に理解した」という声が聞こえてくる季節。この春から MATLAB を使うことになった新大学生、新社会人の皆様にイチオシ機能を届けたい。それも MATLAB チョットデキル 友達が使っている機能を。
ということで Twitter で募集をしたところ、フォロワーの皆様から沢山紹介いただいたので一部だけですが紹介します。コメントくださった皆様、ありがとうございました!全部取り上げたかったのですが、残念ながらここでは一部だけの紹介になります。こちら(Twitter: MATLAB チョットデキル 人たちのイチオシ機能)でもまとめておりますので是非ご覧ください。

目次

  1. この関数 is 何?:doc/edit
  2. プロット操作を手軽に:linkaxes, subplot/tiledlayout
  3. 何かがおかしいこのコード ・・:profier, debug
  4. 各種ショートカットでかっこよく
  5. 番外編:MATLAB Coder で処理を高速化

 

1. この関数 is 何?:doc/edit

doc はおそらく自分も普段一番使う機会の多い関数。関数の詳細をすべて覚えていられないので、コードを書く時は常にドキュメンテーションページで確認しながら。
例えば「plot でこれできるんだっけ・・?」な時は
doc plot
「writetable の出力設定何があったかな・・」な時は迷わず
doc writetable
です。このあと登場する関数も是非 doc で確認してみてください。
多少上級者向きかと思いますが doc の他に edit も欠かせません。この関数中で何をやってるんだ・・?と気になったときは edit コマンドで関数を開いてみてください。ちょっとかゆいところに手が届かない、というときに役立つかもしれません(参考:【MATLAB】polyfit 関数に手を加えて実行速度アップ(注:リスクあり)
コンパイルされていたりしてすべてが見える形で提供されてるわけではない点はご了承ください。

 

2. プロット操作を手軽に:linkaxes, subplot/tiledlayout

おそらくすべての MATLAB ユーザーがプロットを一度は作ることになる。そんなプロット操作を楽にする機能。プロットを1つの Figure に並べるのに使うのは以前から subplot ですね。
figure
subplot(1,2,1)
plot(rand(10,2))
subplot(1,2,2)
plot(rand(10,2))
そして R2019b で tiledlayout が登場しました。tiledlayout(2,1) のように分割数(縦に 2 つ、横に 1 つ)を決め打ちするのも OK ですし ‘flow’ で動的に追加していく形も可能で、自由度が増しています。’TileSpacing’ を ‘compact’ とすると、余白をきゅっと小さくすることもできます。
figure
tiledlayout(‘flow’,‘TileSpacing’,‘compact’)
nexttile
plot(rand(10,2))
nexttile
plot(rand(10,2))
さらに linkaxes ですが、これは複数のプロットを連携させるときに便利です。1 つのプロットの表示範囲を変更すると、リンクされた他のプロットも合わせて表示範囲が変わります。関連するデータ(例えば複数の時系列)をみていくときに便利ですね。
figure
tiledlayout(‘flow’,‘TileSpacing’,‘compact’)
ax1 = nexttile;
plot(rand(10,2))
ax2 = nexttile;
plot(rand(10,2))
linkaxes([ax1 ax2],‘xy’)
linkaxes.gif
リンクすべき座標軸のオブジェクト(以下では ax1 と ax2)を linkaxes で指定します。

copyline.gif
そして最後に、グラフの一部を別のグラフへコピーしたいな・・そんなときはこれ。再現性を考えるとコード側を変えた方がよいですが、ちょっと試してみるなら手軽でいいですね。

 

3. 何かがおかしいこのコード:profiler, debug

コードを書く上で欠かせないのがデバッグ機能。デバッグ機能といえば一番基本的なものはブレークポイントでしょう。
コード(スクリプト・関数)の横をクリックしてブレークポイントを設定しておくと、実行時にそこで一時停止し、その時点での変数が確認できるという優れもの。意図通りの処理になっているかを確認できますね。
breakpoint.gif
上級者向けになりますが、ブレークポイントの設定(dbstop)、次の行に移動(dbstep)、続きを実行(dbcont)など、ボタンクリックではなくコマンドでの実行で効率があがるかも。

profiler.PNG
書いたコードの処理が遅いかも?という時にはプロファイラーを是非試してみてください。どのコマンドが何回呼び出されて、処理に何秒かかっているかが一目瞭然。
profiler_example.PNG
ボトルネックになっている部分から改善するようにすれば、全体の速度アップを効率よく実現できます。

 

4. 各種ショートカットでかっこよく

何度も行うような作業はショートカットでやってしまうのがおススメです。中でもよく使うのがこれ。
動画(Ctrl+I:自動インデント Ctrl+D:選択した関数を開く Ctrl+R:コメント化 Ctrl+T:コメント解除)
例えば、特定の行を除いて実行してみるのときに Ctrl + T でコメント化して F5・・などで使います。
Untitled Project.gif
あとは、うっかりコードの実行をスタートしてしまった、急いで止めたい!そんな時は control + c ですね。

その外のショートカットの設定、カスタマイズに関する詳細はこちら:キーボード ショートカットのカスタマイズ
shortcutcustomize.PNG

 

6.【番外編】MATLAB Coder で処理を高速化

言われてみれば実行速度が気になるときに試してみる機能です。MATLAB Coder といえば MATLAB コードからの C/C++ コード生成を担う Toolbox ですが、生成した C/C++ コードからコンパイルして MATLAB で実行できる関数(MEX 関数)にするという機能もあります。C/C++ の実行速度の速さを MATLAB で実現できるイメージです。MEX 関数は、C/C++ を実際に触ることなく作ることができるのでかなりお手軽です。

すべての MATLAB 関数が MEX 化できる、というわけではない点は注意が必要ですが、既に紹介したプロファイラーを使って見つけたボトルネック部分を MEX 化してしまう、というのも 1 案ですね。包括ライセンスなどで使える環境にいらっしゃる場合は特に使わない理由はありません。詳細はこちら:MATLAB アルゴリズムの高速化

 

まとめ

MATLAB を使っている方にとっては「言われてみれば確かによく使っている・・」というものもあったかもしれません。他にもこんなおススメがあるよ!という方はコメントください。

使い始めて間もない方はまだピンとこない部分もあるかもしれませんが、知っておくだけでどこかで役に立つはず。ぜひ試してみてください。

いっちょしっかり学んでやるか、という方にはオンラインで受講できるチュートリアルもおススメです。

Campus-Wide License をご利用頂いている皆様には、この辺のオンライントレーニングもすべて無料で受け放題ですのので、いろいろつまみ食いする気持ちで試していただけたら嬉しいです。詳細:全学向け MATLAB トレーニング

|
  • print

Comments

To leave a comment, please click here to sign in to your MathWorks Account or create a new one.