はじめに MATLAB,Python,Scilab,Julia比較するシリーズの第4章。 第3章では画像処理、座標変換の話がメインだった。 第4章は分類問題関連の話がメインとなる。基本的には以下の流れとなる。 形式ニューロン 決定境界線の安
シミュレーションで実物を扱わなくても仕事ができる環境を目指す。つまり家に引きこもって外に出なくてもOKな世界。
MATLAB,Python,Scilab,Julia比較 その74【PID制御③】
PID制御の基本式を確認。 上記の積分を外側に追いやった変形式を確認。 積分を外側に追いやる方がワインドアップ対策がし易いので、こちらが使用されることが多い。
MATLAB,Python,Scilab,Julia比較 その73【PID制御②】
これまでの状態空間モデルの構成を確認。 オープンループ制御になっている。 今回の構成を確認。 PID制御でクローズループにする。 角速度ωをフィードバックすることで角速度制御をすることが分かる。
MATLAB,Python,Scilab,Julia比較 その72【PID制御①】
DCモータ状態空間モデルを制御すべくPID制御器を追加予定。 上記に至るロードマップ提示。 「PID制御器の離散化」がやや数式まみれになるためちょっと鬼門。 オイラー法による微分解法するだけなので比較的簡単にするつもり。
DCモータ状態空間モデルをJuliaでシミュレーション。 かなりMATLABと近似のコードになる。 linspaceがrangeになってるくらい。 シミュレーションも同一であり、想定通り。
【入門】状態空間モデル(DCモータ)Scilab【数値計算】
DCモータ状態空間モデルをScilabでシミュレーション。 演算自体はMATLABと同一。 差はグラフ表示の微調整のところ。 シミュレーションも同一であり、想定通り。
【入門】状態空間モデル(DCモータ)Python【数値計算】
DCモータ状態空間モデルをPython(Numpy)でシミュレーション。 流れとしてはMATLABと一緒。 状態空間モデルの演算用関数が変化しない特徴も一緒。 シミュレーションも同一であり、想定通り。
【入門】状態空間モデル(DCモータ)MATLAB【数値計算】
DCモータ状態空間モデルをMATLABでシミュレーション。 状態空間モデルを演算する関数自体はそのまま使い回し。 シミュレーションとしては想定通りの結果。
MATLAB,Python,Scilab,Julia比較 その71【状態空間モデル㉙】
DCモータ状態空間モデルをJuliaでシミュレーション。 かなりMATLABと近似のコードになる。 linspaceがrangeになってるくらい。 シミュレーションも同一であり、想定通り。
MATLAB,Python,Scilab,Julia比較 その70【状態空間モデル㉘】
DCモータ状態空間モデルをScilabでシミュレーション。 演算自体はMATLABと同一。 差はグラフ表示の微調整のところ。 シミュレーションも同一であり、想定通り。
MATLAB,Python,Scilab,Julia比較 その69【状態空間モデル㉗】
DCモータ状態空間モデルをPython(Numpy)でシミュレーション。 流れとしてはMATLABと一緒。 状態空間モデルの演算用関数が変化しない特徴も一緒。 シミュレーションも同一であり、想定通り。
MATLAB,Python,Scilab,Julia比較 その68【状態空間モデル㉖】
DCモータ状態空間モデルをMATLABでシミュレーション。 状態空間モデルを演算する関数自体はそのまま使い回し。 シミュレーションとしては想定通りの結果。
DCモータ状態空間モデルを導出するため以下を実施。 状態量の定義。 各種微分方程式。 微分方程式の変形。 状態方程式の作成。 出力方程式の作成。 確からしさはシミュレーションで確認。
MATLAB,Python,Scilab,Julia比較 その67【状態空間モデル㉕】
出力方程式を導出。 基本は、出力させたい項を出力行列で指定するだけ。 実験段階では全状態を見たいことが多いので全部出力指定にすることが多い。 各種行列を列挙。 シミュレーションしないと確からしさはわからないが、以前のシミュレーションコード使い回しでいけそう。 これが状態空間モデルの良いところ。
MATLAB,Python,Scilab,Julia比較 その66【状態空間モデル㉔】
状態量と各種微分方程式を再掲。 上記の情報から状態方程式を組み上げた。 表現がベクトル行列になっただけで、導出した微分方程式と一緒。 状態空間モデルも見慣れてしまえばそれほど不可思議なものではない。
MATLAB,Python,Scilab,Julia比較 その65【状態空間モデル㉓】
キルヒホッフの第2法則に則って電圧導出式を合体さえた。 単純に加算。 しかし、今回は逆起電力なので、結果的には引き算にはなる。 電流から電圧を求める式に変形。 電流が1階微分されているが、元々電流の1回微分が欲しいのでちょうど良い。
MATLAB,Python,Scilab,Julia比較 その64【状態空間モデル㉒】
各種必要な微分方程式を特定 角度→角速度、電流→角速度、を特定。 電圧→電流はオームの法則とキルヒホッフの第2法則の組み合わせで導出する。 とりあえず、電気回路として見た場合と、逆起電力の部分を特定。 次回これらを合体させる予定。
MATLAB,Python,Scilab,Julia比較 その63【状態空間モデル㉑】
状態空間モデルでもうちょっと複雑なものを取り扱う。 とりあえずDCモータを採用。 導出の流れは運動方程式の時と一緒。 まずは状態量を特定。 状態量の特定は入力から期待する出力に至るために必要なパラメータをイメージすると良い。
MATLAB、Python、Scilab、Julia比較ページはこちらはじめにの、MATLAB,Python,Scilab,Julia比較 その62【状態空間モデル⑳】を書き直したもの。ニュートンの運動方程式を状態空間モデルを離散化したもの
Juliaでベクトル、行列演算による状態空間モデルの演算実施。 MATLABとほぼ同一。 添え字、ドット演算子に違いあり。 シミュレーション結果も想定通り。
【入門】状態空間モデルで微分解決(Scilab)【数値計算】
Scilabでベクトル、行列演算による状態空間モデルの演算実施。 MATLABと同一。 グラフ表示の部分に差異があるだけ。 シミュレーション結果も想定通り。
【入門】状態空間モデルで微分解決(Python)【数値計算】
Python(Numpy)でベクトル、行列演算による状態空間モデルの演算実施。 流れとしてはMATLABと同一。 内積の演算子が「@」な点に注意。 シミュレーション結果も想定通り。
【入門】状態空間モデルで微分解決(MATLAB)【数値計算】
MATLABでベクトル、行列演算による状態空間モデルの演算実施。 導出した数式のまんまでコードが組める。 このルールに即していれば、さまざまな振る舞いを規定できる。 シミュレーション結果も想定通り。
MATLAB,Python,Scilab,Julia比較 その62【状態空間モデル⑳】
Cコードによるベクトル、行列演算による状態空間モデルの演算実施。 MATLAB Coderで出力。 シミュレーション結果も想定通り。 コード自体は複雑になるが、多変量の微分方程式になった際に効果は大きくなる。
MATLAB,Python,Scilab,Julia比較 その61【状態空間モデル⑲】
Juliaでベクトル、行列演算による状態空間モデルの演算実施。 MATLABとほぼ同一。 添え字、ドット演算子に違いあり。 シミュレーション結果も想定通り。
MATLAB,Python,Scilab,Julia比較 その60【状態空間モデル⑱】
Scilabでベクトル、行列演算による状態空間モデルの演算実施。 MATLABと同一。 グラフ表示の部分に差異があるだけ。 シミュレーション結果も想定通り。
MATLAB,Python,Scilab,Julia比較 その59【状態空間モデル⑰】
Python(Numpy)でベクトル、行列演算による状態空間モデルの演算実施。 流れとしてはMATLABと同一。 内積の演算子が「@」な点に注意。 シミュレーション結果も想定通り。
MATLAB,Python,Scilab,Julia比較 その58【状態空間モデル⑯】
MATLABでベクトル、行列演算による状態空間モデルの演算実施。 導出した数式のまんまでコードが組める。 このルールに即していれば、さまざまな振る舞いを規定できる。 シミュレーション結果も想定通り。
状態空間モデルの状態方程式と出力方程式の微分解決を実施。 基本的には状態方程式側の微分解決をし、その結果を出力方程式に代入する。 MATLAB、Python、Scilab、Juliaで上記をプログラムとして実装予定なので、よくわからん人は参照すべし。
MATLAB,Python,Scilab,Julia比較 その57【状態空間モデル⑮】
出力方程式の微分解決を実施。 とはいっても、出力方程式側には微分方程式は居ないのでxを代入しただけ。 これで、状態空間モデルのままで演算できる状態になったと言える。 しかし、これでもプログラム化のイメージは湧きにくい。 よって、次回から各ツール、各言語で書くとどうなるかを確認。
MATLAB,Python,Scilab,Julia比較 その56【状態空間モデル⑭】
状態空間モデルのまま微分解決可能なはず。 まずは状態方程式の微分解決を実施。 両辺を積分して、その後にオイラー法で微分解決。 とりえずはオイラー法でも精度が十分なことは多い。
状態空間モデルを使用せず、微分方程式のままシミュレーションを試みる。 Simulinkがあれば、ブロック図のままでもシミュレーションできるが…。 その後、ブロック図を離散化。 この段階でオートコード生成したりもする。 漸化式導出。 Cコード化とシミュレーション実施。 もっとも原始的なモデルベース開発?
「ブログリーダー」を活用して、KEIさんをフォローしませんか?
はじめに MATLAB,Python,Scilab,Julia比較するシリーズの第4章。 第3章では画像処理、座標変換の話がメインだった。 第4章は分類問題関連の話がメインとなる。基本的には以下の流れとなる。 形式ニューロン 決定境界線の安
単純パーセプトロンの分類をMATLABで実施。 想定通り分類可能。 おおよそ200エポックあれば分類可能。
単純パーセプトロンの構造について復習。 逆伝播の復習。 重みとバイアスの連鎖律の最適化。 単純パーセプトロンで分類のプログラムのフローを確認。 学習が進むと決定境界線がどのように動くか確認。
単純パーセプトロンで分類のプログラムのフローを確認。 逆伝播の実験のときと流れは一緒。 学習が進むと決定境界線がどのように動くか確認。
重みとバイアスの連鎖律の最適化。 共通部分があるので、そこを切り出し。 プログラムの場合は、こういう共通部分を変数に格納するなどの最適化が可能。
単純パーセプトロンの構造について復習。 今回扱うのは活性化関数をシグモイド関数に差し替えたもの。 逆伝播の復習。 重みとバイアスの逆伝播は途中まで一緒。 よって表現の最適化が可能。
MATLAB、Python、Scilab、Julia比較ページはこちら はじめに の、 MATLAB,Python,Scilab,Julia比較 第4章 その64【逆伝播⑮】 を書き直したもの。 単純パーセプトロンに対する逆伝播を行う。まず
逆伝播を行った際の重みの動き方を確認するプログラムをScilabで作成。 おおよそ狙ったところに収束。
逆伝播を行った際の重みの動き方を確認するプログラムをPythonで作成。 おおよそ狙ったところに収束。
逆伝播を行った際の重みの動き方を確認するプログラムをMATLABで作成。 おおよそ狙ったところに収束。
逆伝播を行った際の重みの動き方を確認するプログラムをJuiaで作成。 おおよそ狙ったところに収束。
逆伝播を行った際の重みの動き方を確認するプログラムをScilabで作成。 おおよそ狙ったところに収束。
逆伝播を行った際の重みの動き方を確認するプログラムをPythonで作成。 おおよそ狙ったところに収束。
逆伝播を行った際の重みの動き方を確認するプログラムをMATLABで作成。 おおよそ狙ったところに収束。
全体の位置づけと各偏導関数を確認。 入力、出力(ラベル)が複数であるが故に連鎖律のルートが複数になる。 入力、出力が複数であるが故の連鎖律の事情のもう一つの考え方。 逆伝播の確認用プログラムのフローを記載。
連鎖律に於ける誤差関数の位置づけと偏導関数を確認。 活性関数(シグモイド関数)のブロック図と連鎖律上の位置づけと偏導関数を確認。 入力層のブロック図と連鎖律上の位置づけと偏導関数を確認。 バイアスのブロック図と連鎖律上の位置づけと偏導関数を確認。
誤差逆伝播法とか単純パーセプトロンに関連する用語を確認。 逆伝播を行う単純パーセプトロンの構成を確認。 一連の合成関数について書き出し。 合成関数を構成する各数式を書き出し。 合成関数の微分こと連鎖律について説明。 学習データを加味した場合の多変量関数の連鎖律について簡単に説明。
逆伝播の確認用プログラムのフローを記載。 逆伝播の挙動を確認するため、重みの開始位置とバイアスは固定。 ベクトル、行列演算をプログラム都合に合わせて表現しなおし。
入力、出力が複数であるが故の連鎖律の事情のもう一つの考え方。 誤差関数は二乗和誤差関数であり、本来であればΣが含まれる。 よって、連鎖律にもΣが含まれる形を取ると前回と同一の数式が得られる。
入力、出力(ラベル)が複数であるが故に連鎖律のルートが複数になる。 上記の図示と数式を説明。
二次形式の多項式としての偏導関数、行列形式による偏導関数を元にPython(NumPy)で算出及びプロット。 ともに同一の算出結果とプロットが得られた。
二次形式の多項式としての偏導関数、行列形式による偏導関数を元にMATLABで算出及びプロット。 ともに同一の算出結果とプロットが得られた。
∇について説明。 二次形式の微分について説明。 具体的な多項式に当てはめて計算してみた。
具体的な二次形式の多項式に対して微分。 ∇による微分結果確認。 二次形式の微分の公式による結果確認。 ツールで計算させるまでもないが、一応やっておく。
∇を使用して、二次形式の微分(勾配)を求める。 二次形式を多項式表現し、偏微分。 偏微分した結果を行列形式に戻す。 結果としてシンプルな偏導関数が求められる。
二次形式の微分についての話へ突入。 ∇(ナブラ)について説明。 ベクトルに対しての偏微分。 各要素に対しての微分を行うだけなので、複雑な概念ではない。
二次形式の多項式表現と行列表現の計算をJuliaで実施。 3Dグラフを表示する際は、"projection" => "3d"が必要。 meshgridが無いので自作した。
二次形式の多項式表現と行列表現の計算をScilabで実施。 基本的にはMATLABと一緒。 ただし、reshapeの代わりにmatrixを使う必要がある。
二次形式の多項式表現と行列表現の計算をPythonで実施。 3Dグラフを表示する際は、projection='3d'が必要。 plot_wireframeでワイヤーフレームでグラフ表示ができる。
二次形式の多項式表現と行列表現の計算をMATLABで実施。 meshgridにx軸とy軸を入力とすることで平面座標が得られる。 平面座標を元に2変数の演算を実施。 演算結果をmesh関数を使用して3Dグラフに表示。
二次形式の多項式表現と行列表現の計算をJuliaで実施。 3Dグラフを表示する際は、"projection" => "3d"が必要。 meshgridが無いので自作した。
二次形式の多項式表現と行列表現の計算をScilabで実施。 基本的にはMATLABと一緒。 ただし、reshapeの代わりにmatrixを使う必要がある。
二次形式の多項式表現と行列表現の計算をPythonで実施。 3Dグラフを表示する際は、projection='3d'が必要。 plot_wireframeでワイヤーフレームでグラフ表示ができる。
二次形式の多項式表現と行列表現の計算をMATLABで実施。 meshgridにx軸とy軸を入力とすることで平面座標が得られる。 平面座標を元に2変数の演算を実施。 演算結果をmesh関数を使用して3Dグラフに表示。
対称行列と二次形式について説明。 二次形式は多項式表現と行列表現ができる。 行列表現ができると計算がしやすくなる。 しかし、全座標を入れるにはfor文を使用する必要がある。 for文を削除するための仕掛けを入れておいた。
二次形式の行列表現をfor文を使用せずに一括計算するための仕掛けを考える。 内積を分解してアダマール積と定数関数との内積にする。 これにより、x^Tとxの直積的な結果を抑制。
二次形式の行列表現と多項式表現の関係性を示した。 行列Aが対称行列になることを制約とすると行列表現と多項式表現に可逆性を付加することができる。 これに伴い、等しいものとして扱うことが可能となる。 実際に行列表現と多項式表現が等しいかを各ツール、各言語で確認したいが、その前にベクトル、行列のまま演算する仕掛けを考える必要がある。
二次形式について確認。 すべての候の次数が2である多項式。 二次形式を一般化して行列表現。 行列表現できた方が計算しやすい。
対称行列について説明。 対角部を中心に対象となっている正方行列。 単位行列も対称行列の一種ではある。 厳密には対称行列の一種である対角行列の一種が単位行列。 対称行列は二次形式、二次形式の微分、グラム行列で使用する予定。
1次関数最小二乗法こと単回帰分析のあとは重回帰分析、多項式回帰分析にチャレンジ。 重回帰分析、多項式回帰分析を行うには正規方程式が必要。 正規方程式を導出するまでの因果関係を図示した。