MATLAB初心者の方が「なにこれ?」となってしまうスクリプトコードの一つに無名関数が挙げられるのではないかと思います。
無名関数が用いられたスクリプトを解析しようとした場合にはてなマークが浮かばないよう、簡単にですが無名関数とはなんぞやということについて解説したいと思います。
無名関数とは
無名関数とはその名の通りですが、関数名を持たない関数です。
使い道ですが、わざわざ新たに関数を起こすまでもないような小さな処理、具体的に言えば1行で表すことができるような処理に対して使用します。
例として、-1.28~1.27まで取りえる可能性のある数値をLSB、オフセットを考慮することでuint8の正の整数値に変換することを考えてみます。
-1.28の場合にuint8の最小値である0、1.27の場合にuint8の最大値である255となればよいので、LSBが0.01、オフセットが128となります。
例えば数値-1.28をuint8型に変換しようとした場合
uint8(-1.28 / 0.01 + 128)
と1行で表すことができます。
この処理について、任意の値を変換できるように以下のように無名関数として作成します。
dec2int = @(x) uint8(x / 0.01 + 128);
ここで、変数dec2intには関数ハンドルが格納されます。
ここで作成した関数ハンドルですが、通常の関数と同じような感じで使用することができます。
作成した無名関数を使用して数値1.23をuint8に変換します。
dec2int(1.23)
このように引数とした渡した数値に対して、無名関数で定義した処理が行われていることが確認できます。
複数の引数を取る場合
無名関数の引数は複数とすることも可能です。
先ほどの処理ではLSBとオフセットが固定でしたが、これを任意のLSB、オフセットを引数として渡せるようにしてみます。
convertdec = @(x, lsb, offset) uint8(x / lsb + offset)
この無名関数を使用し、数値3.5をLSB=0.1、オフセット=5として数値変換してみます。
convertdec(3.5, 0.1, 15)
上記のように複数の引数を取る場合も無名関数で定義した処理通りに計算が行われます。
コメント