MATLABを使って曲線を近似する
MATLAB の Curve Fitting Toolbox を使ってセンサモデルの曲線近似をしてみたお話です.
この記事は rogy Advent Calendar 2018 の6日目の記事です.
はじめに
今回やること
MathWorks 社の提供している数値解析ソフトウェア MATLAB の Toolbox の1つである Curve Fitting Toolbox を利用して, 非線形なスライドボリュームのセンサモデル (特性曲線)の近似を行いました.
同じことをやるときに必要なもの
なぜこのツールボックスを使うのか
生きていると, サンプルデータから関数を作りたい場面があると思います.
しかし, 複数の手法と比較してみたい!となったとき, 毎度毎度計算して比較して……とやるのは実装力が付くかも(??)しれませんが, 大変だと思います.
しかし! この Curve Fitting Toolbox はデータを突っ込めば, あとはGUIで方法を変えて試すだけ.
しかもなんと, 自身でその近似曲線の信頼度の評価までしてくれるんですね.
すごい! 便利!
ということで本記事にてご紹介します.
※ 筆者は MathWorks 社の手の者ではありませんのでご安心ください.
やりかた
実験値の取得
サンプリングします.
等間隔である必要はありませんが, 当たり前のこととして, 状態量 (今回は位置) と出力 (今回は電圧値) が必ず対応しておくようにしましょう.
データの読み込み
MATLAB上にデータを読み込みます.
このようにコマンドやmファイル等でインライン入力してもいいですし, もしcsvファイル等にまとまっていれば,
ホーム->データのインポート
を使って直接読み込むこともできます.
読み込みのときの操作によって, 行ベクトルや列ベクトルのそれぞれになる可能性があります.
今回はどちらの形式でも受け入れてくれるようですが, 読み込んだあと行列をかけたりして操作を行う場合は注意してください.
参考: transpose(x)
で, 変数 x
を転置したものが得られます.
ツールボックスの起動
アプリ->曲線近似
を選択すると, Curve Fitting Toolbox が起動します.
こんな画面が出てきます.
ツールボックスの操作
GUIでポチポチするだけです. アニメを見ながらでもできます!
使いたいデータを選んで……
近似形式を選んで……
多項式の場合は次数を選んで……
はい, これで完成です.
すごい! とっても簡単!!
係数とかも自動で調整してくれますし, 自身の評価もしてくれます.
さらにタブを増やせば複数の近似方法を比較して検討することもできます.
気に入った近似方法があれば, それを保存して使いまわすこともできます.
おわりに
実際の組込プログラムに落とし込むときの注意点
多項式近似をする際に, 最高次数を上げると当然フィッティングの評価は上がりますが,
- 計算量 (計算時間) の増加
- 過剰適合 (過学習) の発生
といったリスクがあります.
前者は計算時間の実測で評価することが可能です. また次数による計算オーダーは明らかでしょう.
後者はサンプルを増やして評価する, といった方法が可能です.
また今回のようなセンサモデルの近似では, 特性の概形がデータシート等で公開されている場合が多いので, その際は視認で防げるでしょう.
あとは pow()
や exp()
, log()
関数のような標準ライブラリの活用も考えながら手法を選択するといいでしょう.
あとがき
このツールボックスは他にも色々な活用方法があるようなので, 是非使ってみてください.
自分はこれを知るまで温かみのある回帰をしていました. 製品ソフトウェア最高! GUI最高!
こういうところは苦しむべきところではないので, 積極的に楽をしましょう.
部室徹夜進捗会で, 使い方を教えてくれた夕天ちゃん先輩に感謝します.
明日の更新担当者は未定ですがお楽しみに!!!