めっくろぐ

自分用のメモ書き

MATLABでの関数の活用法

mechlog.hateblo.jp


MATLABには様々なタイプの関数が用意されていますが,
特に無名関数などは,MathWorksドキュメンテーションを読んでも,使い道がピンと来ないと思います.
数値シミュレーション等における関数の活用法が,分かりやすくまとめられている資料があったので,紹介します.


www.slideshare.net


なお,以下の書籍の巻末にも,上のスライドと同様の内容が付録として収録されているうえ,
無名関数などを活用したカルマンフィルタのサンプルスクリプトが多数掲載されているので,併せて読むと勉強になります.

カルマンフィルタの基礎

カルマンフィルタの基礎

 

MATLAB 効率化のための関数化

r-dimension.xsrv.jp


他のプログラミング言語と同様,MATLABでもスクリプトを可能な限り関数化することによって,効率よくシミュレーションを行えます.

関数化することによるメリットとしては,

  • 可読性が高まる
  • 再利用しやすくなる
  • 処理速度の高速化に貢献する

といったことが挙げられます.


MATLABのプログ​ラミングにおいてどの​ように関数をコールす​れば高速化ができます​か?

jp.mathworks.com


MATLABで関数を作る方法は,3つ考えられるので,整理して紹介します.

1.関数毎に mファイルを作る

最も汎用性が高く,一般的な方法だと思われます.
しかし,一目でプログラムの全体像を把握することが難しく,
関数毎にファイルが増えてしまうため管理も面倒です.

jp.mathworks.com


2.スクリプト全てを関数化する

function [] = test_script()
% function1, function2 を含むメインの処理の記述
clear; close all;
A = function1(1.0, 2.0)
B = function2(1.5, 2.5)
end

function [a] = function1(b, c)
% 自作の関数 その1
a = b + c;
end

function [d] = function2(e, f)
% 自作の関数 その2
d = e * f;
end

上記の様に記述し,"test_script.m"という名前で保存すれば,
スクリプト内の全部分が関数となる1つのmファイルが出来上がります.
こうすることで,処理の高速化ができ,
mファイルも1つに集約でき管理しやすくなります.

しかし,メイン部分まで関数にすることで,ワークスペースには変数が残らないようになります.
そのため,変数の状況を確認しながらスクリプトを修正していく,という書き方はできません.


3.スクリプトに関数を含める

% function1, function2 を含むメインの処理の記述
clear; close all;
A = function1(1.0, 2.0)
B = function2(1.5, 2.5)

function [a] = function1(b, c)
% 自作の関数 その1
a = b + c;
end

function [d] = function2(e, f)
% 自作の関数 その2
d = e * f;
end

R2016bから導入された機能です.

自作の関数を,スクリプト内で見渡すことができるうえ,
メイン部分の変数についてはワークスペースに保存されるため,データの様子を見ながらスクリプトを書き進めることができます.
新しい環境が使える方には,大変便利なのでおすすめです.
古い環境で実行しなければならないときでも,メイン部分もfunctionになるように数行書き足すだけ,手法2.と同じように扱えるので,支障ありません.


jp.mathworks.com


最新 使える!MATLAB 第2版 (KS理工学専門書)

最新 使える!MATLAB 第2版 (KS理工学専門書)

WindowsのAnaconda上にpython-controlを追加する方法

① 下記の方法でslycotを追加

algorithm.joho.info

自分の環境では,slycot-0.2.0-cp36-cp36m-win_amd64.whl をダウンロードし,

pip install slycot-0.2.0-cp36-cp36m-win_amd64.whl

を実行.

② 下記の方法でpython-controlを追加

Control :: Anaconda Cloud

pip install -i https://pypi.anaconda.org/pypi/simple control 


科学技術計算のためのPython入門 ――開発基礎、必須ライブラリ、高速化

科学技術計算のためのPython入門 ――開発基礎、必須ライブラリ、高速化