制御工学で避けては通れないのが運動方程式の立式です.
プラントモデリングではもちろんのこと,現代制御に代表されるモデルベース制御では制御ロジックを構築するために運動方程式(状態方程式)が必要になります.
運動方程式の立式というと,ほぼラグランジュ法(オイラー=ラグランジュ方程式)一択のような気がしています.
いまいちこのあたりの用語を掴みきれていないのですが,汎函数と呼ばれる“函数を変数とした函数”を変分(汎函数での微分)することで運動方程式を求めるといった流れです.
たとえば,f(t)=atは函数と呼ばれ,df(t)dtという操作が微分と呼ばれることはご存知のとおりです.
それと似たような関係で,I[f(t)]=Af(t)を汎函数と呼び,dI[f(t)]df(t)を変分と呼ぶようです.
物体の運動の場合,最も必要エネルギの少ない方向に物体が運動するという原理があるらしく(最小作用の原理?),以下の形式で与えられます.
I[y]=∫baf(x,y,y′)dx
特に運動の場合は,右辺f(x,y,y′)をラグランジアンLというエネルギ量で与えるようです.
合っている自信はないですが,以下の式のようなイメージです.(時間微分なのでドットで書いています)
I[x]=∫baL(t,x,˙x)dt
これはある時刻aからbまでのエネルギの合計となります.
上の式が最小になるようにすれば良いということで,I[x]の変分(微分)がゼロとなるようなx(停留値)を求めれば良いことになります.
この解(停留値)は決まっていて,これをオイラー=ラグランジュ方程式と呼びます.
ddt(∂L∂˙x)−(∂L∂x)=0
解の形式が決まっているのでシーケンシャルに解けて便利なのですが,非常に計算量が多いです.
前置きが長くなりましたがこれを数式処理ソフトウェアで楽にしようというのが今回のコンセプトです.
この記事では数式処理ソフトウェアとして以下を使用しています.
- wxMaxima(Windows版Maxima,無償)
- Symbolic Math Toolbox(MATLAB,有償)
恐らく運動方程式を求めたあとはMATLAB/SimulinkとかPyControlとかでシミュレーションすることになると思うのですが,結論としてはwxMaxima優位といった印象です.
今回,2重振り子を例として,Simulinkでのシミュレーションまでやってみようかと思います.
ラグランジュ法では物体の運動エネルギ,位置エネルギの関係を与えてあげることが必要になります.
逆に言うとエネルギまで出せてしまえばあとはソフトウェア任せにできます.
事前にやってみたところ,wxMaximaのインストールから結果確認まで45分程度で終わりました.