Matlab

コストをかけずにScilabで済ますつもりでいたのですが、とうとう誘惑に負けてMatlabを購入してしまいました。

まずは基本だけでよいので、Matlab本体で済まそうと思っていたのですが、やはりSimulinkくらいは、、、最適化と制御検討は、、、と思い、結局いくつか追加モジュールも購入。

思ったより高くついてしまったものの、納得のクオリティ。使い勝手が良く、非常に面白いです。Mathworks社のフォーラムが十分に発達しているのと、ヘルプが充実しているのであまりここでメモすることは無いのですが、個人的に面白かった機能と基本部分を少しずつ整理していきたいと思います。

Matlabの基本機能

基本コマンド

Matlabはマニュアルが充実しているので、覚えておきたいものだけ記載します。

・コンソール画面への出力

disp()コマンドを使用

disp('Hello')

出力 : Hello

・コメントアウト

%

・2次元配列

全ての要素が1の2行3列の2次元配列を作成する場合、

a=ones(2,3)

※すべての要素0にしたい場合は、zeros、乱数にしたい場合はrand。

・Exceldataの読み込み

data.xlsxのsheet1を読み込み、dataに格納する場合、

[data]=xlsread('data.xlsx','sheet1')

dataに格納したデータの1列目のデータをxdataに格納したい場合、

xdata=data[:,1]

配列の次元の確認方法(data配列の3番目の次元数を確認したい場合)

n=size(data,3)

配列の最大値、最小値を取得する場合、

a=max(data)
b=min(data)
・基本の論理演算子

準備中

・複素数の表現  

複素数、共役複素数、複素数の絶対値の入力例(上記のa,bの入力に続けて以下入力下さい)

 

↓虚数部の表現 : i、 共役複素数 : conj()、 絶対値 : abs()、 指数関数 : exp()

Complexcalc1

Matlabのお勧めモジュール

私が買って良かったと思ったモジュールを以下ご紹介します。

Simulink

Control System Toolbox

Optimization Toolbox

Signal Processing Toolbox

Simscape

Symbolic Math Toolbox

System Indentification Toolbox

Matlabの素晴らしい点

私のようにチョコッとしか使わない立場で素晴らしさを語るのはおこがましいのですが、何点か私が惚れ込んだ点を記載します。

ユーザーフレンドリー

使い勝手が素晴らしいです。特にインテリセンス機能が素晴らしく、マニュアル等を読まなくても直感的に操作することができます。使い方をユーザーに「覚えさせる」のではなく、「ガイドしてくれる」という点が秀逸だと思います。

EaseOfUse

連続時間と離散時間の変換が容易

下図のように変換ユニットを使うだけで簡単に変換が行えます。

ContToDis

Matlabアプリ

MatlabはコードをMatlab Driveに保存することができ、またそのコードをスマホで走らせることができます。またiphoneのセンサーデータ等をアップロードして使うことが可能です。

センサーデータ

以下のように、どのデータのログを取るかを選択し、開始を押すとログを取り始めます。

Sensor

ログデータは、以下のようにmat形式で保存されます。

Drive Sensor2

Matlabの利用例

例1:非定常シミュレーターとの連成

OPC Toolboxを使った連成

こちらに例を紹介しています。

OPC toolboxは設定が分かりやすく、お勧めです。

Pythonからの呼び出し

こちらのページを参考にしてPythonからMatlabの呼び出しができるように事前準備します。

例2:誤差逆伝播法の実装

水の蒸気圧データへのフィッティング  

詳細はゆくゆく整理していきたいと思いますが、まずは計算前提と検証結果です。

 

少しでも馴染みのあるデータでテストしてみたいと思い、Perryのエンジニアリングブックから、水の蒸気圧データを抜き打ちで12点ほど抜出し→エクセルにデータを移し、そのデータを読み込んで、以下の条件で学習させてみます。

 

使用したデータは以下になります。

BackProp_VPcalc  

隠れ層:1層、隠れ層ユニット数:200、学習回数:3200、学習率:0.7、荷重減衰パラメーター:0.3、正則化パラメーター:0.03、活性化関数:シグモイド関数、誤差評価関数:最小二乗。

BackProp_VPcalc  

以下のようにcolormapを使い、計算サイクル100,200,400,800,1600,3200毎に結果を出力するようにしていますが、学習回数が増えるに従って、精度が上がっていく様子が確認できます。(色が薄くなるほど学習が進んだ状態です)

b = colormap;
plot(temp(:,1),VP(:,1),'color',b(6*k,:));
 

考察がまだあまりできていないのですが、隠れユニット数が少ないと全く学習が進まないかったのと、正則化パラメーターが結構効きました。

特に低温度域のデータは、正則化パラメーターを調整しないとなかなか教師データに近づけることができませんでした。

低温度域は、そもそも蒸気圧の絶対値自体が小さいため、誤差の絶対値が小さいことと、傾きがかなり寝ている部分なので勾配法で解が収束しづらく、正則化が重要になるのかなと考えています。

 

いずれ検証のまとめも行いたいと思いますが、ひとまず試行過程の結果を以下にまとめておきます。

BackProp_VPcalc  

温度と蒸気圧の関係だけではニューラルネットワークを使う必要性は無いですが、、、。Pirikaの記事に感銘を受けて、まず勉強がてら試してみました。もう少し面白そうなネタを探してみたいと思います。

 

当サイトに不具合、ご意見等ございましたらCEsolutionにお知らせください。

Page Top