ファイルの分け方

MATLABは実行後も途中で計算した変数の値などを保持しており、 clear コマンドなどで明確に消去したりMATLAB自体を終了しない限りは残り続ける。これをうまく利用して、研究や解析の効率化に役立てることが出来る。

具体的には機能毎にファイルを分けて、途中途中で変数によって前の処理の結果を渡す。例えば、1. あるCSVファイルからデータを読み取り、2. それを解析して、3. 図を描画し、4. 画像とCSVで保存するという流れを作りたいときを考える。※コードは適当です。

%1 CSV読み取り
sig = readmatrix("foo.csv");

%2 解析
ars = ARS(sig, 'MaxPeriod', 100, 'MinPeriod', 10).exec();

%3 図の描画
fig1 = figure(1);
plot(ars.Ports, ars.Spctl);

%4 図の保存
saveas(fig1, "ars.jpg");
writematrix(ars.Spctl, "ars.csv");

これを上記のように書いたとき、%1〜%4をそれぞれ別々のファイルにして順番に実行しても正しく実行できる。(%1〜%3においてそれぞれ後に使うデータを変数にしているため。)

こうすることによって例えば、%2の解析の部分が誤っていた際に、%2のファイルだけ書き直し%1の実行を省略して%2から実行していけば良くなる。%1の実行にかかる時間を節約することが出来る。

小規模なシミュレーションや実験データであればさして問題ないが、非常に長い実験データとなるとCSVを読むだけでも膨大な時間がかかる。上のようなプログラムの整理はそんなときに役立つはずである。

ドキュメント生成

基本的には関数やクラスの下にコメントを書いておくだけで十分だと思う。

function fig = figsize(fig, x, y)
  % Figureウィンドウのサイズを変更します。
end

こう書いておくと、MATLAB上で help figsize と言うように冒頭に help をつけて呼び出すと上記のコメントが表示される。

ちゃんとしたドキュメントを整備したい場合、MATLABにはあまり選択肢がない。自分が試した中で一番良かったのが Sphinx である。Sphinx はもとはPython用のドキュメント生成ツールであるが、他言語でも使えるよう様々な拡張が公開されている。MATLAB用の拡張も公開されており、Sphinxの全ての機能に対応するわけではないものの、十分実用的なレベルだった。以下に設定例を載せる。

import os
import sys

# -- Project information -----------------------------------------------------
project = 'dev.rpaka.matlab-tools'
copyright = '2020-2021, Ritsuki KOKUBO'
author = 'Ritsuki KOKUBO'

# The full version, including alpha/beta/rc tags
release = '1.1.1'

# -- General configuration ---------------------------------------------------
extensions = [
    'sphinxcontrib.matlab', 'sphinx.ext.autodoc', 'sphinx.ext.autosummary'
]
matlab_src_dir = "/docs"
matlab_keep_package_prefix = False
autodoc_member_order = "bysource"

templates_path = ['_templates']

language = 'ja'

exclude_patterns = []

# -- Options for HTML output -------------------------------------------------
html_theme = 'python_docs_theme'
html_theme_options = {
    "root_name": "MATLAB",
    "root_url": "<https://jp.mathworks.com/help/?s_tid=hp_ff_l_doc>",
    "root_icon": "matlab.png"
}

html_static_path = ['_static']
html_js_files = ['main.js']
html_css_files = ['main.css']

master_doc = 'index'

例えば以下のようなページが生成される。

Untitled

rpaka 研究用MATLABライブラリ - dev.rpaka.matlab-tools 1.1.1 ドキュメント

言語機能

引数のパース