可到達条件

可到達条件…Homework

[0] 剛体振り子の状態方程式として次式を考えます。

\displaystyle{(1)\quad \left[\begin{array}{c} \dot{x}_1(t)\\ \dot{x}_2(t) \end{array}\right]= \left[\begin{array}{cc} x_2(t)\\ -a\sin x_1(t)+u(t) \end{array}\right] }

これに対して次のSMCを考えていました。

\displaystyle{(2)\quad u(t)=-{\rm sgn}(s(t)) %-\frac{s(t)}{|s(t)|} }

\displaystyle{(3)\quad s(t)=mx_1(t)+x_2(t) }

振り子を離す初期角度が小さければ容易にスライディング直線に拘束されますが、大きな初期角度をつけて話すと一旦スライディング直線に到達してもこれを突き抜けてしまう可能性があります(前節の図1と図2に示す状況です)。そこで可到達条件

\displaystyle{(4)\quad %\begin{array}{l} \boxed{s(t)\dot{s}(t)< 0} %\end{array} }

をどう満足させるかについて検討します。

[1] 制御則(2)に対して、減衰力を与えるために状態フィードバックを加えてみます。

\displaystyle{(5)\quad u(t)=- \left[\begin{array}{cc} f_1 & f_2 \end{array}\right] \left[\begin{array}{cc} x_1(t)\\ x_2(t) \end{array}\right] -\rho\,{\rm sgn}(s(t)) %\frac{s(t)}{|s(t)|} }

ここで、\rhoというパラメータも導入されており、高速スイッチングする操作入力の振幅を表しています。このとき、次式を得ます。

\displaystyle{(6)\quad \begin{array}{l} s(t)\dot{s}(t)=s(t)(m\dot{x}_1(t)+\dot{x}_2(t))\\ =s(t)(mx_2(t)-a\sin x_1(t)+u(t))\\ =s(t)(mx_2(t)-a\sin x_1(t)-f_1x_1(t)-f_2x_2(t)-\rho\,{\rm sgn}(s(t)) %\frac{s(t)}{|s(t)|} ) \end{array} }

ここで、f_1=0, f_2=mと選ぶと、-s(t)a\sin x_1(t)\le|s(t)|aに注意して

\displaystyle{(7)\quad \begin{array}{l} s(t)\dot{s}(t) =s(t)(-a\sin x_1(t)-\rho\,{\rm sgn}(s(t)) %\frac{s(t)}{|s(t)|} )\\ =-s(t)a\sin x_1(t)-\rho|s(t)|\\ <|s(t)|(a-\rho) \end{array} }

したがって、ある定数\eta>0に対して

\displaystyle{(8)\quad a-\rho < -\eta \quad \Leftrightarrow \quad \boxed{\rho > a+\eta} }

を満たす\rhoを選べば

\displaystyle{(9)\quad \boxed{s(t)\dot{s}(t)< -\eta|s(t)|} }

が成り立ちます。

結局、制御則

\displaystyle{(10)\quad { u(t)=- \left[\begin{array}{cc} 0 & m \end{array}\right] \left[\begin{array}{cc} x_1(t)\\ x_2(t) \end{array}\right] -\rho\,{\rm sgn}(s(t)) %\frac{s(t)}{|s(t)|} }}

を用いれば、スライディング直線に一旦到達すれば、以後は留まるようにできます。


図1 x_1(0)=3, x_2(0)=0のときの状態軌道

図2 x_1(0)=3, x_2(0)=0のとき、m=1,\rho=1の制御則(5)の下での状態軌道

●その到達時刻を見積もってみます。

\displaystyle{(11)\quad s(t)\dot{s}(t)< -\eta|s(t)| \quad\Leftrightarrow\quad \left\{\begin{array}{ll} \dot{s}(t)< -\eta & (s(t)>0)\\ \dot{s}(t)> -\eta & (s(t)<0) \end{array} \right. }

から

\displaystyle{(12)\quad \frac{1}{2}\frac{d}{dt}s^2(t)< -\eta|s(t)| \Rightarrow \frac{1}{2}\frac{d}{dt}|s(t)|^2=|s(t)|\frac{d}{dt}|s(t)|< -\eta|s(t)| \Rightarrow \frac{d}{dt}|s(t)|< -\eta }

両辺を積分すると

\displaystyle{(13)\quad \underbrace{|s(t_s)|}_0-|s(0)|< -\eta t_s \quad\Leftrightarrow\quad \boxed{t_s\le \frac{|s(0)|}{\eta}} }

を得て、スライディング直線に到達する時刻t_sを見積もることができます。

高速スイッチングする操作入力の振幅\rhoは小さい方が望ましいといえます。ただ、(8)より\etaも小さくせざる得ず、このことはスライディング直線に到達する速さに影響を与えます。

[2] もう一つ別のパラメータ\Phi>0を導入して、制御則(10)を次のように変更してみます。

\displaystyle{(14)\quad { u(t)=- \left[\begin{array}{cc} m\Phi & m+\Phi \end{array}\right] \left[\begin{array}{cc} x_1(t)\\ x_2(t) \end{array}\right] -\rho\,{\rm sgn}(s(t)) %\frac{s(t)}{|s(t)|} }}

このとき、(3)と(8)に注意して、次式を得ます。

\displaystyle{(15)\quad \begin{array}{l} s(t)\dot{s}(t)=s(t)(m\dot{x}_1(t)+\dot{x}_2(t))\\ =s(t)(mx_2(t)-a\sin x_1(t)+u(t))\\ =s(t)(mx_2(t)-a\sin x_1(t)-m\Phi x_1(t)-(m+\Phi)x_2(t)-\rho\,{\rm sgn}(s(t)) %\frac{s(t)}{|s(t)|} )\\ =-\Phi s(t)(m x_1(t)+x_2(t))-s(t)(a\sin x_1(t)+\rho\,{\rm sgn}(s(t)) %\frac{s(t)}{|s(t)|} )\\ \le -\Phi s^2(t)+|s(t)|(a-\rho)\\ < -\Phi s^2(t)-\eta |s(t)|\\ \end{array} }

これより

\displaystyle{(16)\quad \boxed{s(t)\dot{s}(t)< -\Phi s^2(t)} \quad \Leftrightarrow \quad \left\{\begin{array}{ll} \dot{s}(t)< -\Phi s(t) & (s(t)>0)\\ \dot{s}(t)> -\Phi s(t) & (s(t)<0) \end{array}\right. }

これは\Phi|s(t)|\rightarrow 0となる速さを決めていることを意味しています。


図3 x_1(0)=3, x_2(0)=0のとき、m=1,\Phi=1,\rho=0.3の制御則(14)の下での状態軌道

●ちなみに、計算の都合上、(14)の代わりにつぎのスイッチング方式が用いられます。

\displaystyle{(17)\quad { u(t)=- \left[\begin{array}{cc} m\Phi & m+\Phi \end{array}\right] \left[\begin{array}{cc} x_1(t)\\ x_2(t) \end{array}\right] -\rho\frac{s(t)}{|s(t)|+\delta}} }

ここで\delta>0は適切に選ばれた定数です。

演習C02…Flipped Classroom
1^\circ smc15.slxを用いて、図1、図2のシミュレーションを行え。
2^\circ smc16.slxを用いて、図3のシミュレーションを行え。

SM制御

SM制御…Homework

[1] 次の無定位系(2重積分器)を考えます。

\displaystyle{(1)\quad \left[\begin{array}{c} \dot{x}_1(t)\\ \dot{x}_2(t) \end{array}\right]= \left[\begin{array}{cc} 0 & 1\\ 0 & 0 \end{array}\right] \left[\begin{array}{c} x_1(t)\\ x_2(t) \end{array}\right]+ \left[\begin{array}{c} 0\\ 1 \end{array}\right] u(t) }

これに対して、スイッチング関数と呼ばれる

\displaystyle{(2)\quad s(t)=mx_1(t)+x_2(t) }

を用いて、制御則

\displaystyle{(3)\quad u(t)=\left\{\begin{array}{ll} 1 & (s(t)<0) \\ 0 & (s(t)=0) \\ -1 & (s(t)>0) \end{array}\right. }

すなわち

\displaystyle{(4)\quad \boxed{u(t)=-{\rm sgn}(s(t)) %-\frac{s(t)}{|s(t)|}} }

を考えます。\dot{x}(t)=Ax(t)+B(\pm 1)の解は(\tau'=t-\tau\Rightarrow d\tau=-d\tau'に注意して)

\displaystyle{(5)\quad x(t)=\pm\int_0^t\exp(A(t-\tau))Bd\tau =\mp\int_t^0\exp(A\tau')Bd\tau' =\pm\int_0^t\exp(A\tau)Bd\tau }

また

\displaystyle{(6)\quad \exp( \left[\begin{array}{cc} 0 & 1\\ 0 & 0 \end{array}\right]\tau) = \left[\begin{array}{cc} 1 & \tau \\ 0 & 1 \end{array}\right] \Rightarrow \exp(A\tau)B= \left[\begin{array}{cc} 1 & \tau \\ 0 & 1 \end{array}\right] \left[\begin{array}{c} 0\\ 1 \end{array}\right] = \left[\begin{array}{c} \tau \\ 1 \end{array}\right] }

となることから

\displaystyle{(7)\quad \left\{\begin{array}{l} x_1(t)=\pm\int_0^t \tau d\tau=\pm\frac{1}{2}t^2+x_1(0)\\ x_2(t)=\pm\int_0^t 1 d\tau=\pm t+x_2(0) \end{array}\right. \Rightarrow x_1(t)-x_1(0)=\pm \frac{1}{2}(x_2(t)-x_2(0))^2 }

と計算できます。ここで、状態軌道は放物線となっていることに注意します。

m=2x_1(0)=x_2(0)=4のときの状態軌道を図1に示します。


図1 x_1(0)=x_2(0)=4のときの状態軌道

これから直線x_2=-mx_1の上側と下側にある(横に寝た)放物線を切り替えて状態軌道が構成されていることが分かります。ところが、原点に近くなると奇妙な現象が生じます。

m=2x_1(0)=x_2(0)=0.4のときの状態軌道を図2に示します。


図2 x_1(0)=x_2(0)=0.4のときの状態軌道

これから状態軌道が直線x_2=-mx_1に到達すると、この直線上に拘束されて原点まで滑っていることが分かります。一体、何が起こっているのでしょう?

●これを調べるために

\displaystyle{(9)\quad \begin{array}{l} s(t)\dot{s}(t)=s(t)(m\dot{x}_1(t)+\dot{x}_2(t))=s(t)(mx_2(t)+u(t))\\ =s(t)(mx_2(t)-\frac{s(t)}{|s(t)|})=mx_2(t)s(t)-|s(t)|\\ \Rightarrow s(t)\dot{s}(t)\le (m|x_2(t)|-1)|s(t)| \end{array} }

から、次が成り立つことがわかります。

\displaystyle{(10)\quad \begin{array}{l} m|x_2(t)|<1 \Rightarrow s(t)\dot{s}(t)< 0 \end{array} }

いま(2)で定義したsx_1-x_2平面におけるx_2軸の切片であることに注意します。(10)より、s>0のとき\dot{s}<0なので切片sx_2軸正の方から0に漸近します。一方、s<0のとき\dot{s}>0なので切片sx_2軸負の方から0に漸近します。このことは状態は直線

\displaystyle{(11)\quad mx_1(t)+x_2(t)=0 }

の上に拘束されてしまうことを意味します。これから

\displaystyle{(12)\quad \dot{x}_1(t)=-mx_1(t) }

となるので、つぎを得ます。

\displaystyle{(13)\quad x_1(t)=e^{-mt}x_1(0)\rightarrow 0\quad(t\rightarrow\infty) }

これは直線(2)を滑るように原点に向かうことを意味します。

●以上のように、適当なスイッチング関数s(t)に対して、可到達条件

\displaystyle{(14)\quad { \begin{array}{l} s(t)\dot{s}(t)< 0 \end{array}} }

を満足させ、スライディング直線に乗せたあと、原点に向かって滑らせる制御方式をスライディングモード制御と呼びます。

[2] いまスライディング直線に乗る時刻をt_sとすると、次が成り立ちます。

\displaystyle{(15)\quad s(t)=0\quad(t>t_s) \quad\Rightarrow\quad \dot{s}(t)=0\quad(t>t_s) }

また(9)では次式を用いました。

\displaystyle{(16)\quad \dot{s}(t)=m\dot{x}_1(t)+\dot{x}_2(t)=mx_2(t)+u(t) }

そうすると(15)と(16)を合わせて、スライディング直線を滑らせる制御則は

\displaystyle{(17)\quad 0=mx_2(t)+u_{eq}(t)\Rightarrow u_{eq}(t)=-mx_2(t)\quad(t>t_s) }

のように考えられ、等価制御と呼ばれています。

●等価制御はスライディングモード制御そのものではないのですが、どのように違うか、次のシミュレーション例を見てください。これからスライディングモード制御則を1次システム1/(0.04s+1)を通したものが等価制御とよく合っていることがわかります。この1次システムはアクチュエータのダイナミックス(による帯域制限)を表しているとみなすことができます。


図3 SMCとその等価制御(m=1, x_1(0)=1, x_2(0)=0

そうであれば最初から等価制御を用いればよいではないかと思うかもしれませんが、等価制御はあくまでスライディングモードに突入後の制御則です。したがって、まずは可到達条件(14)を満足させて、スライディングモードを実現する必要があることに注意してください。

[3] 剛体振子の運動方程式は次式で与えられました。

\displaystyle{(18)\quad \ddot{\theta}(t)=\underbrace{-\frac{3g}{4\ell}}_{a}\sin\theta(t)+\underbrace{\frac{1}{J}\tau(t)}_{u(t)} }

x_1=\theta, x_2=\dot{\theta}とおいて、次の非線形状態方程式を得ます。

\displaystyle{(19)\quad \left[\begin{array}{c} \dot{x}_1(t)\\ \dot{x}_2(t) \end{array}\right]= \left[\begin{array}{cc} x_2(t)\\ -a\sin x_1(t)+u(t) \end{array}\right] }

これは、次式のように、無定位系(2重積分器)に非線形項が加えられたものとみなすことができます。

\displaystyle{(20)\quad \left[\begin{array}{c} \dot{x}_1(t)\\ \dot{x}_2(t) \end{array}\right]= \left[\begin{array}{cc} 0 & 1\\ 0 & 0 \end{array}\right] \left[\begin{array}{c} x_1(t)\\ x_2(t) \end{array}\right]+ \left[\begin{array}{c} 0\\ 1 \end{array}\right] u(t)+ \left[\begin{array}{c} 0\\ -a\sin x_1(t) \end{array}\right] }

そこで、これまでのスライディングモード制御(4)をそのまま用いたときの様子を調べてみます。

次は仮にa=0.25とした場合のシミュレーション結果です。一見、図3と変わらないように見えます。


図4 振り子のSMCとその等価制御(m=1, x_1(0)=1, x_2(0)=0

ここには、次の等価制御もシミュレーションされています。

\displaystyle{(21)\quad 0=mx_2(t)-a\sin x_1(t)+u_{eq}(t)\Rightarrow u_{eq}(t)=a\sin x_1(t)-mx_2(t)\quad(t>t_s) }

実は、無定位系そのものは非線形項を考慮していないのに、これに非線形項が加わった場合の影響を抑制していることが分かります。この事実がスライディングモード制御を大変魅力的なものとしています。

演習C01…Flipped Classroom
1^\circ smc11.slxsmc12.slxを用いて、図1、図2のシミュレーションを行え。
2^\circ smc13.slxsmc14.slxを用いて、図3、図4のシミュレーションを行え。

柔軟ビーム(続)

[1] 柔軟構造物の制振問題の例として

のような柔軟ビームを、一定角度だけ振動を抑制しながら回転させる制御系設計を考えていきます。そのために柔軟ビームに関する運動方程式

\displaystyle{(1a)\quad \underbrace{ \left[\begin{array}{c|ccc} \alpha & m_1 & \dots &m_N \\ \hline m_1 & 1 & & 0 \\ \vdots & & \ddots & \\ m_N & 0 & & 1 \\ \end{array}\right] }_{M=\left[\begin{array}{cc} M_{11} & M_{12} \\ M_{21} & M_{22} \end{array}\right]} \underbrace{ \left[\begin{array}{c} \ddot{\theta} \\ \hline \ddot{r}_1 \\ \vdots \\ \ddot{r}_N \end{array}\right] }_{\ddot{\xi}} + \underbrace{ \left[\begin{array}{c|ccc} 0 & 0 & \dots &0 \\ \hline 0 & \Omega_1^2 & & 0 \\ \vdots & & \ddots & \\ 0 & 0 & & \Omega_N^2 \\ \end{array}\right] }_{K=\left[\begin{array}{cc} K_{11} & K_{12} \\ K_{21} & K_{22} \end{array}\right]} \underbrace{ \left[\begin{array}{c} \theta \\ \hline r_1 \\ \vdots \\ r_N \end{array}\right] }_{\xi} = \underbrace{ \left[\begin{array}{c} 1 \\ \hline 0 \\ \vdots \\ 0 \end{array}\right] }_{B_2} u' }
\displaystyle{(1b)\quad \eta(\xi)= \underbrace{ \left[\begin{array}{c|ccc} 0 & \phi_1(\xi) & \dots &\phi_N(\xi) \end{array}\right] }_{C_1} \underbrace{ \left[\begin{array}{c} \theta \\ \hline r_1 \\ \vdots \\ r_N \end{array}\right] }_{\xi} }

から次の状態空間表現を得ていました。

\displaystyle{(2a)\quad \underbrace{ \left[\begin{array}{c} \dot{\xi} \\ \ddot{\xi} \end{array}\right] }_{\dot{x}} = \underbrace{ \left[\begin{array}{cc} 0_{N+1\times N+1} & I_{N+1} \\ M^{-1}K & 0_{N+1\times N+1} \end{array}\right] }_{A} \underbrace{ \left[\begin{array}{c} \xi \\ \dot{\xi} \end{array}\right] }_{x} + \underbrace{ \left[\begin{array}{cc} 0_{N+1\times 1} \\ M^{-1}B_2 \end{array}\right] }_{B} u'}
\displaystyle{(2b)\quad \eta(\xi)= \underbrace{ \left[\begin{array}{cc} C_1 & 0_{1\times N} \end{array}\right] }_{C} \underbrace{ \left[\begin{array}{c} \xi \\ \dot{\xi} \end{array}\right] }_{x} }

このモデルでは、柔軟ビームを回転させるモータのトルクの時系列を与えたときの弾性変位の計算はできます。したがって、トルク制御を行うことが考えられますが、一般にモータの購入時には、回転角制御または回転数制御のどちらかの目的に応じて、ドライバも一緒に購入します。ここでは、回転数制御用のドライバが準備されていると仮定します。すなわち、回転数指令値を操作入力として考えます。そうすると、上のモデルを書き替える必要が出てきます。

一般にモノを動かすときは、増速、定速、減速の速度パターンを与えて、面積が望ましい変位となるようにします。いま、モータの回転数制御系のダイナミックスを、十分小さな時定数T_aを用いて

\displaystyle{(3)\quad\frac{d}{dt}\dot{\theta}=-\frac{1}{T_a}\dot{\theta}+\frac{1}{T_a}\dot{\theta}_c}

で表しておきます。次に、上の運動方程式の第2ブロック行は

\displaystyle{(4)\quad \underbrace{ \left[\begin{array}{c} m_1 \\ \vdots \\ m_N \\ \end{array}\right] }_{M_{21}} \ddot{\theta} + \underbrace{ \left[\begin{array}{c} \ddot{r}_1 \\ \vdots \\ \ddot{r}_N \end{array}\right] }_{\ddot{r}} + \underbrace{ \left[\begin{array}{ccc} \Omega_1^2 & & 0 \\ & \ddots & \\ 0 & & \Omega_N^2 \\ \end{array}\right] }_{K_{22}} \underbrace{ \left[\begin{array}{c} r_1 \\ \vdots \\ r_N \end{array}\right] }_{r} = \left[\begin{array}{c} 0 \\ \vdots \\ 0 \end{array}\right] }

となっていますが、これを

\displaystyle{(5)\quad z=M_{21}\theta+r}

を用いて、次のように書き替えます。

\displaystyle{(6)\quad\underbrace{\frac{d^2}{dt^2}(M_{21}\theta+r)}_{\ddot{z}}+K_{22}(z-M_{21}\theta)=0}

以上から、制御系設計用のモデルとして次式を得ます。

\displaystyle{(7a)\quad \underbrace{ \left[\begin{array}{c} \dot{z} \\ \dot{\theta} \\\hline \ddot{z} \\ \ddot{\theta} \end{array}\right] }_{\dot{x}} = \underbrace{ \left[\begin{array}{cc|cc} 0_{N\times N} & 0_{N\times 1} & I_N & 0_{N\times 1} \\ 0_{1\times N} & 0 & 0_{1\times N} & 1 \\\hline -K_{22} & K_{22}M_{21}  & 0_{N\times N} & 0_{N\times 1} \\ 0_{1\times N} & 0 & 0_{1\times N} & -\frac{1}{T_a} \end{array}\right] }_{A} \underbrace{ \left[\begin{array}{c} {z} \\ {\theta} \\\hline \dot{z} \\ \dot{\theta} \end{array}\right] }_{x} + \underbrace{ \left[\begin{array}{cc} 0_{N\times 1} \\ 0 \\\hline 0_{N\times 1} \\ \frac{1}{T_a} \end{array}\right] }_{B} \dot{\theta}_c}
\displaystyle{(7b)\quad \eta(\xi)= \underbrace{ \left[\begin{array}{ccc} \phi_1(\xi) & \cdots & \phi_N(\xi) \end{array}\right] \left[\begin{array}{cc|cc} I_N & -M_{21} & 0_{N\times N} & 0_{N\times 1} \end{array}\right] }_{C} \underbrace{ \left[\begin{array}{c} {z} \\ {\theta} \\\hline \dot{z} \\ \dot{\theta} \end{array}\right] }_{x} }

演習B64b…Flipped Classroom

\displaystyle{L=1} m
\displaystyle{D=0.005} m
\displaystyle{\rho=7980} kg/m^3
\displaystyle{E=1950000} N/mm^2
\displaystyle{I=\frac{\pi}{64}D^4 } m^4
\displaystyle{A=\frac{\pi}{4}D^2} m^2
\displaystyle{J_0(=\frac{1}{2}M_mr_m^2) } kgm^2
\displaystyle{M_e=0.1} kg

MATLAB
%beam1.m
%-----
 clear all, close all
 L=1; D=0.005; A=pi/4*D^2;
 rho=7980; E=195000e6; I=pi/64*D^4;
 J0=0.5*1*0.01; Me=0.1;
 J=(J0+1/3*rho*A*L^3+Me*L^2)/(rho*A*L^3); beta=Me/(rho*A*L);
 T=1/(L^2*sqrt(rho*A/(E*I)));
%-----
 x=0:0.01:30;
 y=err(x,beta);
 figure(1)
 plot(x,sign(y),[0 30],[0 0]); axis([0 30 -2 2]);
 N=3;
% w=locate(N);
% om=[];
% for i=1:N
%   x=fsolve(w(1,i),err); om=[om x];
% end
 om=[1.3604444, 4.0789285, 7.1670195]
%-----
 n_d=100; h=L/n_d; x=0:h:L; x=x';
 y1=phi(1,x,om); y2=phi(2,x,om); y3=phi(3,x,om);
 figure(2)
 plot(x,y1,x,y2,x,y3)
%-----
 y1=dphi(1,x,om); y2=dphi(2,x,om); y3=dphi(3,x,om);
 figure(2)
 plot(x,y1,x,y2,x,y3)
%-----
 mode_fun=[]; 
 for i=1:N, mode_fun =[mode_fun  phi(i,x,om) ]; end
 mode_dfun=[]; 
 for i=1:N, mode_dfun=[mode_dfun dphi(i,x,om)]; end
%-----
 t_simp=zeros(1, n_d+1);
 t_simp(1,1)=1/3*h;
 for i=1:(n_d+1)/2, t_simp(1,2*i)=2/3*h; t_simp(1,2*i+1)=4/3*h; end
 t_simp(1,n_d+1)=1/3*h;
 c_simp=t_simp(1,:);
%-----
 for i=1:N
   m(i) = c_simp*(x.*mode_fun(:,i))+beta*mode_fun(n_d+1,i);
   OM2(i)=om(i)^4;
 end
% M=[J m';m eye(N,N)];
% K=zeros(N+1,N+1); K(2:N+1,2:N+1)=diag(OM2);
% AA=[zeros(N+1,N+1) eye(N+1,N+1);
% -M\K zeros(N+1,N+1)];
% B =[zeros(N+1,1); M\eye(N+1,1)];
 M21=m'; K22=diag(OM2);
 AA=[zeros(N+1,N+1) eye(N+1,N+1);
     [-K22 K22*m';zeros(1,N+1)] zeros(N+1,N+1)];
 Ta=0.1;
 AA(2*(N+1),2*(N+1))=-1/Ta; 
 B =[zeros(2*N+1,1); 1/Ta];
 C=[eye(N,N) -M21 zeros(N,N+1)];
 CC=[mode_fun*C;zeros(1,N),1,zeros(1,N+1)];
 P=ss(AA,B,CC,[]);
 G=tf(P);
 w=logspace(-3,3,100);
 figure(3)
 for i=[1,21,41,61,81,101]
   bode(G(i,1),w),hold on
 end
%-----
 sys=ss(AA,B,CC([1,21,41,61,81,101],:),[])
 state0=(L/(E*I))*B; 
%state0=zeros(8,1)
 t0=0; t=0:T/1000:T;
 figure(4)
 initial(sys,state0,t)
%-----
 [F,p]=opt(AA,B,eye(8,8),eye(8,8),1)
 ACL=AA-B*F;
 sysCL=ss(ACL,B,CC([1,21,41,61,81,101],:),[]) 
 figure(5)
 initial(sysCL,state0,t)
%====
 function errval=err(x,beta)
   errval=beta*x.*(cosh(x).*sin(x)-sinh(x).*cos(x))-(1+cosh(x).*cos(x));
 end
%-----
 function y=phi(i,x,om)
   y=(sinh(om(i))+sin(om(i))).*(cosh(om(i)*x)-cos(om(i)*x))...
   -(cosh(om(i))+cos(om(i))).*(sinh(om(i)*x)-sin(om(i)*x));
   y=y/max(abs(y));
 end
%-----
 function y=dphi(i,x,om)
   y=(sinh(om(i))+sin(om(i))).*(sinh(om(i)*x)+sin(om(i)*x))...
   -(cosh(om(i))+cos(om(i))).*(cosh(om(i)*x)-cos(om(i)*x));
   y=om(i)*y;
   y=y/max(abs(y));
 end
%-----
%eof
SCILAB

柔軟ビーム

[1] 柔軟構造物の制振問題をどう取り扱うかを考えて行きます。

この写真は米国の某大学で製作された制御実験装置です。柔軟ビームの一端をロボットアームで把持し、振動を抑制しながら回転させることが制御目的です。この柔軟ビームは水平方向ばかりでなく、垂直方向にも振動するのですが、ここでは水平方向だけの振動抑制問題を考えます。参考にしたのは次の文献です。

阿部・児島著:「無駄時間・分布定数系の制御」、コロナ社、2007

この本の6章「振動系」では、次のような制御対象「柔軟ビーム」を扱っています。

ここで、ビームの長さをL[m]、断面積をA[m^2]、密度をA[kg/m^3]、縦弾性係数をE[N/m^2]、断面2次モーメントをI[m^4]、ハブの回転慣性モーメントをJ_0[kgm^2]、ペイロードをM_e[kg]とします。また、時刻t[sec]における、ハブの回転角を\theta(t)[rad]、ハブの支持点から距離x[m]のビーム上の点の弾性変位をy(x,t)[m]、その点の座標を(X(t),Y(t))とします。

このときハブの支持点x=0において次が成り立ちます。

\displaystyle{(1)\quad y(0,t)=\frac{\partial y(0,t)}{\partial x}=0}

いま、\sin(\cdot)\cos(\cdot)をそれぞれS_{(\cdot)}C_{(\cdot)}と略記すると、次式が成り立ちます。

\displaystyle{(2a)\quad X=xC_\theta-yS_\theta\ \Rightarrow\ \dot{X}=-xS_\theta\dot{\theta}-\dot{y}S_\theta-yC_\theta\dot{\theta}=-(xS_\theta+yC_\theta)\dot{\theta}-\dot{y}S_\theta }
\displaystyle{ \Rightarrow\ \dot{X}^2=(xS_\theta+yC_\theta)^2\dot{\theta}^2+2(xS_\theta+yC_\theta)\dot{\theta}\dot{y}S_\theta+\dot{y}^2S_\theta^2 }
\displaystyle{(2b)\quad Y=xS_\theta+yC_\theta\ \Rightarrow\ \dot{Y}=xC_\theta\dot{\theta}+\dot{y}C_\theta-yS_\theta\dot{\theta}=(xC_\theta-yS_\theta)\dot{\theta}+\dot{y}C_\theta}
\displaystyle{ \Rightarrow\ \dot{Y}^2=(xC_\theta-yS_\theta)^2\dot{\theta}^2+2(xC_\theta-yS_\theta)\dot{\theta}\dot{y}C_\theta+\dot{y}^2C_\theta^2 }
\displaystyle{(2c)\quad \dot{X}^2+\dot{Y}^2=(x^2+y^2)\dot{\theta}^2+2x\dot{\theta}\dot{y}+\dot{y}^2 }

以下では、双曲線関数\sinh(\cdot)\cosh(\cdot)をそれぞれS^h_{(\cdot)}C^h_{(\cdot)}と略記し、次の基本式を多用します。

\displaystyle{(3a)\quad C_x^h=\frac{1}{2}(e^x+e^{-x}),S_x^h=\frac{1}{2}(e^x-e^{-x}) },
\displaystyle{(3b)\quad C_x=\frac{1}{2}(e^{jx}+e^{-jx}),S_x=\frac{1}{2}(e^{jx}-e^{-jx}) }
\displaystyle{(3c)\quad (C_x^h)'=S_x^h,\ (S_x^h)'=C_x^h}, \displaystyle{C_x'=-S_x,\ S_x'=C_x}
\displaystyle{(3d)\quad C_x^{h2}-S_x^{h2}=1}, \displaystyle{C_x^2+S_x^2=1}

また、次のような変分を取ることを頻繁に行います。

\displaystyle{(4)\quad  \begin{array}{l} y=f(x) \Rightarrow \\ \delta y=\epsilon(\left.\frac{f(x+\epsilon x_\epsilon)}{d\epsilon}\right|_{\epsilon=0})=\epsilon(\left.f'(x+\epsilon x_\epsilon)x_\epsilon\right|_{\epsilon=0})=f'(x)\epsilon x_\epsilon=f'(x)\delta x \end{array} }

●柔軟ビームの運動方程式を、Hamilton Principleに基づいて導出します。

\displaystyle{(5a)\quad \int_{t_0}^{t_1} ( \delta L + \delta W ) dt =\int_{t_0}^{t_1} ( \delta T-\delta V + \delta W ) dt=0 }

\displaystyle{(5b)\quad \delta T=\delta T_0+ \delta T_1+ \delta T_2 }

\displaystyle{(6a)\quad T_0 = \frac{1}{2} J_0\dot{\theta}^2 }

\displaystyle{(6b)\quad T_0(\epsilon) = \frac{1}{2} J_0(\dot{\theta}+\epsilon\dot{\theta}_\epsilon)^2 }

\displaystyle{(6c)\quad \frac{dT_0(\epsilon) }{d\epsilon}=J_0(\dot{\theta}+\epsilon\dot{\theta}_\epsilon)\dot{\theta}_\epsilon }

\displaystyle{(6d)\quad \delta T_0=\epsilon\left(\left.\frac{dT_0(\epsilon)}{d\epsilon}\right|_{\epsilon=0}\right)=J_0\dot{\theta}\epsilon\dot{\theta}_\epsilon=J_0\dot{\theta}\delta\dot{\theta} }

\displaystyle{(6e)\quad \int_{t_0}^{t_1}\delta T_0 dt= \int_{t_0}^{t_1} J_0\dot{\theta}\delta\dot{\theta} dt = \left[J_0\dot{\theta}\delta{\theta} \right]_{t_0}^{t_1} -\int_{t_0}^{t_1} J_0\ddot{\theta}\delta{\theta} dt = -\int_{t_0}^{t_1} J_0\ddot{\theta}\delta{\theta} dt }

\displaystyle{(7a)\quad T_1 = \frac{1}{2} \rho A \int_0^{L} (\dot{X}^2+\dot{Y}^2)dx }
\displaystyle{= \frac{1}{2} \rho A \int_0^{L} ((x^2+y^2)\dot{\theta}^2+2x\dot{\theta}\dot{y}+\dot{y}^2)dx }

\displaystyle{(7b)\quad T_1(\epsilon)}
\displaystyle{ = \frac{1}{2} \rho A \int_0^{L} ((x^2+({y}+\epsilon{y}_\epsilon)^2)(\dot{\theta}+\epsilon\dot{\theta}_\epsilon)^2+2x(\dot{\theta}+\epsilon\dot{\theta}_\epsilon)(\dot{y}+\epsilon\dot{y}_\epsilon)+(\dot{y}+\epsilon\dot{y}_\epsilon)^2 )dx }

\displaystyle{(7c)\quad \frac{dT_1(\epsilon) }{d\epsilon}=\rho A \int_0^{L} ( ({y}+\epsilon{y}_\epsilon){y}_\epsilon(\dot{\theta}+\epsilon\dot{\theta}_\epsilon)^2+(x^2+({y}+\epsilon{y}_\epsilon)^2)(\dot{\theta}+\epsilon\dot{\theta}_\epsilon)\dot{\theta}_\epsilon }
\displaystyle{ +x\dot{\theta}_\epsilon(\dot{y}+\epsilon\dot{y}_\epsilon)+x(\dot{\theta}+\epsilon\dot{\theta}_\epsilon)\dot{y}_\epsilon +(\dot{y}+\epsilon\dot{y}_\epsilon)\dot{y}_\epsilon )dx }

\displaystyle{(7d)\quad \delta T_1=\epsilon\left(\left.\frac{dT_1(\epsilon)}{d\epsilon}\right|_{\epsilon=0}\right)}
\displaystyle{=\rho A \int_0^{L} ( {y}\epsilon{y}_\epsilon\dot{\theta}^2+(x^2+{y}^2)\dot{\theta\epsilon}\dot{\theta}_\epsilon +x\epsilon\dot{\theta}_\epsilon\dot{y}+x\dot{\theta}\epsilon\dot{y}_\epsilon+\dot{y}\epsilon\dot{y}_\epsilon )dx }
\displaystyle{=\rho A \int_0^{L} ({y}\dot{\theta}^2\epsilon{y}_\epsilon+(x^2+{y}^2)\dot{\theta\epsilon}\dot{\theta}_\epsilon+x\dot{y}\epsilon\dot{\theta}_\epsilon+x\dot{\theta}\epsilon\dot{y}_\epsilon+\dot{y}\epsilon\dot{y}_\epsilon )dx }
\displaystyle{=\rho A \int_0^{L} ({y}\dot{\theta}^2\delta{y}+((x^2+{y}^2)\dot{\theta}+x\dot{y})\delta\dot{\theta}+(x\dot{\theta}+\dot{y})\delta\dot{y} )dx }

\displaystyle{(7e)\quad \int_{t_0}^{t_1}\delta T_1 dt=\int_{t_0}^{t_1}\rho A \int_0^{L} ({y}\dot{\theta}^2\delta{y}+((x^2+{y}^2)\dot{\theta}+x\dot{y})\delta\dot{\theta}+(x\dot{\theta}+\dot{y})\delta\dot{y} )dxdt }
\displaystyle{ =\int_{t_0}^{t_1}\rho A \int_0^{L} {y}\dot{\theta}^2\delta{y}dxdt+\int_{t_0}^{t_1}\rho A \int_0^{L} ((x^2+{y}^2)\dot{\theta}+x\dot{y})\delta\dot{\theta}dxdt+\int_{t_0}^{t_1}\rho A \int_0^{L} (x\dot{\theta}+\dot{y})\delta\dot{y} dxdt }
\displaystyle{ =\int_{t_0}^{t_1}\rho A \int_0^{L} {y}\dot{\theta}^2\delta{y}dxdt }
\displaystyle{ +\left[\rho A \int_0^{L} (x^2+{y}^2)\dot{\theta}+x\dot{y})\delta{\theta}dx\right]_{t_0}^{t_1}-\int_{t_0}^{t_1}\rho A \int_0^{L} \frac{d}{dt}((x^2+{y}^2)\dot{\theta}+x\dot{y})\delta{\theta}dxdt }
\displaystyle{ +\left[\rho A \int_0^{L} (x\dot{\theta}+\dot{y}) \delta{y}dx\right]_{t_0}^{t_1}-\int_{t_0}^{t_1}\rho A \int_0^{L}\frac{d}{dt}(x\dot{\theta}+\dot{y})\delta{y}dxdt }
\displaystyle{ =-\int_{t_0}^{t_1}\rho A \int_0^{L} \frac{d}{dt}((x^2+{y}^2)\dot{\theta}+x\dot{y})\delta{\theta}dxdt -\int_{t_0}^{t_1}\rho A \int_0^{L} ({y}\dot{\theta}^2+\frac{d}{dt}(x\dot{\theta}+\dot{y}))\delta{y}dxdt }

\displaystyle{(8a)\quad T_2 = \frac{1}{2} M_e (\dot{X}_L^2+\dot{Y}_L^2) }
\displaystyle{= \frac{1}{2} M_e ((L^2+y^2(L))\dot{\theta}^2+2L\dot{\theta}\dot{y}(L)+\dot{y}^2(L)) }

\displaystyle{(8b)\quad T_2(\epsilon) = \frac{1}{2} M_e ((L^2+({y}(L)+\epsilon{y}_\epsilon(L))^2)(\dot{\theta}+\epsilon\dot{\theta}_\epsilon)^2 }
\displaystyle{+2L(\dot{\theta}+\epsilon\dot{\theta}_\epsilon)(\dot{y}(L)+\epsilon\dot{y}_\epsilon(L))+(\dot{y}(L)+\epsilon\dot{y}_\epsilon(L))^2 ) }

\displaystyle{(8c)\quad \frac{dT_2(\epsilon)}{d\epsilon}}
\displaystyle{=M_e (({y}(L)+\epsilon{y}_\epsilon(L)){y}_\epsilon(L)(\dot{\theta}+\epsilon\dot{\theta}_\epsilon)^2+(L^2+({y}(L)+\epsilon{y}_\epsilon(L))^2)(\dot{\theta}+\epsilon\dot{\theta}_\epsilon)\dot{\theta}_\epsilon }
\displaystyle{+L\dot{\theta}_\epsilon(\dot{y}(L)+\epsilon\dot{y}_\epsilon(L))+L(\dot{\theta}+\epsilon\dot{\theta}_\epsilon)\dot{y}_\epsilon(L)+(\dot{y(L)}+\epsilon\dot{y}_\epsilon(L))\dot{y}_\epsilon(L) ) }

\displaystyle{(8d)\quad \delta T_2=M_e ({y}(L)\dot{\theta}^2\delta{y}(L)+((L^2+{y}^2(L))\dot{\theta}+L\dot{y}(L))\delta\dot{\theta}+(L\dot{\theta}+\dot{y}(L))\delta\dot{y}(L) ) }

\displaystyle{(8e)\quad \int_{t_0}^{t_1}\delta T_2 dt }
\displaystyle{=-\int_{t_0}^{t_1}M_e \frac{d}{dt}((L^2+{y}^2(L))\dot{\theta}+L\dot{y}(L))\delta{\theta}dt -\int_{t_0}^{t_1}M_e ({y}(L)\dot{\theta}^2+\frac{d}{dt}(L\dot{\theta}+\dot{y}(L)))\delta{y}(L)dt }

\displaystyle{(9a)\quad V=\frac{1}{2} EI \int_0^{L} y''^2 dx\quad(y''=\frac{\partial^2 y}{\partial x^2}) }

\displaystyle{(9b)\quad V(\epsilon) = \frac{1}{2} EI \int_0^{L} (y'' +\epsilon{y_\epsilon''} )^2 dx }

\displaystyle{(9c)\quad frac{dV(\epsilon) }{d\epsilon}=EI \int_0^{L} (y'' +\epsilon{y_\epsilon''} ){y_\epsilon''}dx }

\displaystyle{(9d)\quad \delta V=\epsilon\left(\left.\frac{dV(\epsilon)}{d\epsilon}\right|_{\epsilon=0}\right) = EI \int_0^{L} y'' \epsilon{y_\epsilon''} dx = EI \int_0^{L} y'' \delta y'' dx }
\displaystyle{ = EI \left[y'' \delta y'\right]_0^{L} - EI \int_0^{L} y''' \delta y' dx }
\displaystyle{ = EI y''(L) \delta y'(L)-EI \left[y''' \delta y\right]_0^{L} + EI \int_0^{L} y'''' \delta y dx }
\displaystyle{ = EI y''(L) \delta y'(L)-EI y'''(L) \delta y(L) + EI \int_0^{L} y'''' \delta y dx }

\displaystyle{(9e)\quad \int_{t_0}^{t_1}\delta V dt=\int_{t_0}^{t_1} (EI y''(L) \delta y'(L)-EI y'''(L) \delta y(L) + EI \int_0^{L} y'''' \delta y dx )dt }

\displaystyle{(10a)\quad W = u\theta }

\displaystyle{(10b)\quad W(\epsilon) = u(\theta+\epsilon\theta_\epsilon) }

\displaystyle{(10c)\quad \frac{dW(\epsilon) }{d\epsilon}= u\theta_\epsilon }

\displaystyle{(10d)\quad \delta W=\epsilon\left(\left.\frac{dW(\epsilon)}{d\epsilon}\right|_{\epsilon=0}\right)=u\epsilon\theta_\epsilon=u\delta\theta }

\displaystyle{(10e)\quad \int_{t_0}^{t_1}\delta W dt= \int_{t_0}^{t_1} u\delta\theta dt }

●以上から、ハミルトン原理を表す上式の各項を

\displaystyle{(11a)\quad \int_{t_0}^{t_1}\delta T_0 dt=-\int_{t_0}^{t_1} J_0\ddot{\theta}\delta{\theta} dt }
\displaystyle{(11b)\quad \int_{t_0}^{t_1}\delta T_1 dt= }
\displaystyle{-\int_{t_0}^{t_1}\rho A \int_0^{L} \frac{d}{dt}((x^2+{y}^2)\dot{\theta}+x\dot{y})\delta{\theta}dxdt -\int_{t_0}^{t_1}\rho A \int_0^{L} ({y}\dot{\theta}^2+\frac{d}{dt}(x\dot{\theta}+\dot{y}))\delta{y}dxdt }
\displaystyle{(11c)\quad \int_{t_0}^{t_1}\delta T_2 dt= }
\displaystyle{=-\int_{t_0}^{t_1}M_e \frac{d}{dt}((L^2+{y}^2(L))\dot{\theta}+L\dot{y}(L))\delta{\theta}dt -\int_{t_0}^{t_1}M_e ({y}(L)\dot{\theta}^2+\frac{d}{dt}(L\dot{\theta}+\dot{y}(L)))\delta{y}(L)dt }
\displaystyle{(11d)\quad \int_{t_0}^{t_1}\delta V dt=\int_{t_0}^{t_1} (EI y''(L) \delta y'(L)-EI y'''(L) \delta y(L) + EI \int_0^{L} y'''' \delta y dx )dt }
\displaystyle{(11e)\quad \int_{t_0}^{t_1}\delta W dt= \int_{t_0}^{t_1} u\delta\theta dt }

のように得たので、次式が成り立ちます。

\displaystyle{(12)\quad \int_{t_0}^{t_1} ( \delta T_0+ \delta T_1+ \delta T_2-\delta V + \delta W ) dt= }
\displaystyle{ -\int_{t_0}^{t_1} J_0\ddot{\theta}\delta{\theta} dt }
\displaystyle{ -\int_{t_0}^{t_1}\rho A \int_0^{L} \frac{d}{dt}((x^2+{y}^2)\dot{\theta}+x\dot{y})\delta{\theta}dxdt -\int_{t_0}^{t_1}\rho A \int_0^{L} ({y}\dot{\theta}^2+\frac{d}{dt}(x\dot{\theta}+\dot{y}))\delta{y}dxdt }
\displaystyle{ -\int_{t_0}^{t_1}M_e \frac{d}{dt}((L^2+{y}^2(L))\dot{\theta}+L\dot{y}(L))\delta{\theta}dt -\int_{t_0}^{t_1}M_e ({y}(L)\dot{\theta}^2+\frac{d}{dt}(L\dot{\theta}+\dot{y}(L)))\delta{y}(L)dt }
\displaystyle{ -\int_{t_0}^{t_1} (EI y''(L) \delta y'(L)-EI y'''(L) \delta y(L) + EI \int_0^{L} y'''' \delta y dx )dt }
\displaystyle{ +\int_{t_0}^{t_1} u\delta\theta dt }
\displaystyle{=-\int_{t_0}^{t_1}\underline{ (J_0\ddot{\theta}+M_e \frac{d}{dt}((L^2+{y}^2(L))\dot{\theta}+L\dot{y}(L))+\rho A \int_0^{L} \frac{d}{dt}((x^2+{y}^2)\dot{\theta}+x\dot{y})dx -u)} \delta\theta dt }
\displaystyle{ -\int_{t_0}^{t_1}\underline{ (\rho A \int_0^{L} ({y}\dot{\theta}^2+\frac{d}{dt}(x\dot{\theta}+\dot{y})) dx + EI \int_0^{L} y'''' dx)}\delta y dt }
\displaystyle{ -\int_{t_0}^{t_1}\underline{(M_e ({y}(L)\dot{\theta}^2+\frac{d}{dt}(L\dot{\theta}+\dot{y}(L)))-EI y'''(L) )}\delta{y}(L)dt }
\displaystyle{ -\int_{t_0}^{t_1} \underline{EI y''(L) }\delta y'(L) dt }=0

これから各変分の係数(下線部)を0と置いて、柔軟ビームの運動方程式として次式を得ます。

\displaystyle{(13a)\quad J_0\ddot{\theta} +M_e \frac{d}{dt}((L^2+{y}^2(L))\dot{\theta}+L\dot{y}(L)) +\rho A \int_0^{L} \frac{d}{dt}((x^2+{y}^2)\dot{\theta}+x\dot{y})dx -u=0 }
\displaystyle{(13b)\quad \rho A \int_0^{L} ({y}\dot{\theta}^2+\frac{d}{dt}(x\dot{\theta}+\dot{y})) dx + EI \int_0^{L} y'''' dx =0 }
\displaystyle{(13c)\quad M_e ({y}(L)\dot{\theta}^2+\frac{d}{dt}(L\dot{\theta}+\dot{y}(L)))-EI y'''(L) =0 }
\displaystyle{(13d)\quad EI y''(L) }=0

●高次項や高階微分項は微小であるとして、これらの近似を行います。まず第1式(13a)は

\displaystyle{(14a)\quad J_0\ddot{\theta} +M_e L^2\ddot{\theta}+M_e\frac{d}{dt}({y}^2(L)\dot{\theta})+M_eL\ddot{y}(L) }
\displaystyle{+\rho A \int_0^{L} (x^2\ddot{\theta}+\frac{d}{dt}({y}^2\dot{\theta}))dx +\rho A \int_0^{L}x\ddot{y}dx -u=0 }

においてy^2が微小であるとして、次のように近似します。

\displaystyle{(14a')\quad \underbrace{(J_0+\frac{1}{3}\rho AL^3+M_eL^2)}_J \ddot{\theta}+M_e L\ddot{y}(L)+\rho A \int_0^{L} x\ddot{y}dx -u=0 }

また、第2式(13b)と第3式(13c)は、\dot{\theta}^2が微小であるとして、次のように近似します。

\displaystyle{(14b)\quad \rho A \int_0^{L} (x\ddot{\theta}+\ddot{y}) dx + EI \int_0^{L} y'''' dx =0 }
\displaystyle{(14c)\quad M_e (L\ddot{\theta}+\ddot{y}(L))-EI y'''(L) =0 }

これらを次のように無次元化します。

(15a)\quad \frac{L}{EI}\times第1式(14a’):
\displaystyle{\underbrace{\frac{J}{\rho AL^3}}_{\alpha} \underbrace{\frac{d^2\theta}{d(\frac{t}{L^2\sqrt{\frac{\rho A}{EI}}})^2}}_{\ddot{\theta}} +\underbrace{\frac{M_e}{\rho AL}}_{\beta} \underbrace{\frac{L}{L}}_1 \underbrace{\frac{d^2\frac{y(L)}{L}}{d(\frac{t}{L^2\sqrt{\frac{\rho A}{EI}}})^2}}_{\ddot{\eta}(1)} +\int_0^{\frac{L}{L}} \underbrace{\frac{x}{L}}_\xi\underbrace{\frac{d^2\frac{y}{L}}{d(\frac{t}{L^2\sqrt{\frac{\rho A}{EI}}})^2}}_{\ddot{\eta}} \underbrace{d\frac{x}{L}}_{d\xi} -\underbrace{\frac{u}{\frac{EI}{L}}}_{u'}=0 }
(15b)\quad \frac{L^2}{EI}\times第2式(14b):
\displaystyle{\int_0^{\frac{L}{L}} (\underbrace{\frac{x}{L}}_\xi\underbrace{\frac{d^2\theta}{d(\frac{t}{L^2\sqrt{\frac{\rho A}{EI}}})^2}}_{\ddot{\theta}} +\underbrace{\frac{d^2\frac{y}{L}}{d(\frac{t}{L^2\sqrt{\frac{\rho A}{EI}}})^2}}_{\ddot{\eta}}) \underbrace{d\frac{x}{L}}_{d\xi} + \int_0^{\frac{L}{L}} \underbrace{\frac{d^4\frac{y}{L}}{d(\frac{x}{L})^4}}_{\eta''''} \underbrace{d\frac{x}{L}}_{d\xi} =0 }
(15c)\quad \frac{L^2}{EI}\times第3式(14c):
\displaystyle{\underbrace{\frac{M_e}{\rho AL}}_{\beta} (\underbrace{\frac{L}{L}}_1\underbrace{\frac{d^2\theta}{d(\frac{t}{L^2\sqrt{\frac{\rho A}{EI}}})^2}}_{\ddot{\theta}}+\underbrace{\frac{d^2\frac{y(L)}{L}}{d(\frac{t}{L^2\sqrt{\frac{\rho A}{EI}}})^2}}_{\ddot{\eta}(1)})-\underbrace{\frac{d^3\frac{y(L)}{L}}{d(\frac{x}{L})^3}}_{\eta'''(1)} =0}
(15d)\quad \frac{L}{EI}\times第4式(13d):
\displaystyle{\underbrace{\frac{d^2\frac{y}{L}}{d(\frac{x}{L})^2}}_{\eta''(1)} }=0}

すなわち、代表長さL、代表時間T=L^2\sqrt{\frac{\rho A}{EI}}、代表トルク\frac{EI}{L}として、無次元化した柔軟ビームの運動方程式は次式となります。

\displaystyle{(16a)\quad \alpha\ddot{\theta}+\beta\ddot{\eta}(1)+\int_0^1\xi\ddot{\eta}d\xi-u'=0}
\displaystyle{(16b)\quad \int_0^1(\xi\ddot{\theta}+\ddot{\eta}+\eta'''')d\xi=0}
\displaystyle{(16c)\quad \beta (\ddot{\theta}+\ddot{\eta}(1))-\eta'''(1)=0}
\displaystyle{(16d)\quad \eta''(1)=0}

ただし

\displaystyle{(17a)\quad T=L^2\sqrt{\frac{\rho A}{EI}},\ \tau=\frac{t}{T}}
\displaystyle{(17b)\quad \xi=\frac{x}{L},\ \eta=\frac{y}{L},\ u'=\frac{u}{\frac{EI}{L}}}
\displaystyle{(17c)\quad \alpha=\frac{J}{\rho AL^3}=\frac{J_0+\frac{1}{3}\rho AL^3+M_eL^2}{\rho AL^3}=\frac{J_0}{\rho AL^3}+\frac{1}{3}+\beta }
\displaystyle{(17d)\quad \beta=\frac{M_e}{\rho AL}}

[2] 以下では、モード法による求解方法を考えていきます。

そのために、\ddot{\theta}=0を仮定すると

\displaystyle{(18a)\quad \eta''''+\ddot{\eta}=0}
\displaystyle{(18b)\quad \eta'''(1)=\beta\ddot{\eta}(1)}
\displaystyle{(18c)\quad \eta(0)=\eta'(0)=\eta''(1)=0}

を得ます。ここで、変数分離\eta(\xi,\tau)=\phi(\xi)r(\tau)を行います。

\displaystyle{(19a)\quad \phi''''r +\phi\ddot{r} =0 }
\displaystyle{(19b)\quad \phi'''(1)r =\beta\phi(1)\ddot{r} }
\displaystyle{(19c)\quad \phi(0)r=\phi'(0)r=\phi''(1)r =0 }

さらに、\displaystyle{\Omega^2=-\frac{\ddot{r}}{r} }, \displaystyle{ \ddot{r}+\Omega^2r =0 }を仮定しますと

\displaystyle{(20a)\quad \phi'''' -\Omega^2\phi =0 }
\displaystyle{(20b)\quad \phi'''(1) =-\beta\Omega^2\phi(1) }
\displaystyle{(20c)\quad \phi(0)=\phi'(0)=\phi''(1) =0 }

を得ます。これから

\displaystyle{(21a)\quad \phi'''' -\Omega^2\phi =0 }
\displaystyle{\cdot\qquad\Downarrow\qquad \omega^4=\Omega^2}
\displaystyle{(21b)\quad \phi'''' -\omega^4\phi =0 }
\displaystyle{\cdot\qquad\Downarrow\qquad \phi(\xi)=c_1e^{\omega\xi}+c_2e^{-\omega\xi}+c_3e^{j\omega\xi}+c_4e^{-j\omega\xi}}
\displaystyle{(21c)\quad \phi(\xi)=c_1C_{\omega\xi}+c_2S_{\omega\xi}+c_3C^h_{\omega\xi}+c_4S^h_{\omega\xi}}
\displaystyle{\cdot\qquad\Downarrow\qquad\phi(0)=\phi'(0)=\phi''(1) =0}
\displaystyle{(21d)\quad c_1+c_3=0,c_2+c_4=0}
\displaystyle{c_3(C^h_{\omega}+C_{\omega})+c_4(S^h_{\omega}+S_{\omega})=0}
\displaystyle{\cdot\qquad\Downarrow\qquad for\ arbitrary\ \gamma}
\displaystyle{(21f)\quad c_3=-c_1=\alpha(S^h_{\omega}+S_{\omega}),c_4=-c_2=-\gamma(C^h_{\omega}+C_{\omega})}
\displaystyle{\cdot\qquad\Downarrow\qquad }
\displaystyle{(21g)\quad \phi(x)=\gamma((S^h_{\omega}+S_{\omega})(C^h_{\omega\xi}-C_{\omega\xi})-(C^h_{\omega}+C_{\omega})(S^h_{\omega\xi}-S_{\omega\xi}))}

を得ます。さらに\omegaが満足すべき制約式を次のように得ます。

\displaystyle{(22a)\quad \phi=\gamma((S^h_{\omega}+S_{\omega})(C^h_{\omega\xi}-C_{\omega\xi})-(C^h_{\omega}+C_{\omega})(S^h_{\omega\xi}-S_{\omega\xi}))}
\displaystyle{\phi'=\gamma\omega((S^h_{\omega}+S_{\omega})(S^h_{\omega\xi}+S_{\omega\xi})-(C^h_{\omega}+C_{\omega})(C^h_{\omega\xi}-C_{\omega\xi}))}
\displaystyle{\phi''=\gamma\omega^2((S^h_{\omega}+S_{\omega})(C^h_{\omega\xi}+C_{\omega\xi})-(C^h_{\omega}+C_{\omega})(S^h_{\omega\xi}+S_{\omega\xi}))}
\displaystyle{\phi'''=\gamma\omega^3((S^h_{\omega}+S_{\omega})(S^h_{\omega\xi}-S_{\omega\xi})-(C^h_{\omega}+C_{\omega})(C^h_{\omega\xi}+C_{\omega\xi}))}
\displaystyle{\cdot\qquad\Downarrow }
\displaystyle{(22b)\quad \phi(1)=2\gamma(C^h_{\omega}S_{\omega}-S^h_{\omega}C_{\omega})}
\displaystyle{\phi'''(1)=-2\gamma\omega^3(1+C^h_{\omega}C_{\omega})}
\displaystyle{\cdot\qquad\Downarrow\qquad \phi'''(1) =-\beta\Omega^2\phi(1)}
\displaystyle{(22c)\quad  -2\gamma\omega^3(1+C^h_{\omega}C_{\omega}) =-\beta\omega^42\gamma(C^h_{\omega}S_{\omega}-S^h_{\omega}C_{\omega})}
\displaystyle{\cdot\qquad\Downarrow\qquad }
\displaystyle{(22d)\quad \beta\omega(C^h_{\omega}S_{\omega}-S^h_{\omega}C_{\omega})-(1+C^h_{\omega}C_{\omega})=0}

●これを満足する\omegaを、\omega_1,\omega_2,\cdotsとしますと、次のモード関数群を得たことになります。

\displaystyle{(23a)\quad \phi_i(x)=\gamma_i((S^h_{\omega_i}+S_{\omega_i})(C^h_{\omega_i\xi}-C_{\omega_i\xi})-(C^h_{\omega_i}+C_{\omega_i})(S^h_{\omega_i\xi}-S_{\omega_i\xi}))}

ただし

\displaystyle{(23b)\quad \beta\omega_i(C^h_{\omega_i}S_{\omega_i}-S^h_{\omega_i}C_{\omega_i})-(1+C^h_{\omega_i}C_{\omega_i})=0}

これらのモード関数はお互いに直交することが次のようにして示されます(i,j=1,2,\cdots)。

\displaystyle{(24a)\quad \int_0^1 \phi''_i\phi''_jd\xi=[ \phi''_i\phi'_j]_0^1-\int_0^1 \phi'''_i\phi'_jd\xi}
\displaystyle{=\underbrace{\phi''_i(1)}_0\phi'_j(1)-\phi''_i(0)\underbrace{\phi'_j(0)}_0-\int_0^1 \phi'''_i\phi'_jd\xi}
\displaystyle{=-[ \phi'''_i\phi_j]_0^1+\int_0^1 \phi''''_i\phi_jd\xi}
\displaystyle{=\underbrace{-\phi'''_i(1)}_{\beta\Omega_i^2\phi_i(1)}\phi_j(1)+\phi'''_i(0)\underbrace{\phi_j(0)}_0+\int_0^1 \Omega_i^2\phi_i\phi_jd\xi}
\displaystyle{=\Omega_i^2(\int_0^1 \phi_i\phi_jd\xi+\beta\phi_i(1)\phi_j(1))}
\displaystyle{\cdot\qquad\Downarrow }
\displaystyle{(24b)\quad \int_0^1 \phi''_i\phi''_jdx=\Omega_i^2(\int_0^1 \phi_i\phi_jd\xi+\beta\phi_i(1)\phi_j(1))}
\displaystyle{\int_0^1 \phi''_j\phi''_idx=\Omega_j^2(\int_0^1 \phi_j\phi_id\xi+\beta\phi_j(1)\phi_i(1))}
\displaystyle{\cdot\qquad\Downarrow }
\displaystyle{(24c)\quad 0=(\Omega_i^2-\Omega_j^2)(\int_0^1 \phi_i\phi_jd\xi+\beta\phi_i(1)\phi_j(1))}
\displaystyle{\cdot\qquad\Downarrow }
\displaystyle{(24d)\quad \int_0^1 \phi_i\phi_jd\xi+\beta\phi_i(1)\phi_j(1)=0\quad(i\ne j)}
\displaystyle{\int_0^1 \phi_i\phi_jd\xi+\beta\phi_i(1)\phi_j(1)\ne0\quad(i=j)}
\displaystyle{\cdot\qquad\Downarrow }
\displaystyle{(24e)\quad \int_0^1 \phi_i\phi_jd\xi+\beta\phi_i(1)\phi_j(1)=\delta_{ij}}
\displaystyle{\cdot\qquad\Downarrow }
\displaystyle{(24f)\quad \int_0^1 \phi''_i\phi''_jd\xi=\Omega_i^2\delta_{ij}}

●結局、弾性変位\eta(\xi,\tau)を、モード関数\phi_i(\xi)を時間関数r_i(\tau)で重み付けて

\displaystyle{(25)\quad \eta(\xi,\tau)=\sum_{i=0}^\infty\phi_i(\xi)r_i(\tau) }

のように表します。この時間関数r_i(\tau)の支配方程式は

\displaystyle{(26a)\quad \alpha\ddot{\theta}+\int_0^1\xi\ddot{\eta}d\xi+\beta\ddot{\eta}(1)=u'}
\displaystyle{(26b)\quad \int_0^1(\xi\ddot{\theta}+\ddot{\eta}+\eta'''')d\xi=0}

から得られます。まず、第1式(26a)から

\displaystyle{(27)\quad \alpha\ddot{\theta}+\int_0^1\xi\ddot{\eta}d\xi+\beta\ddot{\eta}(1) }
\displaystyle{=\alpha\ddot{\theta}+\int_0^1 \xi\sum_{i=0}^\infty\phi_i\ddot{r}_i d\xi+ \beta\sum_{i=0}^\infty\phi_i(1)\ddot{r}_i }
\displaystyle{=\alpha\ddot{\theta}+\sum_{i=0}^\infty\underbrace{(\int_0^1 \xi\phi_i d\xi+ \beta\phi_i(1))}_{m_i}\ddot{r}_i=u' }

を得ます。次に

\displaystyle{(28)\quad \int_0^{1} \phi_j \eta'''' d\xi=[ \phi_j\eta''']_0^1-\int_0^1 \phi'_j\eta'''d\xi}
\displaystyle{=\phi_j(1)\eta'''(1)-\underbrace{\phi_j(0)}_0\eta'''(0)-\int_0^1 \phi'_j\eta'''d\xi}
\displaystyle{=\phi_j(1)\eta'''(1)-[\phi'_j\eta'']_0^1+\int_0^1 \phi''_j\eta''d\xi}
\displaystyle{=\phi_j(1)\eta'''(1)-\phi'_j(1)\underbrace{\eta''(1)}_0+\underbrace{\phi'_j(0)}_0\eta''(0)+\int_0^1 \phi''_j\eta''d\xi}
\displaystyle{=\phi_j(1)\beta(\ddot{\theta}+\ddot{y}(1))+\int_0^1 \phi''_j\sum_{i=0}^\infty\phi''_ir_id\xi}
\displaystyle{=\phi_j(1)\beta(\ddot{\theta}+\sum_{i=0}^\infty\phi_i(1)\ddot{r}_i)+\Omega^2_jr_j}

を考慮して、第2式(26b)から

\displaystyle{(29)\quad \int_0^1\phi_j(\xi\ddot{\theta}+\ddot{\eta}+\eta'''')d\xi }
\displaystyle{=\int_0^{1}\phi_j(\xi\ddot{\theta}+\sum_{i=0}^\infty\phi_i\ddot{r}_i)d\xi +\phi_j(1)\beta(\ddot{\theta}+\sum_{i=0}^\infty\phi_i(1)\ddot{r}_i)+\Omega^2_jr_j }
\displaystyle{=\underbrace{(\int_0^1 \xi\phi_jd\xi+\beta\phi_j(1))}_{m_j}\ddot{\theta} +\sum_{i=0}^\infty\underbrace{(\int_0^1 \phi_j\phi_id\xi+\beta\phi_j(1)\phi_i(1))}_{\delta_{ij}}\ddot{r}_i+\Omega^2_jr_j}
\displaystyle{=m_j\ddot{\theta}+\ddot{r}_j+\Omega_j^2r_j=0}

を得ます。すなわち時間関数r_i(\tau)は次式を満足すべきことがわかります。

\displaystyle{(30a)\quad \alpha\ddot{\theta}+\sum_{i=0}^\infty m_i\ddot{r}_i=u' }
\displaystyle{(30b)\quad m_i\ddot{\theta}+\ddot{r}_i+\Omega_i^2r_i=0\quad(i=1,0,\cdots)}

●これから、柔軟ビームに関するもう一つの運動方程式として、次を得ます。

\displaystyle{(31a)\quad  \underbrace{ \left[\begin{array}{c|ccc} \alpha & m_1 & \dots &m_N \\ \hline m_1 & 1 & & 0 \\ \vdots & & \ddots & \\ m_N & 0 & & 1 \\ \end{array}\right] }_{M=\left[\begin{array}{cc} M_{11} & M_{12} \\ M_{21} & M_{22} \end{array}\right]} \underbrace{ \left[\begin{array}{c} \ddot{\theta} \\ \hline \ddot{r}_1 \\ \vdots \\ \ddot{r}_N \end{array}\right] }_{\ddot{\xi}} + \underbrace{ \left[\begin{array}{c|ccc} 0 & 0 & \dots &0 \\ \hline 0 & \Omega_1^2 & & 0 \\ \vdots & & \ddots & \\ 0 & 0 & & \Omega_N^2 \\ \end{array}\right] }_{K=\left[\begin{array}{cc} K_{11} & K_{12} \\ K_{21} & M_{22} \end{array}\right]} \underbrace{ \left[\begin{array}{c} \theta \\ \hline r_1 \\ \vdots \\ r_N \end{array}\right] }_{\xi} = \underbrace{ \left[\begin{array}{c} 1 \\ \hline 0 \\ \vdots \\ 0 \end{array}\right] }_{B_2} u' }
\displaystyle{(31b)\quad  \eta(\xi)= \underbrace{ \left[\begin{array}{c|ccc} 0 & \phi_1(\xi) & \dots &\phi_N(\xi) \end{array}\right] }_{C_1} \underbrace{ \left[\begin{array}{c} \theta \\ \hline r_1 \\ \vdots \\ r_N \end{array}\right] }_{\xi} }

ただし

\displaystyle{(32a)\quad T=L^2\sqrt{\frac{\rho A}{EI}},\ \tau=\frac{t}{T}}
\displaystyle{(32b)\quad \xi=\frac{x}{L},\ \eta=\frac{y}{L},\ u'=\frac{u}{\frac{EI}{L}}}
\displaystyle{(32c)\quad \alpha=\frac{J}{\rho AL^3},\ J=J_0+\frac{1}{3}\rho AL^3+M_eL^2 }
\displaystyle{(32d)\quad \beta=\frac{M_e}{\rho AL}}
\displaystyle{(32e)\quad m_i=\int_0^1 \xi\phi_jd\xi+\beta\phi_j(1)}
\displaystyle{(32f)\quad \Omega_i^2=\omega_i^4}
\displaystyle{(32g)\quad \beta\omega_i(C^h_{\omega_i}S_{\omega_i}-S^h_{\omega_i}C_{\omega_i})-(1+C^h_{\omega_i}C_{\omega_i})=0}

これから次の状態空間表現を得ます。

\displaystyle{(33a)\quad \underbrace{ \left[\begin{array}{c} \dot{\xi} \\ \ddot{\xi} \end{array}\right] }_{\dot{x}} = \underbrace{ \left[\begin{array}{cc} 0_{N+1\times N+1} & I_{N+1} \\ M^{-1}K & 0_{N+1\times N+1} \end{array}\right] }_{A} \underbrace{ \left[\begin{array}{c} \xi \\ \dot{\xi} \end{array}\right] }_{x} + \underbrace{ \left[\begin{array}{cc} 0_{N+1\times 1} \\ M^{-1}B_2 \end{array}\right] }_{B} u'}
\displaystyle{(33b)\quad \eta(\xi)= \underbrace{ \left[\begin{array}{cc} C_1 & 0_{1\times N} \end{array}\right] }_{C} \underbrace{ \left[\begin{array}{c} \xi \\ \dot{\xi} \end{array}\right] }_{x} }

Note B64 モード関数

●ビーム(梁)の境界条件を、自由支持・ピン支持・固定支持と変えた場合のモード関数と振動数方程式を示します。ここで、Ax=0 が解 x\ne0 を持つための条件 {\rm det}A=0 が使われていることに注意してください。


(藤田勝久:振動工学、森北出版より)

\displaystyle{(1a)\quad M=-EI\frac{\partial^2 y}{\partial x^2} }
\displaystyle{(1b)\quad S=\frac{\partial M}{\partial x}=-EI\frac{\partial^3 y}{\partial x^3} }
\displaystyle{(1c)\quad \frac{\partial S}{\partial x}=-EI\frac{\partial^4 y}{\partial x^4} }

\displaystyle{(2a)\quad \rho A\frac{\partial^2 y}{\partial t^2}=\frac{\partial S}{\partial x} }, \displaystyle{m\frac{\partial^2 y(L)}{\partial t^2}=-S(L) }
\displaystyle{\cdot\qquad\Downarrow }
\displaystyle{(2b)\quad {\rho A}\frac{\partial^2 y}{\partial t^2}+{EI}\frac{\partial^4 y}{\partial x^4}=0 }, \displaystyle{m\frac{\partial^2 y(L)}{\partial t^2}-EI\frac{\partial^3 y(L)}{\partial x^3}=0 }
\displaystyle{\cdot\qquad\Downarrow \times \frac{L^3}{EI}, \times \frac{L^2}{EI} }
\displaystyle{(2c)\quad \frac{\partial^2 \frac{y}{L}}{\partial (\frac{t}{L^2\sqrt{\frac{\rho A}{EI}}})^2}+\frac{\partial^4 \frac{y}{L}}{\partial (\frac{x}{L})^4}=0 }, \displaystyle{\frac{m}{\rho AL}\frac{\partial^2 \frac{y(L)}{L}}{\partial (\frac{t}{L^2\sqrt{\frac{\rho A}{EI}}})^2}-\frac{\partial^3 \frac{y(L)}{L}}{\partial (\frac{x}{L})^3}=0 }
\displaystyle{\cdot\qquad\Downarrow T=L^2\sqrt{\frac{\rho A}{EI}},\ \tau=\frac{t}{T},\ \xi=\frac{x}{L},\ \eta=\frac{y}{L},\ \beta=\frac{m}{\rho AL} }
\displaystyle{(2d)\quad \frac{\partial^2 \eta}{\partial \tau^2}+\frac{\partial^4 \eta}{\partial \xi^4}=0 }, \displaystyle{\beta\frac{\partial^2 \eta(1)}{\partial \tau^2}-\frac{\partial^3 \eta(1)}{\partial \xi^3}=0}
\displaystyle{\cdot\qquad\Downarrow \eta(\xi,\tau)=\phi(\xi)r(\tau) }
\displaystyle{(2e)\quad \phi(\xi)\ddot{r}(\tau)+\frac{\partial^4 \phi(\xi)}{\partial \xi^4}r(\tau)=0 }, \displaystyle{\beta\phi(1)\ddot{r}(\tau)-\frac{\partial^3 \phi(1)}{\partial \xi^3}r(\tau)=0 }
\displaystyle{\cdot\qquad\Downarrow \ddot{r}(\tau)=-\Omega^2r(\tau) }
\displaystyle{(2f)\quad -\phi(\xi)\Omega^2r(\tau)+\frac{\partial^4 \phi(\xi)}{\partial \xi^4}r(\tau)=0 }, \displaystyle{-\phi(1)\Omega^2r(\tau)-\frac{\partial^3 \phi(1)}{\partial \xi^3}r(\tau)=0 }
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{(2g)\quad \frac{\partial^4 \phi}{\partial \xi^4}-\Omega^2\phi(\xi)=0 }, \displaystyle{\frac{\partial^3 \phi(1)}{\partial \xi^3}+\beta\Omega^2\phi(1)=0 }
\displaystyle{\cdot\qquad\Downarrow \omega^4=\Omega^2}
\displaystyle{(2h)\quad \phi''''(\xi)-\omega^4\phi(\xi)=0 }, \displaystyle{\phi'''(1)+\beta\omega^4\phi(1)=0 }
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{(2i)\quad \phi(\xi)=c_1C_{\omega\xi}+c_2S_{\omega\xi}+c_3C^h_{\omega\xi}+c_4S^h_{\omega\xi}}
\displaystyle{\phi'(\xi)=\omega(-c_1S_{\omega\xi}+c_2C_{\omega\xi}+c_3S^h_{\omega\xi}+c_4C^h_{\omega\xi})}
\displaystyle{\phi''(\xi)=\omega^2(-c_1C_{\omega\xi}-c_2S_{\omega\xi}+c_3C^h_{\omega\xi}+c_4S^h_{\omega\xi})}
\displaystyle{\phi'''(\xi)=\omega^3(c_1S_{\omega\xi}-c_2C_{\omega\xi}+c_3S^h_{\omega\xi}+c_4C^h_{\omega\xi})}

\displaystyle{ \begin{array}{|c|c|c|c|}\hline & free & pinned & fixed \\\hline free   & 1^\circ  &        & \\\hline pinned & 3^\circ,3'^\circ & 2^\circ    & \\\hline fixed  & 6^\circ,6'^\circ & 5^\circ    & 4^\circ \\\hline \end{array} }

1^\circ 自由・自由支持の場合 (\beta=0

\displaystyle{\phi''(0)=\phi'''(0)=0, \phi''(1)=\phi'''(1) =0}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{-c_1+c_3=0, -c_2+c_4=0 \Rightarrow c_3=c_1, c_4=c_2}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{\phi''(\xi)=\omega^2(-c_1C_{\omega\xi}-c_2S_{\omega\xi}+c_1C^h_{\omega\xi}+c_2S^h_{\omega\xi})}
\displaystyle{\phi'''(\xi)=\omega^3(c_1S_{\omega\xi}-c_2C_{\omega\xi}+c_1S^h_{\omega\xi}+c_2C^h_{\omega\xi})}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{c_1(C_{\omega}-C^h_{\omega})+c_2(S_{\omega}-S^h_{\omega})=0}
\displaystyle{c_1(S_{\omega}+S^h_{\omega})-c_2(C_{\omega}-C^h_{\omega})=0}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{(C_{\omega}-C^h_{\omega})^2+(S^2_{\omega}-S^{h2}_{\omega})=0}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{\boxed{1-C_{\omega}C^h_{\omega}=0}}

2^\circ ピン・ピン支持の場合

\displaystyle{\phi(0)=\phi''(0)=0,\ \phi(1)=\phi''(1) =0}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{c_1+c_3=0, -c_1+c_3=0 \Rightarrow c_1=c_3=0}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{\phi(\xi)=c_2S_{\omega\xi}+c_4S^h_{\omega\xi}}
\displaystyle{\phi''(\xi)=\omega^2(-c_2S_{\omega\xi}+c_4S^h_{\omega\xi})}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{c_2S_{\omega}+c_4S^h_{\omega}=0, -c_2S_{\omega}+c_4S^h_{\omega}=0 \Rightarrow c_4=0}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{\boxed{S_{\omega}=0}}

3^\circ ピン・自由支持の場合 (\beta=0

\displaystyle{\phi(0)=\phi''(0)=0, \phi''(1)=\phi'''(1) =0}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{c_1+c_3=0, -c_1+c_3=0 \Rightarrow c_1=c_3=0}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{\phi''(\xi)=\omega^2(-c_2S_{\omega\xi}+c_4S^h_{\omega\xi})}
\displaystyle{\phi'''(\xi)=\omega^3(-c_2C_{\omega\xi}+c_4C^h_{\omega\xi})}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{-c_2S_{\omega}+c_4S^h_{\omega}=0}
\displaystyle{-c_2C_{\omega}+c_4C^h_{\omega}=0}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{\boxed{S_{\omega}C^h_{\omega}-C_{\omega}S^h_{\omega}=0}}

3'^\circ ピン・質点付自由支持の場合

\displaystyle{\phi(0)=\phi''(0)=0, \phi''(1) =0,\ \phi'''(1) =-\beta\omega^4\phi(1)}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{c_1+c_3=0, -c_1+c_3=0 \Rightarrow c_1=c_3=0}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{\phi''(\xi)=\omega^2(-c_2S_{\omega\xi}+c_4S^h_{\omega\xi})}
\displaystyle{\phi'''(\xi)=\omega^3(-c_2C_{\omega\xi}+c_4C^h_{\omega\xi})}
\displaystyle{\phi(\xi)=c_2S_{\omega\xi}+c_4S^h_{\omega\xi}}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{-c_2S_{\omega}+c_4S^h_{\omega}=0}
\displaystyle{c_2(-C_{\omega}+\beta\omega S_{\omega})+c_4(C^h_{\omega}+\beta\omega S^h_{\omega})=0}
\displaystyle{\cdot\Downarrow}
\displaystyle{-S_{\omega}C^h_{\omega}-\beta\omega S_{\omega}S^h_{\omega}+C_{\omega}S^h_{\omega}-\beta\omega S_{\omega}S^h_{\omega}=0}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{\boxed{(S_{\omega}C^h_{\omega}-C_{\omega}S^h_{\omega})+2\beta\omega S_{\omega}S^h_{\omega}=0}}

4^\circ 固定・固定支持の場合

\displaystyle{\phi(0)=\phi'(0)=0,\ \phi(1)=\phi'(1) =0}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{c_1+c_3=0, c_2+c_4=0 \Rightarrow c_3=-c_1, c_4=-c_2}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{\phi(\xi)=c_1C_{\omega\xi}+c_2S_{\omega\xi}-c_1C^h_{\omega\xi}-c_2S^h_{\omega\xi}}
\displaystyle{\phi'(\xi)=\omega(-c_1S_{\omega\xi}+c_2C_{\omega\xi}-c_1S^h_{\omega\xi}-c_2C^h_{\omega\xi})}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{c_1(C_{\omega}-C^h_{\omega})+c_2(S_{\omega}-S^h_{\omega})=0}
\displaystyle{-c_1(S_{\omega}+S^h_{\omega})+c_2(C_{\omega}-C^h_{\omega})=0}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{(C_{\omega}-C^h_{\omega})^2+(S^2_{\omega}-S^{h2}_{\omega})=0}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{\boxed{1-C_{\omega}C^h_{\omega}=0}}

5^\circ 固定・ピン支持の場合

\displaystyle{\phi(0)=\phi'(0)=0,\ \phi(1)=\phi''(1) =0}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{c_1+c_3=0, c_2+c_4=0 \Rightarrow c_3=-c_1, c_4=-c_2}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{\phi(\xi)=c_1C_{\omega\xi}+c_2S_{\omega\xi}-c_1C^h_{\omega\xi}-c_2S^h_{\omega\xi}}
\displaystyle{\phi''(\xi)=\omega^2(-c_1C_{\omega\xi}-c_2S_{\omega\xi}-c_1C^h_{\omega\xi}-c_2S^h_{\omega\xi})}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{c_1(C_{\omega}-C^h_{\omega})+c_2(S_{\omega}-S^h_{\omega})=0}
\displaystyle{c_1(C_{\omega}+C^h_{\omega})+c_2(S_{\omega}+S^h_{\omega})=0}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{(C_{\omega}-C^h_{\omega})(S_{\omega}+S^h_{\omega})-(C_{\omega}+C^h_{\omega})(S_{\omega}-S^h_{\omega})=0}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{\boxed{S_{\omega}C^h_{\omega}-C_{\omega}S^h_{\omega}=0}}

6^\circ 固定・自由支持の場合 (\beta=0

\displaystyle{\phi(0)=\phi'(0)=0,\ \phi''(1) =\phi'''(1) =0}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{c_1+c_3=0, c_2+c_4=0 \Rightarrow c_3=-c_1, c_4=-c_2}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{\phi''(\xi)=\omega^2(-c_1C_{\omega\xi}-c_2S_{\omega\xi}-c_1C^h_{\omega\xi}-c_2S^h_{\omega\xi})}
\displaystyle{\phi'''(\xi)=\omega^3(c_1S_{\omega\xi}-c_2C_{\omega\xi}-c_1S^h_{\omega\xi}-c_2C^h_{\omega\xi})}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{c_1(C_{\omega}+C^h_{\omega})+c_2(S_{\omega}+S^h_{\omega})=0}
\displaystyle{c_1(S_{\omega}-S^h_{\omega})-c_2(C_{\omega}+C^h_{\omega})=0}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{(C_{\omega}+C^h_{\omega})^2+(S^2_{\omega}-S^{h2}_{\omega})=0}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{\boxed{1+C^h_{\omega}C_{\omega}=0}}

6'^\circ 固定・質点付自由支持の場合

\displaystyle{\phi(0)=\phi'(0)=0,\ \phi''(1) =0,\ \phi'''(1) =-\beta\omega^4\phi(1)}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{c_1+c_3=0, c_2+c_4=0 \Rightarrow c_3=-c_1, c_4=-c_2}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{\phi''(\xi)=\omega^2(-c_1C_{\omega\xi}-c_2S_{\omega\xi}-c_1C^h_{\omega\xi}-c_2S^h_{\omega\xi})}
\displaystyle{\phi'''(\xi)=\omega^3(c_1S_{\omega\xi}-c_2C_{\omega\xi}-c_1S^h_{\omega\xi}-c_2C^h_{\omega\xi})}
\displaystyle{\phi(\xi)=c_1C_{\omega\xi}+c_2S_{\omega\xi}-c_1C^h_{\omega\xi}-c_2S^h_{\omega\xi}}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{c_1(C_{\omega}+C^h_{\omega})+c_2(S_{\omega}+S^h_{\omega})=0}
\displaystyle{c_1((S_{\omega}-S^h_{\omega})+\beta\omega(C_{\omega}-C^h_{\omega}))+c_2(-(C_{\omega}+C^h_{\omega})+\beta\omega(S_{\omega}-S^h_{\omega}))=0}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{(C_{\omega}+C^h_{\omega})^2+(S^2_{\omega}-S^{h2}_{\omega})-\beta\omega(C_{\omega}+C^h_{\omega})(S_{\omega}-S^h_{\omega})+\beta\omega(C_{\omega}-C^h_{\omega})(S_{\omega}+S^h_{\omega})=0}
\displaystyle{\cdot\qquad\Downarrow}
\displaystyle{\boxed{(1+C^h_{\omega}C_{\omega})+\beta\omega(C_{\omega}S^h_{\omega}-S_{\omega}C^h_{\omega})=0}}

船舶のロバスト制御

船舶のロバスト制御…Homework


図1 制御対象(船舶の回頭運動制御)

●船舶の針路制御のために、次のNomotoモデルを考えます。

\displaystyle{(1)\quad \dot{r}(t)=-\frac{1}{T(t)}r(t)+\frac{K(t)}{T(t)}\delta(t-L)+w(t)} }

ただし、r(t)=\dot{\psi}(t)かつ

\displaystyle{(2)\quad T(t)=\frac{L}{U(t)}T',\ K(t)=\frac{U(t)}{L}K' \quad (U_1\le U(t)\le U_2) }

ここで、舵の効果が出るまでの無駄時間Lを想定しています。混同の恐れはないので船長Lと同じ表記を用います。また前進速度Uの変動により、時定数Tと定常ゲインKが変動しますが、次式から舵は前進速度の2乗で効いてくることがわかります。

\displaystyle{(3)\quad \dot{r}(t)=-\underbrace{\left(\frac{U(t)}{L}\right)\frac{1}{T'}}_{a(t)=\frac{1}{T(t)}}r(t) +\underbrace{\left(\frac{U(t)}{L}\right)^2\frac{K'}{T'}}_{b(t)=\frac{K(t)}{T(t)}}\delta(t-L)+w(t) }

いま、ある前進速度U^*に注目しますと、次の表現もできます。

\displaystyle{(4a)\quad \dot{r}(t)=-\underbrace{\left(\frac{U(t)}{U^*}\right)\frac{1}{T^*}}_{a(t)=\frac{1}{T(t)}}r(t) +\underbrace{\left(\frac{U(t)}{U^*}\right)^2\frac{K^*}{T^*}}_{b(t)=\frac{K(t)}{T(t)}}\delta(t-L)+w(t) }

ただし

\displaystyle{(4b)\quad T^*=\frac{L}{U^*}T',\ K^*=\frac{U^*}{L}K' \quad (U_1\le U^*\le U_2) }

いま、次のような前進速度の変動を考えます。このとき、単位フィードバックによる閉ループ系は大きく変動します。


図2 前進速度が変動する場合の回頭運動

●ある前進速度U^*を基準にしたNOMOTOモデルを考えます。

\displaystyle{(5)\quad \left\{\begin{array}{l} \dot{\psi}(t)=r(t) \\ \displaystyle{\dot{r}(t)=-\left(\frac{U}{U^*}\right)\frac{1}{T^*}r(t) +\left(\frac{U}{U^*}\right)^2\frac{K^*}{T^*}\delta(t)} \end{array}\right. }

これに、舵のダイナミクス

\displaystyle{(6)\quad \dot{\delta}(t)=-\frac{1}{T_a}\delta(t)+\frac{K_a}{T_a}u(t) }

を接続した状態空間表現を次のように表します。

\displaystyle{(7a)\quad \underbrace{ \left[\begin{array}{c} \dot{\psi}(t) \\ \dot{r}(t) \\ \dot{\delta}(t) \end{array}\right] }_{\dot{x}(t)} = \underbrace{ \left[\begin{array}{ccc} 0 & 1 & 0\\ 0 & -\left(\frac{U}{U^*}\right)\frac{1}{T^*} & \left(\frac{U}{U^*}\right)^2\frac{K^*}{T^*} \\ 0 & 0 & -\frac{1}{T_a} \end{array}\right] }_{A(U,U^2)} \underbrace{ \left[\begin{array}{c} \psi(t) \\ r(t) \\ \delta(t) \end{array}\right] }_{x(t)} + \underbrace{ \left[\begin{array}{c} 0 \\ 0 \\ \frac{K_a}{T_a} \end{array}\right] }_{B} u(t) }
\displaystyle{(7b)\quad \underbrace{ \psi(t) }_{y(t)} = \underbrace{ \left[\begin{array}{ccc} 1 & 0 & 0 \end{array}\right] }_{C} \underbrace{ \left[\begin{array}{c} \psi(t) \\ r(t) \\ \delta(t) \end{array}\right] }_{x(t)} }

ここで、次のようなポリトピック表現ができることに注目します(本式は未発表です)。

\displaystyle{(8a)\quad A(U,U^2)=p_1(U,U^2)A_1+p_2(U,U^2)A_2+p_3(U,U^2)A_3 }

ただし

\displaystyle{(8b)\quad \begin{array}{l} A_1=A(U_1,U_1^2)\\ A_2=A(U_2,U_2^2)\\ A_3=A(\frac{U_1+U_2}{2},U_1U_2) \end{array} }

また、U_3=\frac{U_1+U_2}{2}を定義して

\displaystyle{(8c)\quad \begin{array}{l} p_1(U,U^2)=\frac{1}{p_0}\det \left[\begin{array}{cc} U-U_3 & U_2-U_3 \\ U^2-U_1U_2 & U_2^2-U_1U_2 \\ \end{array}\right]\\ p_2(U,U^2)=\frac{1}{p_0}\det \left[\begin{array}{cc} U_1-U_3 & U-U_3 \\ U_1^2-U_1U_2 & U^2-U_1U_2 \\ \end{array}\right]\\ p_3(U,U^2)=\frac{1}{p_0}\det \left[\begin{array}{cc} U_1-U_2 & U_2-U \\ U_1^2-U_2^2 & U_2^2-U^2 \\ \end{array}\right]\\ p_0=\det \left[\begin{array}{cc} U_1-U_2 & U_2-U_3 \\ U_1^2-U_2^2 & U_2^2-U_1U_2 \\ \end{array}\right]\\ p_1(U,U^2)+p_2(U,U^2)+p_3(U,U^2)=1 \end{array} }

これは端点(U_1,U_1^2)(U_2,U_2^2)と仮想的な端点(U_3,U_1U_2)が作る3角形領域における変動をカバーすることができます。


図3 船舶のパラメータ変動凸領域

●これに基づいて、次のようなLPV制御の仕組みを考えます。


図4 船舶のLPV制御の仕組み

まず次の2ポートシステムを構成します。

\displaystyle{(9a)\quad P: \left\{\begin{array}{l} \left[\begin{array}{c} \dot{x} \\ \dot{x}_I \end{array}\right]= \underbrace{ \left[\begin{array}{cc} A(U,U^2)& 0 \\ -C & 0 \end{array}\right] }_{A(U,U^2)} \left[\begin{array}{c} x \\ x_I \end{array}\right] + \underbrace{ \left[\begin{array}{c} 0 \\ 1 \end{array}\right] }_{B_1} r + \underbrace{\left[\begin{array}{c} B \\ 0 \end{array}\right] }_{B_2} u\\ \underbrace{ \left[\begin{array}{c} y_{11} \\ y_{12} \end{array}\right] }_{y_1} = \underbrace{ \left[\begin{array}{cc} 0 &\omega_I\\ \omega_DCA(U,U^2) & 0 \end{array}\right] }_{C_1} \left[\begin{array}{c} x \\ x_I \end{array}\right] + \underbrace{ \left[\begin{array}{c} 0 \\ 0 \end{array}\right] }_{D_{11}} r + \underbrace{ \left[\begin{array}{c} 0 \\ \omega_DCB \end{array}\right] }_{D_{12}} u\\ \underbrace{ \left[\begin{array}{c} y \\ x_I \end{array}\right] }_{y_2} = \underbrace{ \left[\begin{array}{cc} C & 0\\ 0 & 1 \end{array}\right] }_{C_2} \left[\begin{array}{c} x \\ x_I \end{array}\right] + \underbrace{ \left[\begin{array}{c} 0 \\ 0 \end{array}\right] }_{D_{21}} r \end{array}\right.}

\displaystyle{(9b)\quad A(U,U^2)=p_1(U,U^2)A_1+p_2(U,U^2)A_2+p_3(U,U^2)A_3 }

次に、これに対して、次のコントローラを設計します。

\displaystyle{(10a)\quad K_0: \left\{\begin{array}{l} \dot{x}_K=A_K(U,U^2)x_K+ \underbrace{ \left[\begin{array}{cc} B_K^{(1)}(U,U^2) & B_K^{(2)}(U,U^2) \end{array}\right] }_{B_K(U,U^2)} \left[\begin{array}{c} y \\ x_I \end{array}\right] \\ u=C_K(U,U^2)x_K + \underbrace{ \left[\begin{array}{cc} D_K^{(1)}(U,U^2) & D_K^{(2)}(U,U^2) \end{array}\right] }_{D_K(U,U^2)} \left[\begin{array}{c} y \\ x_I \end{array}\right] \end{array}\right.}

\displaystyle{(10b)\quad \begin{array}{l} A_K(U,U^2)=p_1(U,U^2)A_{K1}+p_2(U,U^2)A_{K2}+p_3(U,U^2)A_{K3}\\ B_K(U,U^2)=p_1(U,U^2)B_{K1}+p_2(U,U^2)B_{K2}+p_3(U,U^2)B_{K3}\\ C_K(U,U^2)=p_1(U,U^2)C_{K1}+p_2(U,U^2)C_{K2}+p_3(U,U^2)C_{K3}\\ D_K(U,U^2)=p_1(U,U^2)D_{K1}+p_2(U,U^2)D_{K2}+p_3(U,U^2)D_{K3} \end{array} }

これから、次の出力フィードバックを得ます。

\displaystyle{(11)\quad K: \left\{\begin{array}{l} \left[\begin{array}{c} \dot{x}_K \\ \dot{x}_I \end{array}\right]= \underbrace{ \left[\begin{array}{cc} A_K(U,U^2) & B_K^{(2)}(U,U^2) \\ 0 & 0 \end{array}\right] }_{A_K(U,U^2)} \left[\begin{array}{c} x_K \\ x_I \end{array}\right]\\ + \underbrace{ \left[\begin{array}{cc} B_K^{(1)}(U,U^2) & 0\\ -1& 1 \end{array}\right] }_{B_K(U,U^2)} \left[\begin{array}{c} y \\ r \end{array}\right] \\ u= \underbrace{ \left[\begin{array}{cc} C_K(U,U^2) & D_K^{(2)}(U,U^2) \end{array}\right] }_{C_K(U,U^2)} \left[\begin{array}{c} x_K \\ x_I \end{array}\right]\\ + \underbrace{ \left[\begin{array}{cc} D_K^{(1)}(U,U^2) & 0 \end{array}\right] }_{D_K(U,U^2)} \left[\begin{array}{c} y \\ r \end{array}\right] \end{array}\right. }

●いま、U=U^*として設計したH_\infty制御による閉ループ系のシミュレーションを次に示します。3種類の速度変動に応じてばらつきか見られます。



図5 船舶のLTI制御のシミュレーションと性能評価

●これに対して、速度変動に応じたLPV制御による閉ループ系のシミュレーションを次に示します。H_\infty制御の場合のばらつきが抑制されていることが分かります。




図6 船舶のLOP制御のシミュレーションと性能評価

演習B63…Flipped Classroom
1^\circ 図2は次のプログラムを用いて得られている。これを参考にして、MATLAB用プログラムを作成しなさい。

MATLAB
SCILAB
//ship7.sce
//-----
T1=118; T2=7.8; T3=18.5; Tship=T1+T2-T3; Kship=0.185; tL=6;
Tdelta=1; Kdelta=1;
//
Us=7.7; U1=Us*0.5; U2=Us*1.5; U3=(U1+U2)/2; U32=U1*U2;
a0=[ 0  1          0                 ;
     0  0          0                 ;
     0  0         -1/Tdelta          ];
a1=[ 0  0          0                 ;
     0 -1/Us/Tship 0                 ;
     0  0          0                 ];
a2=[ 0  0          0                 ;
     0  0          1/Us^2*Kship/Tship;
     0  0          0                 ];
A1=a0+U1*a1+U1^2*a2; 
A2=a0+U2*a1+U2^2*a2;  
A3=a0+U3*a1+U32*a2;
B0=[0;0;Kdelta/Tdelta];
//-----
function Q=interp3(P1,P2,P3,P)
 x1=P1(1); x2=P2(1); x3=P3(1); x=P(1);
 y1=P1(2); y2=P2(2); y3=P3(2); y=P(2);
 alpha=((x1-x2)*(y2-y3)-(x2-x3)*(y1-y2));
 Q(1) =((x -x2)*(y2-y3)-(x2-x3)*(y -y2))/alpha;
 Q(2) =((x1-x3)*(y -y3)-(x -x3)*(y1-y3))/alpha;
 Q(3) =((x1-x2)*(y2-y )-(x2-x )*(y1-y2))/alpha;
endfunction
//
function Ut=U(t,ID)
 if ID==0, Ut=Us,
 else if t<=ID*100, Ut=Us-(Us-U1)/(ID*100)*t, else Ut=U1, end, end
endfunction
//
function dxG=fG(t,xG1), dxG=AG(t)*xG1+B0*ut, endfunction
//
function AGt=AG(t), 
 P1=[U1;U1^2]; P2=[U2;U2^2]; P3=[U3;U3^2]; Ut=U(t,ID); P=[Ut;Ut^2]; 
 Q=interp3(P1,P2,P3,P); p1=Q(1); p2=Q(2); p3=Q(3); 
 AGt=p1*A1+p2*A2+p3*A3;
endfunction
//-----
t0=0; t1=300; nt=1500; td=(t1-t0)/nt; t=t0:td:t1; iL=tL/td;
v0=0; v1=0; v2=0; v3=0; 
for i=1:nt
 v0=[v0 U(t(i),0)]; //constant velocity
 v1=[v1 U(t(i),1)]; //rapid velocity variation
 v2=[v2 U(t(i),2)]; //medium velocity variation
 v3=[v3 U(t(i),3)]; //slow velocity variation
end
clf(0)
scf(0);subplot(211),plot(t,v0,'b',t,v1,'r',t,v2,'m',t,v3,'k'),mtlb_grid,mtlb_axis([t0 t1 0 10]);
legend(['const.vel.';'rapid vel.var.';'medium vel.var.';'slow vel.var.'])
//
clf(1)
xG=zeros(3,1); y=0; u=0; ID=0
for i=1:nt
 if i<=iL, yt=0;         ut=0;
 else      yt=y(:,i-iL); ut=1-yt; end
 xG=[xG ode(xG(:,i),t(i),t(i+1),fG)];
 y=[y xG(1,i+1)]; u=[u ut];
end
scf(0);subplot(212),plot(t,y,'b');
//
xG=zeros(3,1); y=0; u=0; ID=1
for i=1:nt
 if i<=iL, yt=0;         ut=0;
 else      yt=y(:,i-iL); ut=1-yt; end
 xG=[xG ode(xG(:,i),t(i),t(i+1),fG)];
 y=[y xG(1,i+1)]; u=[u ut];
end
scf(0);subplot(212),plot(t,y,'r')
//
xG=zeros(3,1); y=0; u=0; ID=2
for i=1:nt
 if i<=iL, yt=0;         ut=0;
 else      yt=y(:,i-iL); ut=1-yt; end
 xG=[xG ode(xG(:,i),t(i),t(i+1),fG)];
 y=[y xG(1,i+1)]; u=[u ut];
end
scf(0);subplot(212),plot(t,y,'m')
//
xG=zeros(3,1); y=0; u=0; ID=3
for i=1:nt
 if i<=iL, yt=0;         ut=0;
 else      yt=y(:,i-iL); ut=1-yt; end
 xG=[xG ode(xG(:,i),t(i),t(i+1),fG)];
 y=[y xG(1,i+1)]; u=[u ut];
end
scf(0);subplot(212),plot(t,y,'k'),mtlb_grid,mtlb_axis([t0 t1 -1 3]);
legend(['const.vel.';'rapid vel.var.';'medium vel.var.';'slow vel.var.'])
//-----
//eof

2^\circ 図5は次のプログラムを用いて得られている。これを参考にして、MATLAB用プログラムを作成しなさい。

MATLAB

SCILAB
//ship8.sce
//-----
function [LME,LMI,OBJ]=synlmiof5(YLIST)
 [gam,R,S,AK,BK,CK,DK]=YLIST(:);
 LME1=R-R';
 LME2=S-S';
 LME=list(LME1,LME2);
 LMI0=[R eye(A);eye(A) S];
 AW=[A*R+B2*CK A+B2*DK*C2
     AK S*A+BK*C2];
 LMI1=-(AW+AW'+2*alpha*LMI0);
 LMI2=-[-r*LMI0  AW;
        AW'      -r*LMI0];
 LMI3=-[ sin(th)*AW   cos(th)*AW;
        -cos(th)*AW   sin(th)*AW];
 LMI3=LMI3+LMI3';
 BW=[B1+B2*DK*D21
     S*B1+BK*D21];
 CW=[C1*R+D12*CK C1+D12*DK*C2];
 [p,m]=size(D11);
 LMI4=-[AW+AW' BW CW'
        BW' -gam*eye(m,m) (D11+D12*DK*D21)'
        CW D11+D12*DK*D21 -gam*eye(p,p)];
 [p,m]=size(DK);
 LMI5=-[-1e0*eye(m,m) DK'
        DK -1e0*eye(p,p)];
 LMI=list(LMI0,LMI1,LMI2,LMI3,LMI4,LMI5);
 OBJ=gam;
endfunction
//-----
function [AK,BK,CK,DK]=syncont(R,S,ak,bk,ck,dk)
 [u,sd,v]=svd(eye()-S*R); Ni=sqrt(sd)\u'; Mti=v/sqrt(sd); 
 AK=Ni*(ak-S*(A-B2*dk*C2)*R-bk*C2*R-S*B2*ck)*Mti; 
 BK=Ni*(bk-S*B2*dk); 
 CK=(ck-dk*C2*R)*Mti;
 DK=dk; 
endfunction
//=====
T1=118; T2=7.8; T3=18.5; Tship=T1+T2-T3; Kship=0.185;
Tdelta=1; Kdelta=1; tL=9; wD=tL; wI=0.01;
//
A0=[0 1 0;0 -1/Tship Kship/Tship;0 0 -1/Tdelta]; B0=[0;0;Kdelta/Tdelta]; 
C0=[1 0 0];
A=[A0 zeros(3,1);-C0 0]; B1=[zeros(3,1);1]; B2=[B0;0];
C1=[zeros(1,3) wI;wD*C0*A0 0;zeros(1,4)]; D11=zeros(3,1); D12=[0;wD*C0*B0;1];
C2=[C0 0;zeros(1,3) 1]; D21=[0;0]; D22=[0;0];
//-----
alpha=0.01; r=10; th=%pi/16;
gam0=100; R0=eye(4,4); S0=eye(4,4);
AK0=-eye(4,4); BK0=ones(4,2); CK0=ones(1,4); DK0=ones(1,2);
YLIST0=list(gam0,R0,S0,AK0,BK0,CK0,DK0);
YLIST=lmisolver(YLIST0,synlmiof5);
[gam,R,S,ak,bk,ck,dk]=YLIST(:); 
//
[AK,BK,CK,DK]=syncont(R,S,ak,bk,ck,dk)
plK=spec(AK)
ACL=[A+B2*DK*C2 B2*CK;BK*C2 AK];
BCL=[B1+B2*DK*D21;
     BK*D21];
CCL=[C2(1,:) zeros(1,4)];
plCL=spec(ACL)
//-----
AK=[AK BK(:,2);zeros(1,5)];
BK=[BK(:,1) zeros(4,1); -1 1];
CK=[CK DK(:,2)];
DK=[DK(:,1) 0];
AL=[A B2*CK;zeros(5,4) AK];
BL=[B2*DK; BK];
CL=[C2 D22*CK];
DL=D22*DK;
//-----
clf(0),clf(1)
w=logspace(-3,0,100); nw=length(w);
g=freq(A0,B0,C0,%i*w);
for i=1:nw, ga(i)=20*log10(norm(g(:,i))); end
scf(0);plot2d(w,ga,logflag='ln')
gws=20*log10(abs(wI./(%i*w))); gwt=20*log10(abs(wD^(-1)./(%i*w)));
scf(0);plot2d(w,gws,logflag='ln')
scf(0);plot2d(w,gwt,logflag='ln')
g=freq(AL,BL(:,1),CL(1,:),DL(1,1),%i*w); 
for i=1:nw, ga(i)=20*log10(abs(g(:,i))); end
scf(0);plot2d(w,ga,logflag='ln'),mtlb_grid
g=freq(ACL,BCL,CCL,%i*w); 
for i=1:nw, ga(i)=20*log10(abs(g(:,i))); end
scf(1);plot2d(w,ga,logflag='ln')
for i=1:nw, ga(i)=20*log10(abs(1-g(:,i))); end
scf(1);plot2d(w,ga,logflag='ln')
scf(1);plot2d(w,-gws,logflag='ln')
scf(1);plot2d(w,gwt,logflag='ln'),mtlb_grid
//-----
clf(2)
AG=[0 1;0 -1/Tship]; BG=[0 0;Kship/Tship 1]; CG=[1 0];
function dxG=fG(t,xG),dxG=AG*xG+BG*ut, endfunction
function dxK=fK(t,xK),dxK=AK*xK+BK*yt, endfunction
t0=0; t1=300; nt=1500; td=(t1-t0)/nt; t=t0:td:t1; iL=tL/td;
//
xG=zeros(2,1); y=0; xK=zeros(5,1); u=0; w=0
for i=1:nt
 if i<=iL, yt=[0;0];         ut=[0;w];
 else      yt=[y(:,i-iL);1]; ut=[CK*xK(:,i)+DK*yt;w]; end
 xG=[xG ode(xG(:,i),t(i),t(i+1),fG)]; 
 xK=[xK ode(xK(:,i),t(i),t(i+1),fK)];
 y=[y CG*xG(:,i+1)]; u=[u ut(1)];
end
scf(2);subplot(211),plot(t,y,'r')
scf(2);subplot(212),plot(t,u,'r')
//
xG=zeros(2,1); y=0; xK=zeros(5,1); u=0; w=0.5*1e-3
for i=1:nt
 if i<=iL, yt=[0;0];         ut=[0;w];
 else      yt=[y(:,i-iL);1]; ut=[CK*xK(:,i)+DK*yt;w]; end
 xG=[xG ode(xG(:,i),t(i),t(i+1),fG)]; 
 xK=[xK ode(xK(:,i),t(i),t(i+1),fK)];
 y=[y CG*xG(:,i+1)]; u=[u ut(1)];
end
scf(2);subplot(211),plot(t,y,'r--'),mtlb_grid,mtlb_axis([t0 t1 -0.5 1.5]);
scf(2);subplot(212),plot(t,u,'r--'),mtlb_grid,mtlb_axis([t0 t1 -1 1]);
//=====
Us=7.7; U1=Us*0.5; U2=Us*1.5; U3=(U1+U2)/2; U32=U1*U2;
a0=[ 0  1          0                 ;
     0  0          0                 ;
     0  0         -1/Tdelta          ];
a1=[ 0  0          0                 ;
     0 -1/Us/Tship 0                 ;
     0  0          0                 ];
a2=[ 0  0          0                 ;
     0  0          1/Us^2*Kship/Tship;
     0  0          0                 ];
A1=a0+U1*a1+U1^2*a2; 
A2=a0+U2*a1+U2^2*a2;  
A3=a0+U3*a1+U32*a2;
//-----
function Q=interp3(P1,P2,P3,P)
 x1=P1(1); x2=P2(1); x3=P3(1); x=P(1);
 y1=P1(2); y2=P2(2); y3=P3(2); y=P(2);
 alpha=((x1-x2)*(y2-y3)-(x2-x3)*(y1-y2));
 Q(1) =((x -x2)*(y2-y3)-(x2-x3)*(y -y2))/alpha;
 Q(2) =((x1-x3)*(y -y3)-(x -x3)*(y1-y3))/alpha;
 Q(3) =((x1-x2)*(y2-y )-(x2-x )*(y1-y2))/alpha;
endfunction
//
function Ut=U(t,ID)
 if ID==0, Ut=Us,
 else if t<=ID*100, Ut=Us-(Us-U1)/(ID*100)*t, else Ut=U1, end, end
endfunction
//
function dxG=fG(t,xG), dxG=AG(t)*xG+B0*ut, endfunction
//
function AGt=AG(t), 
 P1=[U1;U1^2]; P2=[U2;U2^2]; P3=[U3;U3^2]; Ut=U(t,ID); P=[Ut;Ut^2]; 
 Q=interp3(P1,P2,P3,P); p1=Q(1); p2=Q(2); p3=Q(3); 
 AGt=p1*A1+p2*A2+p3*A3;
endfunction
//-----
clf(3)
t0=0; t1=300; nt=1500; td=(t1-t0)/nt; t=t0:td:t1; iL=tL/td;
xG=zeros(3,1); y=0; xK=zeros(5,1); u=0; ID=0
for i=1:nt
 if i<=iL, yt=[0;1];         ut=0;
 else      yt=[y(:,i-iL);1]; ut=CK*xK(:,i)+DK*yt; end
 xG=[xG ode(xG(:,i),t(i),t(i+1),fG)];
 xK=[xK ode(xK(:,i),t(i),t(i+1),fK)];
 y=[y xG(1,i+1)]; u=[u ut];
end
scf(3);subplot(211),plot(t,y,'b');
scf(3);subplot(212),plot(t,u,'b');
//
xG=zeros(3,1); y=0; xK=zeros(5,1); u=0; ID=1
for i=1:nt
 if i<=iL, yt=[0;1];         ut=0;
 else      yt=[y(:,i-iL);1]; ut=CK*xK(:,i)+DK*yt; end
 xG=[xG ode(xG(:,i),t(i),t(i+1),fG)];
 xK=[xK ode(xK(:,i),t(i),t(i+1),fK)];
 y=[y xG(1,i+1)]; u=[u ut];
end
scf(3);subplot(211),plot(t,y,'r')
scf(3);subplot(212),plot(t,u,'r')
//
xG=zeros(3,1); y=0; xK=zeros(5,1); u=0; ID=2
for i=1:nt
 if i<=iL, yt=[0;1];         ut=0;
 else      yt=[y(:,i-iL);1]; ut=CK*xK(:,i)+DK*yt; end
 xG=[xG ode(xG(:,i),t(i),t(i+1),fG)];
 xK=[xK ode(xK(:,i),t(i),t(i+1),fK)];
 y=[y xG(1,i+1)]; u=[u ut];
end
scf(3);subplot(211),plot(t,y,'m')
scf(3);subplot(212),plot(t,u,'m')
//
xG=zeros(3,1); y=0; xK=zeros(5,1); u=0; ID=3
for i=1:nt
 if i<=iL, yt=[0;1];         ut=0;
 else      yt=[y(:,i-iL);1]; ut=CK*xK(:,i)+DK*yt; end
 xG=[xG ode(xG(:,i),t(i),t(i+1),fG)];
 xK=[xK ode(xK(:,i),t(i),t(i+1),fK)];
 y=[y xG(1,i+1)]; u=[u ut];
end
scf(3);subplot(211),plot(t,y,'k'),mtlb_grid,mtlb_axis([t0 t1 -0.5 1.5]);
//legend(['const.vel.';'rapid vel.var.';'medium vel.var.';'slow vel.var.'])
scf(3);subplot(212),plot(t,u,'k'),mtlb_grid,mtlb_axis([t0 t1 -1 1]);
legend(['const.vel.';'rapid vel.var.';'medium vel.var.';'slow vel.var.'])
//-----
//eof

3^\circ 図6は次のプログラムを用いて得られている。これを参考にして、MATLAB用プログラムを作成しなさい。

MATLAB
SCILAB
//ship9.sce
//-----
function [LME,LMI,OBJ]=synlmi(YLIST)
 [gam,R,S,AK1,BK1,CK1,DK1,AK2,BK2,CK2,DK2,AK3,BK3,CK3,DK3]=YLIST(:);
 LME1=R-R'; 
 LME2=S-S'; 
 LME=list(LME1,LME2);
 LMI0=[R eye(A1);eye(A1) S];
 AW1=[A1*R+B2*CK1 A1+B2*DK1*C2;
      AK1 S*A1+BK1*C2];
 LMI11=-(AW1+AW1'+2*alpha*LMI0);
 LMI21=-[-r*LMI0 AW1;AW1 -r*LMI0];
 LMI31=-[sin(th)*AW1 cos(th)*AW1;-cos(th)*AW1 sin(th)*AW1];
 LMI31=LMI31+LMI31';
 BW=[B1+B2*DK1*D21;
     S*B1+BK1*D21];
 CW1=[C11*R+D121*CK1 C11+D121*DK1*C2];
 [p,m]=size(D11);
 LMI41=-[AW1+AW1' BW CW1'
         BW' -gam*eye(m,m) (D11+D121*DK1*D21)'
         CW1  D11+D121*DK1*D21 -gam*eye(p,p)];
 [p,m]=size(DK1);
 LMI51=-[-1e2*eye(m,m) DK1';DK1 -1e2*eye(p,p)];
//
 AW2=[A2*R+B2*CK2 A2+B2*DK2*C2;
      AK2 S*A2+BK2*C2];
 LMI12=-(AW2+AW2'+2*alpha*LMI0);
 LMI22=-[-r*LMI0 AW2;AW2 -r*LMI0];
 LMI32=-[sin(th)*AW2 cos(th)*AW2;-cos(th)*AW2 sin(th)*AW2];
 LMI32=LMI32+LMI32';
 BW=[B1+B2*DK2*D21;
     S*B1+BK2*D21];
 CW2=[C12*R+D122*CK2 C12+D122*DK2*C2];
 [p,m]=size(D11);
 LMI42=-[AW2+AW2' BW CW2'
        BW' -gam*eye(m,m) (D11+D122*DK2*D21)'
        CW2  D11+D122*DK2*D21 -gam*eye(p,p)];
 [p,m]=size(DK2);
 LMI52=-[-1e2*eye(m,m) DK2';DK2 -1e2*eye(p,p)];
//
 AW3=[A3*R+B2*CK3 A3+B2*DK3*C2;
      AK3 S*A3+BK3*C2];
 LMI13=-(AW3+AW3'+2*alpha*LMI0);
 LMI23=-[-r*LMI0 AW3;AW3 -r*LMI0];
 LMI33=-[sin(th)*AW3 cos(th)*AW3;-cos(th)*AW3 sin(th)*AW3];
 LMI33=LMI33+LMI33';
 BW=[B1+B2*DK3*D21;
     S*B1+BK3*D21];
 CW3=[C13*R+D123*CK3 C13+D123*DK3*C2];
 [p,m]=size(D11);
 LMI43=-[AW3+AW3' BW CW3'
        BW' -gam*eye(m,m) (D11+D123*DK3*D21)'
        CW3  D11+D123*DK3*D21 -gam*eye(p,p)];
 [p,m]=size(DK3);
 LMI53=-[-1e2*eye(m,m) DK3';DK3 -1e2*eye(p,p)];
 LMI=list(LMI0,LMI11,LMI21,LMI31,LMI41,LMI51,LMI12,LMI22,LMI32,LMI42,LMI52,LMI13,LMI23,LMI33,LMI43,LMI53);
 OBJ=gam;
endfunction
//-----
function [AK,BK,CK,DK]=syncont(R,S,ak,bk,ck,dk)
 [u,sd,v]=svd(eye()-S*R); Ni=sqrt(sd)\u'; Mti=v/sqrt(sd); 
 AK=Ni*(ak-S*(A-B2*dk*C2)*R-bk*C2*R-S*B2*ck)*Mti; 
 BK=Ni*(bk-S*B2*dk); 
 CK=(ck-dk*C2*R)*Mti;
 DK=dk; 
endfunction
//=====
T1=118; T2=7.8; T3=18.5; Tship=T1+T2-T3; Kship=0.185;
Tdelta=10; Kdelta=1; tL=9; 
wD1=tL; wD2=tL; wD3=tL; wI1=0.01; wI2=0.01; wI3=0.01;
//
A0=[0 1 0;0 -1/Tship Kship/Tship;0 0 -1/Tdelta]; B0=[0;0;Kdelta/Tdelta]; 
C0=[1 0 0];
//-----
Us=7.7; U1=Us*0.5; U2=Us*1.5; U3=(U1+U2)/2; U32=U1*U2;
a0=[ 0  1          0                  0;
     0  0          0                  0;
     0  0         -1/Tdelta           0;
    -1  0          0                  0];
a1=[ 0  0          0                  0;
     0 -1/Us/Tship 0                  0;
     0  0          0                  0;
     0  0          0                  0];
a2=[ 0  0          0                  0;
     0  0          1/Us^2*Kship/Tship 0;
     0  0          0                  0;
     0  0          0                  0];
A1=a0+U1*a1+U1^2*a2; 
A2=a0+U2*a1+U2^2*a2;  
A3=a0+U3*a1+U32*a2;
B1=[zeros(3,1);1]; 
B2=[B0;0];
C11=[zeros(1,3) wI1;wD1*C0*A0 0;zeros(1,4)]; 
C12=[zeros(1,3) wI2;wD2*C0*A0 0;zeros(1,4)]; 
C13=[zeros(1,3) wI3;wD3*C0*A0 0;zeros(1,4)]; 
D11=zeros(3,1); 
D121=[0;wD1*C0*B0;1];
D122=[0;wD2*C0*B0;1];
D123=[0;wD3*C0*B0;1];
C2=[C0 0;zeros(1,3) 1]; 
D21=[0;0]; 
D22=[0;0];
//-----
alpha=0.01; r=15; th=%pi/4;
gam0=100; R0=eye(4,4); S0=eye(4,4);
AK0=-eye(4,4); BK0=ones(4,2); CK0=ones(1,4); DK0=ones(1,2);
YLIST0=list(gam0,R0,S0,AK0,BK0,CK0,DK0,AK0,BK0,CK0,DK0,AK0,BK0,CK0,DK0);
YLIST=lmisolver(YLIST0,synlmi);
[gam,R,S,ak1,bk1,ck1,dk1,ak2,bk2,ck2,dk2,ak3,bk3,ck3,dk3]=YLIST(:); 
//
A=A1; [AK1,BK1,CK1,DK1]=syncont(R,S,ak1,bk1,ck1,dk1);
plK1=spec(AK1),
ACL1=[A1+B2*DK1*C2 B2*CK1;BK1*C2 AK1];
BCL1=[B1+B2*DK1*D21;BK1*D21];
CCL1=[C2(1,:) zeros(1,4)];
plCL1=spec(ACL1)
//
A=A2; [AK2,BK2,CK2,DK2]=syncont(R,S,ak2,bk2,ck2,dk2);
plK2=spec(AK2),
ACL2=[A2+B2*DK2*C2 B2*CK2;BK2*C2 AK2];
BCL2=[B2+B2*DK2*D21;BK2*D21];
CCL2=[C2(1,:) zeros(1,4)];
plCL2=spec(ACL2)
//
A=A3; [AK3,BK3,CK3,DK3]=syncont(R,S,ak3,bk3,ck3,dk3);
plK3=spec(AK3),
ACL3=[A3+B2*DK3*C2 B2*CK3;BK3*C2 AK3];
BCL3=[B1+B2*DK3*D21;BK3*D21];
CCL3=[C2(1,:) zeros(1,4)];
plCL3=spec(ACL3)
//-----
AK1=[AK1 BK1(:,2);zeros(1,5)];
BK1=[BK1(:,1) zeros(4,1); -1 1];
CK1=[CK1 DK1(:,2)];
DK1=[DK1(:,1) 0];
AL1=[A1 B2*CK1;zeros(5,4) AK1];
BL1=[B2*DK1; BK1];
CL1=[C2 D22*CK1];
DL1=D22*DK1;
clf(0),clf(1)
w=logspace(-3,0,100); nw=length(w);
g=freq(A0,B0,C0,%i*w);
for i=1:nw, ga(i)=20*log10(norm(g(:,i))); end
scf(0);plot2d(w,ga,logflag='ln')
gws=20*log10(abs(wI1./(%i*w))); gwt=20*log10(abs(wD1^(-1)./(%i*w)));
scf(0);plot2d(w,gws,logflag='ln')
scf(0);plot2d(w,gwt,logflag='ln')
g=freq(AL1,BL1(:,1),CL1(1,:),DL1(1,1),%i*w); 
for i=1:nw, ga(i)=20*log10(abs(g(:,i))); end
scf(0);plot2d(w,ga,logflag='ln'),mtlb_grid,mtlb_axis([10^(-3) 10^0 -80 60])
g=freq(ACL1,BCL1,CCL1,%i*w); 
for i=1:nw, ga(i)=20*log10(abs(g(:,i))); end
scf(1);plot2d(w,ga,logflag='ln')
for i=1:nw, ga(i)=20*log10(abs(1-g(:,i))); end
scf(1);plot2d(w,ga,logflag='ln'),mtlb_grid,mtlb_axis([10^(-3) 10^0 -80 60])
scf(1);plot2d(w,-gws,logflag='ln')
scf(1);plot2d(w,gwt,logflag='ln')
//
clf(2),clf(3)
AK2=[AK2 BK2(:,2);zeros(1,5)];
BK2=[BK2(:,1) zeros(4,1); -1 1];
CK2=[CK2 DK2(:,2)];
DK2=[DK2(:,1) 0];
AL2=[A2 B2*CK1;zeros(5,4) AK1];
BL2=[B2*DK1; BK1];
CL2=[C2 D22*CK1];
DL2=D22*DK1;
w=logspace(-3,0,100); nw=length(w);
g=freq(A0,B0,C0,%i*w);
for i=1:nw, ga(i)=20*log10(norm(g(:,i))); end
scf(2);plot2d(w,ga,logflag='ln')
gws=20*log10(abs(wI2./(%i*w))); gwt=20*log10(abs(wD2^(-1)./(%i*w)));
scf(2);plot2d(w,gws,logflag='ln')
scf(2);plot2d(w,gwt,logflag='ln')
g=freq(AL2,BL2(:,1),CL2(1,:),DL2(1,1),%i*w); 
for i=1:nw, ga(i)=20*log10(abs(g(:,i))); end
scf(2);plot2d(w,ga,logflag='ln'),mtlb_grid,mtlb_axis([10^(-3) 10^0 -80 60])
g=freq(ACL2,BCL2,CCL2,%i*w); 
for i=1:nw, ga(i)=20*log10(abs(g(:,i))); end
scf(3);plot2d(w,ga,logflag='ln')
for i=1:nw, ga(i)=20*log10(abs(1-g(:,i))); end
scf(3);plot2d(w,ga,logflag='ln'),mtlb_grid,mtlb_axis([10^(-3) 10^0 -80 60])
scf(3);plot2d(w,-gws,logflag='ln')
scf(3);plot2d(w,gwt,logflag='ln')
//
clf(4),clf(5)
AK3=[AK3 BK3(:,2);zeros(1,5)];
BK3=[BK3(:,1) zeros(4,1); -1 1];
CK3=[CK3 DK3(:,2)];
DK3=[DK3(:,1) 0];
AL3=[A3 B2*CK1;zeros(5,4) AK1];
BL3=[B2*DK1; BK1];
CL3=[C2 D22*CK1];
DL3=D22*DK1;
w=logspace(-3,0,100); nw=length(w);
g=freq(A0,B0,C0,%i*w);
for i=1:nw, ga(i)=20*log10(norm(g(:,i))); end
scf(4);plot2d(w,ga,logflag='ln')
gws=20*log10(abs(wI3./(%i*w))); gwt=20*log10(abs(wD3^(-1)./(%i*w)));
scf(4);plot2d(w,gws,logflag='ln')
scf(4);plot2d(w,gwt,logflag='ln')
g=freq(AL3,BL3(:,1),CL3(1,:),DL3(1,1),%i*w); 
for i=1:nw, ga(i)=20*log10(abs(g(:,i))); end
scf(4);plot2d(w,ga,logflag='ln'),mtlb_grid,mtlb_axis([10^(-3) 10^0 -80 60])
g=freq(ACL3,BCL3,CCL3,%i*w); 
for i=1:nw, ga(i)=20*log10(abs(g(:,i))); end
scf(5);plot2d(w,ga,logflag='ln')
for i=1:nw, ga(i)=20*log10(abs(1-g(:,i))); end
scf(5);plot2d(w,ga,logflag='ln'),mtlb_grid,mtlb_axis([10^(-3) 10^0 -80 60])
scf(5);plot2d(w,-gws,logflag='ln')
scf(5);plot2d(w,gwt,logflag='ln')
//return
//=====
a0=[ 0  1          0                 ;
     0  0          0                 ;
     0  0         -1/Tdelta          ];
a1=[ 0  0          0                 ;
     0 -1/Us/Tship 0                 ;
     0  0          0                 ];
a2=[ 0  0          0                 ;
     0  0          1/Us^2*Kship/Tship;
     0  0          0                 ];
A1=a0+U1*a1+U1^2*a2; 
A2=a0+U2*a1+U2^2*a2;  
A3=a0+U3*a1+U32*a2;
//-----
function Q=interp3(P1,P2,P3,P)
 x1=P1(1); x2=P2(1); x3=P3(1); x=P(1);
 y1=P1(2); y2=P2(2); y3=P3(2); y=P(2);
 alpha=((x1-x2)*(y2-y3)-(x2-x3)*(y1-y2));
 Q(1) =((x -x2)*(y2-y3)-(x2-x3)*(y -y2))/alpha;
 Q(2) =((x1-x3)*(y -y3)-(x -x3)*(y1-y3))/alpha;
 Q(3) =((x1-x2)*(y2-y )-(x2-x )*(y1-y2))/alpha;
endfunction
//
function Ut=U(t,ID)
 if ID==0, Ut=Us,
 else
  if t<=ID*100, Ut=Us-(Us-U1)/(ID*100)*t, else Ut=U1, end
 end
endfunction
//
function dxG=fG(t,xG), dxG=AG(t)*xG+B0*ut, endfunction
//
function AGt=AG(t), 
 P1=[U1;U1^2]; P2=[U2;U2^2]; P3=[U3;U3^2]; Ut=U(t,ID); P=[Ut;Ut^2]; 
 Q=interp3(P1,P2,P3,P); p1=Q(1); p2=Q(2); p3=Q(3); 
 AGt=p1*A1+p2*A2+p3*A3;
endfunction
//
function dxK=fK(t,xK), 
 dxK=AK(t)*xK+BK(t)*yt, 
endfunction
//
function AKt=AK(t), 
 P1=[U1;U1^2]; P2=[U2;U2^2]; P3=[U3;U3^2]; Ut=U(t,ID); P=[Ut;Ut^2]; 
 Q=interp3(P1,P2,P3,P); p1=Q(1); p2=Q(2); p3=Q(3); 
 AKt=p1*AK1+p2*AK2+p3*AK3;
endfunction
//
function BKt=BK(t), 
 P1=[U1;U1^2]; P2=[U2;U2^2]; P3=[U3;U3^2]; Ut=U(t,ID); P=[Ut;Ut^2]; 
 Q=interp3(P1,P2,P3,P); p1=Q(1); p2=Q(2); p3=Q(3); 
 BKt=p1*BK1+p2*BK2+p3*BK3;
endfunction
//
function CKt=CK(t), 
 P1=[U1;U1^2]; P2=[U2;U2^2]; P3=[U3;U3^2]; Ut=U(t,ID); P=[Ut;Ut^2]; 
 Q=interp3(P1,P2,P3,P); p1=Q(1); p2=Q(2); p3=Q(3); 
 CKt=p1*CK1+p2*CK2+p3*CK3;
endfunction
//
function DKt=DK(t), 
 P1=[U1;U1^2]; P2=[U2;U2^2]; P3=[U3;U3^2]; Ut=U(t,ID); P=[Ut;Ut^2]; 
 Q=interp3(P1,P2,P3,P); p1=Q(1); p2=Q(2); p3=Q(3); 
 DKt=p1*DK1+p2*DK2+p3*DK3;
endfunction
//-----
clf(6)
t0=0; t1=300; nt=1500; td=(t1-t0)/nt; t=t0:td:t1; iL=tL/td;
xG=zeros(3,1); y=0; xK=zeros(5,1); u=0; ID=0;
for i=1:nt
 if i<=iL, yt=[0;1];         ut=0;
 else      yt=[y(:,i-iL);1]; ut=CK(t(i))*xK(:,i)+DK(t(i))*yt; end
 xG=[xG ode(xG(:,i),t(i),t(i+1),fG)];
 xK=[xK ode(xK(:,i),t(i),t(i+1),fK)];
 y=[y xG(1,i+1)]; u=[u ut];
end
scf(6);subplot(211),plot(t,y,'b');
scf(6);subplot(212),plot(t,u,'b');
//
xG=zeros(3,1); y=0; xK=zeros(5,1); u=0; ID=1;
for i=1:nt
 if i<=iL, yt=[0;1];         ut=0;
 else      yt=[y(:,i-iL);1]; ut=CK(t(i))*xK(:,i)+DK(t(i))*yt; end
 xG=[xG ode(xG(:,i),t(i),t(i+1),fG)];
 xK=[xK ode(xK(:,i),t(i),t(i+1),fK)];
 y=[y xG(1,i+1)]; u=[u ut];
end
scf(6);subplot(211),plot(t,y,'r');
scf(6);subplot(212),plot(t,u,'r');
//
xG=zeros(3,1); y=0; xK=zeros(5,1); u=0; ID=2;
for i=1:nt
 if i<=iL, yt=[0;1];         ut=0;
 else      yt=[y(:,i-iL);1]; ut=CK(t(i))*xK(:,i)+DK(t(i))*yt; end
 xG=[xG ode(xG(:,i),t(i),t(i+1),fG)];
 xK=[xK ode(xK(:,i),t(i),t(i+1),fK)];
 y=[y xG(1,i+1)]; u=[u ut];
end
scf(6);subplot(211),plot(t,y,'m');
scf(6);subplot(212),plot(t,u,'m');
//
xG=zeros(3,1); y=0; xK=zeros(5,1); u=0; ID=3;
for i=1:nt
 if i<=iL, yt=[0;1];         ut=0;
 else      yt=[y(:,i-iL);1]; ut=CK(t(i))*xK(:,i)+DK(t(i))*yt; end
 xG=[xG ode(xG(:,i),t(i),t(i+1),fG)];
 xK=[xK ode(xK(:,i),t(i),t(i+1),fK)];
 y=[y xG(1,i+1)]; u=[u ut];
end
scf(6);subplot(211),plot(t,y,'k'),mtlb_grid,mtlb_axis([t0 t1 -0.5 1.5]);
//legend(['const.vel.';'rapid vel.var.';'medium vel.var.';'slow vel.var.'])
scf(6);subplot(212),plot(t,u,'k'),mtlb_grid,mtlb_axis([t0 t1 -1 1]);
legend(['const.vel.';'rapid vel.var.';'medium vel.var.';'slow vel.var.'])
//-----
//eof

問題設定

問題設定…Homework

[1] H_\infty制御系を設計する際の2ポートシステムの構成法について述べます。


図1 2ポートシステム

次の制御対象を考えます。

\displaystyle{(1)\quad G: \left\{\begin{array}{l} \dot{x}=Ax+Bu\\ y=Cx \end{array}\right.}

これに対する評価出力として、次を考えます。

\displaystyle{(2)\quad W_S: \left\{\begin{array}{l} \dot{x}_I=r-y\\ y_{11}=\omega_Ix_I \end{array}\right. }

\displaystyle{(3)\quad W_T: y_{12}=\omega_D\dot{y}=\omega_DCAx+\omega_DCBu}


図2 積分器を含める場合の2ポートシステム

このとき、次の2ポートシステムを構成します。

\displaystyle{(4)\quad \boxed{P: \left\{\begin{array}{l} \left[\begin{array}{c} \dot{x} \\ \dot{x}_I \end{array}\right]= \underbrace{ \left[\begin{array}{cc} A& 0 \\ -C & 0 \end{array}\right] }_{A} \left[\begin{array}{c} x \\ x_I \end{array}\right] + \underbrace{ \left[\begin{array}{c} 0 \\ 1 \end{array}\right] }_{B_1} r + \underbrace{\left[\begin{array}{c} B \\ 0 \end{array}\right] }_{B_2} u\\ \underbrace{ \left[\begin{array}{c} y_{11} \\ y_{12} \end{array}\right] }_{y_1} = \underbrace{ \left[\begin{array}{cc} 0 &\omega_I\\ \omega_DCA & 0 \end{array}\right] }_{C_1} \left[\begin{array}{c} x \\ x_I \end{array}\right] + \underbrace{ \left[\begin{array}{c} 0 \\ 0 \end{array}\right] }_{D_{11}} r + \underbrace{ \left[\begin{array}{c} 0 \\ \omega_DCB \end{array}\right] }_{D_{12}} u\\ \underbrace{ \left[\begin{array}{c} y \\ x_I \end{array}\right] }_{y_2} = \underbrace{ \left[\begin{array}{cc} C & 0\\ 0 & 1 \end{array}\right] }_{C_2} \left[\begin{array}{c} x \\ x_I \end{array}\right] + \underbrace{ \left[\begin{array}{c} 0 \\ 0 \end{array}\right] }_{D_{21}} r \end{array}\right.} }

これに対して、次のコントローラを設計します。

\displaystyle{(5)\quad K_0: \left\{\begin{array}{l} \dot{x}_K=A_Kx_K+ \underbrace{ \left[\begin{array}{cc} B_{K1} & B_{K2} \end{array}\right] }_{B_K} \left[\begin{array}{c} y \\ x_I \end{array}\right] \\ u=C_Kx_K + \underbrace{ \left[\begin{array}{cc} D_{K1} & D_{K2} \end{array}\right] }_{D_K} \left[\begin{array}{c} y \\ x_I \end{array}\right] \end{array}\right.}

これによる閉ループ系

\displaystyle{(6)\quad P_{CL}: \left\{\begin{array}{l} \left[\begin{array}{c} \dot{x} \\ \dot{x}_K \end{array}\right] = \underbrace{ \left[\begin{array}{ccc} A+B_2D_KC_2 & B_2C_K \\ B_KC_2 & A_K \end{array}\right] }_{A_{CL}} \left[\begin{array}{c} x \\ x_K \end{array}\right] + \underbrace{ \left[\begin{array}{ccc} B_1+B_2D_KD_{21} \\ B_KD_{21} \end{array}\right] }_{B_{CL}} r\\ \underbrace{ \left[\begin{array}{c} y_{11} \\ y_{12} \end{array}\right] }_{y_1} = \underbrace{ \left[\begin{array}{ccc} C_1+D_{12}D_KC_2 & D_{12}C_K \end{array}\right] }_{C_{CL}} \left[\begin{array}{c} x \\ x_K \end{array}\right] + \underbrace{ (D_{11}+D_{12}D_KD_{21}) }_{D_{CL}} r \end{array}\right. }

において、そのH_\inftyノルムが\gammaより小、すなわち

\displaystyle{(7)\quad \sup_{\omega\in{\rm\bf R}} \underbrace{||\hat{P}_{CL}(j\omega)||_2}_{\sigma_1(\hat{P}_{CL}(j\omega))} <\gamma }

ただし

\displaystyle{(8)\quad \hat{P}_{CL}(s)= \left[\begin{array}{c} \hat{G}_{y_{11}}(s)\\ \hat{G}_{y_{12}}(s) \end{array}\right]= C_{CL}(sI-A_{CL})^{-1}B_{CL}+D_{CL} }

となるように出力フィードバックのゲインA_K,B_K,C_K,D_Kを求める問題を考えます。

これをLMIベース設計問題として定式化すると次のようになります。

Minimize \gamma on R=R^T,S=S^T,{\cal A}_K,{\cal B}_K,{\cal C}_K,D_K subject to

\displaystyle{(9)\quad \left[\begin{array}{cc} R & I \\ I & S \end{array}\right] >0 }

\displaystyle{(10)\quad \left[\begin{array}{ccc} \left[\begin{array}{cc} AR+B_2{\cal C}_K & A+B_2D_KC_2\\ {\cal A}_K & SA+{\cal B}_KC_2 \end{array}\right]+(*)^T & \left[\begin{array}{c} B_1+B_2D_KD_{21} \\ SB_1+{\cal B}_KD_{21} \end{array}\right] & (*)^T \\ (*)^T & -\gamma^2 I & (*)^T \\ \left[\begin{array}{cc} C_1R+D_{12}{\cal C}_K & C_1+D_{12}D_KC_2 \end{array}\right] & D_{11} & -I \end{array}\right]<0 }

Determine the output feedback controller A_K,B_K,C_K by

\displaystyle{(11)\quad \begin{array}{lll} A_K&=&N^{-1}({\cal A}_K-S(A-B_2D_KC_2)R-{\cal B}_KC_2R-SB_2{\cal C}_K)M^{-T} \\ B_K&=&N^{-1}({\cal B}_K-SB_2D_K) \\ C_K&=&({\cal C}_K-D_KC_2R)M^{-T} \\ &&(I-SR=NM^T) \end{array} }

実際には、次のLMIも追加することが行われます。

\displaystyle{(12)\quad \begin{array}{l} \left[\begin{array}{cc} AR+B_2{\cal C}_K & A+B_2D_KC_2\\ {\cal A}_K & SA+{\cal B}_KC_2 \end{array}\right] +(*)^T %\nonumber\\&& +\alpha \left[\begin{array}{cc} R & I \\ I & S \end{array}\right]<0}\\ \left[\begin{array}{cc} -r \left[\begin{array}{cc} R & I \\ I & S \end{array}\right] & \left[\begin{array}{cc} AR+B_2{\cal C}_K & A+B_2D_KC_2\\ {\cal A}_K & SA+{\cal B}_KC_2 \end{array}\right] \\ (*)^T & -r \left[\begin{array}{cc} R & I \\ I & S \end{array}\right] \end{array}\right] <0\\ \left[\begin{array}{cc} \sin\theta & \cos\theta \\ -\cos\theta & \sin\theta \end{array}\right]\otimes \left[\begin{array}{cc} AR+B_2{\cal C}_K & A+B_2D_KC_2\\ {\cal A}_K & SA+{\cal B}_KC_2 \end{array}\right]+ (*)^T <0 \end{array} }

ちなみに、コントローラK_0に積分器

\displaystyle{(13)\quad\dot{x}_I=r-y}

を接続して、制御対象に対するコントローラとして次を得ます。

\displaystyle{(14)\quad  \boxed{K: \left\{\begin{array}{l} \left[\begin{array}{c} \dot{x}_K \\ \dot{x}_I \end{array}\right]= \left[\begin{array}{cc} A_K & B_{K2} \\ 0 & 0 \end{array}\right] \left[\begin{array}{c} x_K \\ x_I \end{array}\right] + \left[\begin{array}{cc} B_{K1} & 0\\ -1& 1 \end{array}\right] \left[\begin{array}{c} y \\ r \end{array}\right] \\ u= \left[\begin{array}{cc} C_K & D_{K2} \end{array}\right] \left[\begin{array}{c} x_K \\ x_I \end{array}\right] + \left[\begin{array}{cc} D_{K1} & 0 \end{array}\right] \left[\begin{array}{c} y \\ r \end{array}\right] \end{array}\right.} }

[2] 上の制御系設計は混合感度問題として定式化されていることを示すために、次式に注目します。

\displaystyle{(15)\quad \hat{P}_{CL}(s)= \left[\begin{array}{c} \hat{G}_{y_{11}}(s)\\ \hat{G}_{y_{12}}(s) \end{array}\right]= \left[\begin{array}{c} \hat{W}_S(s)\hat{S}(s)\\ \hat{W}_T(s)\hat{T}(s) \end{array}\right] }

ただし

\displaystyle{(16)\quad \hat{G}_{y_{11}}(s) =\omega_I\frac{\frac{1}{s}}{1+\hat{G}(s)\hat{K}_0(s)\frac{1}{s}} =\underbrace{\frac{\omega_I}{s}}_{\hat{W}_S(s)} \underbrace{\frac{1}{1+\hat{G}(s)\hat{K}(s)}}_{\hat{S}(s)} }
\displaystyle{(17)\quad \hat{G}_{y_{12}}(s) =\omega_Ds\frac{\hat{G}(s)\hat{K}_0(s)\frac{1}{s}}{1+\hat{G}(s)\hat{K}_0(s)\frac{1}{s}} =\underbrace{\omega_Ds}_{\hat{W}_T(s)} \underbrace{\frac{\hat{G}(s)\hat{K}(s)}{1+\hat{G}(s)\hat{K}(s)}}_{\hat{T}(s)} }

したがって、

\displaystyle{(18)\quad ||\hat{P}_{CL}(j\omega)||_2=\sigma_1(\hat{P}_{CL}(j\omega)) =\sqrt{|\hat{W}_S(j\omega)\hat{S}(j\omega)|^2+|\hat{W}_T(j\omega)\hat{T}(j\omega)|^2} }

に注意して

\displaystyle{(19)\quad \sup_{\omega\in{\rm\bf R}}||\hat{P}_{CL}(j\omega)||_2<\gamma }

を最小化することは

\displaystyle{(20)\quad \forall\omega: |\hat{W}_S(j\omega)\hat{S}(j\omega)|^2+|\hat{W}_T(j\omega)\hat{T}(j\omega)|^2<\gamma^2 }

を最小化していることになります。

演習B62…Flipped Classroom
1^\circ 水タンクにおいて、バルブに無駄時間がある場合の次の状態方程式を考えます。

\displaystyle{(21)\quad\underbrace{\frac{d}{dt}(h(t)-h^*)}_{\dot{x}(t)}=\underbrace{-\frac{k}{2S\sqrt{h^*}}}_{a}\underbrace{(h(t)-h^*)}_{x(t)}+\underbrace{\frac{1}{S}}_{b}\underbrace{(q_i(t-L)-q_i^*)}_{u(t-L)}}

これに対するH_\infty制御系を設計する次のプログラムを実行して得られる3枚の図の意味について説明せよ。

MATLAB
%b62.m 
%-----
 clear all, close all
 S=1; k=0.1; hs=1; L=10;
 a=-k/(2*sqrt(hs)*S); b=1/S; c=1;
 wD=L; wI=0.02;
 A=[a 0;-c 0]; B1=[0;1]; B2=[b;0];
 C1=[0 wI;wD*c*a 0]; D11=[0;0]; D12=[0;wD*c*b];
 C2=[c 0;0 1]; D21=[0;0]; D22=[0;0];
%-----
 alpha=0.001; r=0.1; th=pi/3;
 LMIs=of_synlmi6(A,B1,B2,C1,C2,D11,D12,D21,D22,alpha,r,th);
 cobj=zeros(1,decnbr(LMIs)); 
 cobj(1)=1; 
 [cost,xopt]=mincx(LMIs,cobj);  
 gopt=dec2mat(LMIs,xopt,1)
 R=dec2mat(LMIs,xopt,2); 
 S=dec2mat(LMIs,xopt,3);
 ak=dec2mat(LMIs,xopt,4); 
 bk=dec2mat(LMIs,xopt,5); 
 ck=dec2mat(LMIs,xopt,6); 
 dk=dec2mat(LMIs,xopt,7); 
 [u,sd,v]=svd(eye(size(A,1))-R*S); 
 sd=diag(sqrt(1./diag(sd))); 
 Ni=sd*v'; Mti=u*sd; 
 AK=Ni*(ak-S*(A-B2*dk*C2)*R-bk*C2*R-S*B2*ck)*Mti; 
 BK=Ni*(bk-S*B2*dk); 
 CK=(ck-dk*C2*R)*Mti; 
 DK=dk;
%----- 
 pl=eig(A);
 ACL=[A+B2*DK*C2 B2*CK;BK*C2 AK];
 plCL=eig(ACL)
 figure(1)
 dregion(-alpha,0,r,th,r*[-2,1,-1,1]) 
 plot(real(pl),imag(pl),'o',real(plCL),imag(plCL),'x')
%-----  
 ACL=[A+B2*DK*C2 B2*CK;BK*C2 AK];
 BCL=[B1+B2*DK*D21;BK*D21];
 CCL=[C2(1,:) zeros(1,2)];
 AK=[AK BK(:,2);zeros(1,3)];
 BK=[BK(:,1) zeros(2,1); -1 1];
 CK=[CK DK(:,2)];
 DK=[DK(:,1) 0];
%-----   
 w=logspace(-2,1,100); 
 H=exp(-L*i*w); ga_H=20*log10(abs(H));
 ga_DL=20*log10(abs(H-1));
 ga_WT=20*log10(abs(L*i*w));
 figure(2)
 w=logspace(-3,0,100); 
 semilogx(w,ga_DL,w,ga_WT),grid, legend('Delta','WT') 
 %-----  
 ga_WS=20*log10(abs(wI./(i*w))); 
 ga_WT=20*log10(abs(wD*(i*w)));
 G(:,:)=freqresp(ss(a,b,c,[]),w); G=G.'; ga_G=20*log10(abs(G));
 K(:,:)=freqresp(ss(AK,BK(:,1),CK,DK(:,1)),w); K=K.'; ga_K=20*log10(abs(K)); 
 T(:,:)=freqresp(ss(ACL,BCL(:,1),CCL(1,:),[]),w); T=T.'; ga_T=20*log10(abs(T)); 
 ga_S=20*log10(abs(1-T)); 
 figure(3)
 subplot(121),semilogx(w,ga_G+ga_K,w,ga_WS,'b',w,-ga_WT,'r'),grid,legend('L=GK','WS','1/WT')
 subplot(122),semilogx(w,ga_T,'r',w,-ga_WT,'r',w,ga_S,'b',w,-ga_WS,'b'),grid,legend('T','1/WT','S','1/WS')
%-----
function LMIs=of_synlmi6(A,B1,B2,C1,C2,D11,D12,D21,D22,alpha,r,th)
 [n,m]=size(B2);  [p,n]=size(C2);
 setlmis([]); 
 gam=lmivar(1,[1 0]);  
 [R,xxx,Rdec]=lmivar(1,[n 1]); 
 [S,xxx,Sdec]=lmivar(1,[n 1]); 
 Ak=lmivar(2,[n n]); 
 Bk=lmivar(2,[n p]); 
 Ck=lmivar(2,[m n]); 
 Dk=lmivar(2,[m p]); 
% 
 lmiRS=newlmi;
 lmiterm([lmiRS 1 1 R],A,1,'s');       %#1:R*A'+AR 
 lmiterm([lmiRS 1 1 Ck],B2,1,'s');     %#1:Ck'*B2'+B2*Ck 
 lmiterm([lmiRS 2 1 0],A');            %#1:A' 
 lmiterm([lmiRS 2 1 Ak],1,1);          %#1:Ak 
 lmiterm([lmiRS 2 1 -Dk],C2',B2');     %#1:C2'*Dk'*B2' 
 lmiterm([lmiRS 2 2 S],1,A,'s');       %#1:A'*S+S*A 
 lmiterm([lmiRS 2 2 Bk],1,C2,'s');     %#1:C2'*Bk'+Bk*C2 
 lmiterm([lmiRS 1 3 0],B1);            %#1:B1 
 lmiterm([lmiRS 1 3 Dk],B2,D21);       %#1:B2*Dk*D21 
 lmiterm([lmiRS 2 3 S],1,B1);          %#1:S*B1 
 lmiterm([lmiRS 2 3 Bk],1,D21);        %#1:Bk*D21 
 lmiterm([lmiRS 3 3 gam],-1,1);        %#1:-gam 
 lmiterm([lmiRS 4 1 R],C1,1);          %#1:C1*R 
 lmiterm([lmiRS 4 1 Ck],D12,1);        %#1:D12*Ck 
 lmiterm([lmiRS 4 2 0],C1);            %#1:C1 
 lmiterm([lmiRS 4 2 Dk],D12,C2);       %#1:D12*Dk*C2 
 lmiterm([lmiRS 4 3 0],D11);           %#1:D11 
 lmiterm([lmiRS 4 3 Dk],D12,D21);      %#1:D12*Dk*D21 
 lmiterm([lmiRS 4 4 gam],-1,1);        %#1:-gam 
%-----
 lmiPL1=newlmi; 
 lmiterm([lmiPL1 1 1 R],A,1,'s');      %#2:R*A'+A*R 
 lmiterm([lmiPL1 1 1 Ck],B2,1,'s');    %#2:Ck'*B2'+B2*Ck 
 lmiterm([lmiPL1 2 1 Ak],1,1);         %#2:Ak 
 lmiterm([lmiPL1 1 2 0],A);            %#2:A 
 lmiterm([lmiPL1 1 2 Dk],B2,C2);       %#2:B2*Dk*C2 
 lmiterm([lmiPL1 2 2 S],1,A,'s');      %#2:A'*S+S*A 
 lmiterm([lmiPL1 2 2 Bk],1,C2,'s');    %#2:C2'*Bk'+Bk*C2 
% 
 lmiterm([lmiPL1 1 1 R],2*alpha,1);    %#2:2*alpha*R
 lmiterm([lmiPL1 2 1 0],2*alpha);      %#2:2*alpha*I 
 lmiterm([lmiPL1 2 2 S],2*alpha,1);    %#2:2*alpha*S 
%-----
 lmiPL2=newlmi; 
 lmiterm([lmiPL2 1 1 R],-r,1);         %#3:-r*R 
 lmiterm([lmiPL2 2 1 0],-r);           %#3:-r*I 
 lmiterm([lmiPL2 2 2 S],-r,1);         %#3:-r*S 
% 
 lmiterm([lmiPL2 1 3 R],A,1);          %#3:A*R
 lmiterm([lmiPL2 1 3 Ck],B2,1);        %#3:B2*Ck 
 lmiterm([lmiPL2 2 3 Ak],1,1);         %#3:Ak 
 lmiterm([lmiPL2 1 4 0],A);            %#3:A 
 lmiterm([lmiPL2 1 4 Dk],B2,C2);       %#3:B2*Dk*C2 
 lmiterm([lmiPL2 2 4 S],1,A);          %#3:S*A 
 lmiterm([lmiPL2 2 4 Bk],1,C2);        %#3:Bk*C2 
% 
 lmiterm([lmiPL2 3 3 R],-r,1);         %#3:-r*R
 lmiterm([lmiPL2 4 3 0],-r);           %#3:-r*I 
 lmiterm([lmiPL2 4 4 S],-r,1);         %#3:-r*S 
%-----
 sth=sin(th); cth=cos(th);
 lmiPL3=newlmi; 
 lmiterm([lmiPL3 1 1 R],sth*A,1,'s');  %#4:sth*(R*A'+A*R) 
 lmiterm([lmiPL3 1 1 Ck],sth*B2,1,'s');%#4:sth*(Ck'*B2'+B2*Ck) 
 lmiterm([lmiPL3 2 1 Ak],sth,1);       %#4:sth*(Ak) 
 lmiterm([lmiPL3 1 2 0],sth*A);        %#4:sth*(A) 
 lmiterm([lmiPL3 1 2 Dk],sth*B2,C2);   %#4:sth*(B2*Dk*C2) 
 lmiterm([lmiPL3 2 2 S],1,sth*A,'s');  %#4:sth*(A'*S+S*A) 
 lmiterm([lmiPL3 2 2 Bk],1,sth*C2,'s');%#4:sth*(C2'*Bk'+Bk*C2) 
% 
 lmiterm([lmiPL3 1 3 R],cth*A,1);      %#1:cth*(A*R) 
 lmiterm([lmiPL3 1 3 R],1,-cth*A');    %#1:cth*(-R*A')
 lmiterm([lmiPL3 1 3 Ck],cth*B2,1);     %#1:cth*(B*Ck) 
 lmiterm([lmiPL3 1 3 -Ck],-cth*B2',1);  %#1:cth*(-Ck'*B') 
 lmiterm([lmiPL3 2 3 Ak],cth,1);       %#4:cth*(Ak) 
 lmiterm([lmiPL3 1 4 -Ak],-cth,1);     %#4:cth*(-Ak') 
 lmiterm([lmiPL3 1 4 0],A);            %#4:cth*(A) 
 lmiterm([lmiPL3 2 3 0],-A');          %#4:cth*(-A') 
 lmiterm([lmiPL3 1 4 Dk],cth*B2,C2);   %#4:cth*(B2*Dk*C2) 
 lmiterm([lmiPL3 2 3 -Dk],-cth*C2',B2');%#4:cth*(-C2'*Dk'*B2') 
 lmiterm([lmiPL3 2 4 S],1,cth*A);      %#4:cth*(S*A) 
 lmiterm([lmiPL3 2 4 S],-cth*A',1);    %#4:cth*(-A'*S) 
 lmiterm([lmiPL3 2 4 Bk],1,cth*C2);    %#4:cth*(Bk*C2) 
 lmiterm([lmiPL3 2 4 -Bk],-cth*C2',1); %#4:cth*(-C2'*Bk') 
% 
 lmiterm([lmiPL3 3 3 R],sth*A,1,'s');  %#4:sth*(R*A'+A*R)
 lmiterm([lmiPL3 3 3 Ck],sth*B2,1,'s');%#4:sth*(Ck'*B2'+B2*Ck) 
 lmiterm([lmiPL3 4 3 Ak],sth,1);       %#4:sth*(Ak) 
 lmiterm([lmiPL3 3 4 0],sth*A);        %#4:sth*(A) 
 lmiterm([lmiPL3 3 4 Dk],sth*B2,C2);   %#4:sth*(B2*Dk*C2) 
 lmiterm([lmiPL3 4 4 S],1,sth*A,'s');  %#4:sth*(A'*S+S*A) 
 lmiterm([lmiPL3 4 4 Bk],1,sth*C2,'s');%#4:sth*(C2'*Bk'+Bk*C2) 
%-----
 posX=-newlmi;
 lmiterm([posX 1 1 R],1,1);            %#5:R 
 lmiterm([posX 2 1 0],1);              %#5:I 
 lmiterm([posX 2 2 S],1,1);            %#5:S 
%-----
 lmiDk=-newlmi;                        
 lmiterm([lmiDk 1 1 0],1e2);           %#6:1e2 
 lmiterm([lmiDk 2 2 0],1e2);           %#6:1e2 
 lmiterm([lmiDk 2 1 Dk],1,1);          %#6:Dk 
%-----
 lmig=newlmi;                          
 lmiterm([lmig,1,1,gam],1,1);          %#7:gam 
 lmiterm([lmig,1,1,0],-1e3);           %#7:1e3 
 LMIs=getlmis;
end
%-----
%eof

混合感度問題

以下では時間関数x(t)のラプラス変換を\displaystyle{\hat{x}(s)=\int_0^\infty x(t)e^{-st}\,dt}のように表します。

混合感度問題…Homework

[1] モデルの不確かさがある場合の制御系設計のために次を考えます。


図1 摂動前と摂動後の閉ループ系

上図の閉ループ系について、次の伝達関数(インパルス応答のラプラス変換、または入出力のラブラス変換の比)を定義します。

\displaystyle{(1)\quad\hat{L}(s)=\hat{G}(s)\hat{K}(s)}

\displaystyle{(2)\quad\hat{R}(s)=1+\hat{L}(s)}

\displaystyle{(3)\quad\boxed{\hat{S}(s)=\frac{1}{\hat{R}(s)}=\frac{1}{1+\hat{L}(s)}}}

\displaystyle{(4)\quad\boxed{\hat{T}(s)=\frac{\hat{L}(s)}{\hat{R}(s)}=\frac{\hat{L}(s)}{1+\hat{L}(s)}}}

ここで、\hat{L}(s), \hat{R}(s), \hat{S}(s), \hat{T}(s)はそれぞれループ伝達関数環送差感度関数相補感度関数とよばれ、次の制約式が成り立ちます。

\displaystyle{(5)\quad\boxed{\hat{S}(s)+\hat{T}(s)=1}}

制御対象の伝達特性の不確かさを表すために次式を考えます。

\displaystyle{(6)\quad\hat{G}_{\hat{\Delta}}(s)=(1+\hat{\Delta}(s))\hat{G}(s)}

ここで、\hat{\Delta}(s)乗法的摂動と呼ばれます。このとき摂動後のループ伝達関数、環送差、感度関数、相補感度関数を次のように表します。

\displaystyle{(7)\quad\hat{L}_{{\Delta}}(s)=\hat{G}_{{\Delta}}(s)\hat{K}(s)=(1+\hat{\Delta}(s))\hat{L}(s)}

\displaystyle{(8)\quad\hat{R}_{\Delta}}(s)=1+\hat{L}_{{\Delta}}(s)}

\displaystyle{(9)\quad\hat{S}_{{\Delta}}(s)=\frac{1}{\hat{R}_{{\Delta}}(s)}}

\displaystyle{(10)\quad\hat{T}_{{\Delta}}(s)=\frac{\hat{L}_{{\Delta}}(s)}{\hat{R}_{{\Delta}}(s)}}

●以下では、ラプラスのsを虚軸上に限定して(s=j\omega)議論を進めます。

まず、乗法的摂動ついては、あとで具体例を示しますが、ここでは次を仮定します。

\displaystyle{(11)\quad\boxed{|\hat{\Delta}(j\omega)|<|W_T(j\omega)|}}

一般に、乗法的摂動のノルムバンド|W_T(j\omega)|は高周波域で大きくなります。

また、(5)より、次の制約があり、\hat{S}(j\omega)\hat{T}(j\omega)は同時には小さくできません。

\displaystyle{(12)\quad\hat{S}(j\omega)+\hat{T}(j\omega)=1}

そこで、低周波域で顕著な重み関数|\hat{W}_S|と高周波域で顕著な重み関数|\hat{W}_T|を用いて

\displaystyle{(13)\quad \boxed{|\hat{W}_S(j\omega)\hat{S}(j\omega)|^2+|\hat{W}_T(j\omega)\hat{T}(j\omega)|^2}} }

の最小化を図ります。この問題は感度関数\hat{S}と相補感度関数\hat{T}を同時に考慮しているので、混合感度問題と呼ばれています。

●これは次のようなループ伝達関数の整形をもたらします。すなわち、低周波域で支配的な|\hat{W}_S(j\omega)|を用いてループゲイン|\hat{L}(j\omega)|を大きくします。また、高周波域で支配的な|\hat{W}_T(j\omega)|を用いてループゲイン|\hat{L}(j\omega)|を小さくすることを意味します。また、安定余裕を確保するために中間周波域ではループゲイン|\hat{L}(j\omega)|をなだらかに落とすことが求められます。


図2 ループ整形

[2] 混合感度問題を解くことによりモデルの不確かさを考慮したロバスト制御系を設計することができるのですが、その妥当性をナイキスト軌跡を用いて考えます。

ノミナル安定性 これはナイキストの安定判別法を表しています。

図3 NS条件

ノミナル性能 これはクリティカルポイント-1+j0を半径|\hat{W}_S|の円領域に拡大し、ナイキスト軌跡がクリティカルポインから十分離れるようにしたものです。

図4 NP条件

ロバスト安定性 これはモデルの不確かさがある場合のナイキスト軌跡に幅をもたせ場合の安定判別法を表しています。


図5 RS条件

ロバスト性能 これはこれはモデルの不確かさがある場合のナイキスト軌跡に幅をもたせ場合に十分性能を持たせることを意味しています。


図6 RP条件

以上、4つの仕様のうち、ロバスト性能が最も強力で、これが満足されれば、ロバスト安定性とノミナル性能は満足されます。ロバスト性能仕様は絶対値和となり、解析的に扱いにくいので、十分条件を考慮して、混合感度問題の定式化が行われているといえます。


図7 ロバスト性能の十分条件

[3] モデルの不確かさの一例として無駄時間の場合を考えます。ここで、無駄時間Lとは

\displaystyle{(14)\quad y(t)=u(t-L)}

のような入出力関係を言います。これをラプラス変換すると

\displaystyle{(15)\quad \hat{y}(s)=\int_0^\infty u(t-L)e^{-st}\,dt=e^{-sL}\hat{u}(s) }

したがって、伝達関数は

\displaystyle{(16)\quad \frac{\hat{u}(s)}{\hat{\delta}(s)}=e^{-Ls} }

となります。これを有理関数近似またはパデー近似(Pade approximation)することがよく行われます。

\displaystyle{(17)\quad \begin{array}{l} 1+(-Ls)+\frac{1}{2}(-Ls)^2+\cdots\simeq\frac{1+\beta s}{1+\alpha s}\\ \Rightarrow\ 1+\alpha s+(-Ls)(1+\alpha s)+\frac{1}{2}(-Ls)^2+\cdots\simeq 1+\beta s\\ \Rightarrow\ \alpha-L=\beta,\ \frac{1}{2}L^2-\alpha L=0\\ \Rightarrow\ \alpha=\frac{1}{2}L,\beta=-\frac{1}{2}L\\ \Rightarrow\ \boxed{e^{-Ls}\simeq\frac{1-\frac{1}{2}Ls}{1+\frac{1}{2}Ls}} \end{array} }

これは1次近似ですが、2次近似の場合は同様にして

\displaystyle{(18)\quad \boxed{e^{-Ls}\simeq\frac{1-\frac{1}{2}Ls-\frac{1}{12}L^2s^2}{1+\frac{1}{2}Ls+\frac{1}{12}L^2s^2}}}

となります。ステップ応答を比較してみると次のようになります。


図8 無駄時間Pade 近似の比較

それでは入力端に無駄時間がある場合の乗法的摂動を求めてみます。

\displaystyle{(19)\quad \underbrace{\hat{G}(s)e^{-Ls}}_{\hat{G}_{\hat{\Delta}(s)}}=(1+\underbrace{e^{-Ls}-1}_{\hat{\Delta}(s)})\hat{G}(s) }

このノルムバンドは次のように見積ることができます。

\displaystyle{(20)\quad \begin{array}{lll} \underbrace{|e^{-Ls}-1|}_{|\hat{\Delta}(s)|} &=&|(-Ls)+\frac{1}{2}(-Ls)^2+\cdots|\\ &=&|(-Ls)||1+\frac{1}{2}(-Ls)+\cdots| \simeq\underbrace{(1+\epsilon)\left|\frac{s}{L^{-1}}\right|}_{|\hat{W}_T(s)|} \end{array} }

次はL=5の場合の例です。


図9 無駄時間のノルムバンド

演習B61…Flipped Classroom
1^\circ 船舶の回頭モデル

\displaystyle{(21)\quad \left[\begin{array}{c} \dot{\psi}(t) \\ \dot{r}(t) \end{array}\right] = \left[\begin{array}{cc} 0 & 1\\ 0 & -\frac{1}{T} \end{array}\right] \left[\begin{array}{c} \psi(t) \\ r(t)  \end{array}\right] + \left[\begin{array}{c} 0 \\ \frac{K}{T} \end{array}\right] \delta(t-L) }

に対して、適当なPIDコントローラ

\displaystyle{(22)\quad \delta(t)=K_P(\psi_c-\psi(t))-K_Dr(t)+\int_0^t(\psi_c-\psi(\tau))d\tau }

が与えられているとする。次のプログラムを用いて、モデル誤差のノルムバンド(図9相当)、開ループ整形(図2相当)、閉ループ整形(図7参照)を描き、ロバスト性について検討せよ。

図10 開ループ整形と閉ループ整形

MATLAB
%b61.m 
%-----
 clear all, close all
 T1=118; T2=7.8; T3=18.5; T=T1+T2-T3, K=0.185
 zeta=0.5/sqrt(T*K), wn=sqrt(K/T)
 A=[0 1;0 -2*zeta*wn]; B=[0;wn^2]; C=[1 0];
%-----   
 w=logspace(-3,1,300);
 G(:,:)=freqresp(ss(A,B,C,[]),w); G=G.'; 
 ga_G=20*log10(abs(G));
 ph_G=180/pi*atan2(imag(G),real(G));
 lag=10;
 H=exp(-lag*i*w);
 ga_H=20*log10(abs(H));
 ph_H=180/pi*atan2(imag(H),real(H));
 GH=G.*H;
 ga_GH=20*log10(abs(GH));
 ph_GH=180/pi*atan2(imag(GH),real(GH));
 figure(1)
 subplot(211),semilogx(w,ga_G,w,ga_H,'b',w,ga_GH,'r'),grid,legend('G','H','GH')
 subplot(212),semilogx(w,ph_G,w,ph_H,'b',w,ph_GH,'r'),grid,legend('G','H','GH')
 figure(2)
 plot(real(G),imag(G),'o',real(GH),imag(GH),'+',-1,0,'or'),
 axis([-2 2 -2 2]); grid
%-----  
 ga_DL=20*log10(abs(H-1));
 ga_WT=20*log10(abs(lag*i*w));
 figure(3)
 semilogx(w,ga_DL,w,ga_WT'),grid,legend('DL','WT') 
%-----   
 Kp=2.3145921; Kd=46.886428; Ki=0.0097080;
 K=Kp+Kd*(i*w)+Ki./(i*w);
 ga_K=20*log10(abs(K));
 ph_K=180/pi*atan2(imag(K),real(K));
 L=GH.*K;
 ga_L=20*log10(abs(L));
 ph_L=180/pi*atan2(imag(L),real(L));
 WS=Ki*ones(1,length(w))./(i*w);
 WT=lag*i*w;
 ga_WS=20*log10(abs(WS));
 ga_WT=20*log10(abs(WT));
 figure(4)
 %semilogx(w,ga_GH,w,ga_K,w,ga_L,w,ga_WS,w,-ga_WT),grid,legend('GH','K','L','WS','WTi') 
 semilogx(w,ga_L,w,ga_WS,w,-ga_WT),grid,legend('L','WS','WTi') 
%-----   
 S=ones(1,length(w))./(1+L);
 ga_S=20*log10(abs(S));
 ph_S=180/pi*atan2(imag(S),real(S));
 T=L./(1+L);
 ga_T=20*log10(abs(T));
 ph_T=180/pi*atan2(imag(T),real(T));
 WS=Ki*ones(1,length(w))./(i*w);
 WT=lag*i*w;
 ga_WS=20*log10(abs(WS));
 ga_WT=20*log10(abs(WT));
 mu=20*log10(abs(WS.*S)+abs(WT.*T));
 figure(5)
 %semilogx(w,ga_S,w,ga_T,w,-ga_WS,w,-ga_WT,w,mu),grid,legend('S','T','WSi','WTi','mu') 
 semilogx(w,ga_S,w,ga_T,w,-ga_WS,w,-ga_WT),grid,legend('S','T','WSi','WTi') 
%-----  
%eof

AIP

AIP…Homework

[1] 次図のようなアーム駆動型倒立振子の実験装置を考えます。これは某企業のエンジニアによって考案された実験装置です。以下、AIPと参照します。


図1 アーム駆動型倒立振子

外見は2重倒立振子のように見えますが、第1振子はモータ軸に直結され、第2振子が第1振子の先端に軸支されています。興味深いのはこの制御対象AIPは、次図のように複数個の平衡状態をもつので、できるだけ多くの平衡状態まわり安定化できるコントローラをどのように設計するかを考えてみます。


図2 複数個の平衡状態

まず、モータには速度駆動型のドライバが装備されているので、この制御対象AIPのモデリングを次図のように行います。


図3 速度制御型アクチュエータを持つ場合のモデリング

これから、制御対象AIPのLPVモデルを次図のように得ます。


図4 AIPのLPVモデルの導出

次図にAIPのLPV制御の概念図を示します。


図5 LPV制御の概念図

次図にAIPのLPV制御系のシミュレータを示します。


図6 LPV制御のためのSimulink図

次図にAIPの制御系の応答比較を示します。


図7 制御方式の比較

演習B54…Flipped Classroom

1^\circ AIPのLPV制御系設計を行う、次のコードを説明せよ

MATLAB
%cADIP_of_gs.m
%-----
 clear all, close all
 global ell1 ell2 th10 th20
 ell1=0.13; ell2=0.15; m1=0.05; m2=0.03; g=9.8;
 Ta=0.1; Ka=1;
 th10=0; th20=0;
 th1=0; th2=70/180*pi;
 rymax=2*ell1*cos(th1); rymin=2*ell1*cos(th2); rynom=rymax;
 rxmin=2*ell1*sin(th1); rxmax=2*ell1*sin(th2); rxnom=rxmax; 
 A0=[0 1 0 0;
     3*g/(4*ell2) 0 -3*g/(4*ell2) 0;
     0 0 0 0;
     0 0 0 -1/Ta];
 A1=[0 0 0 0;
     0 0 0 0;
     0 0 0 1;
     0 0 0 0];
 Amax=A0+rymax*A1;
 Amin=A0+rymin*A1;
 Anom=A0+rynom*A1; 
 B=[0;0;0;Ka/Ta];
 CM=[1 0 0 0;
     0 0 1 0];
 DM=[0;0];
 S0=[A0 B;CM DM];
 S1=[A1 zeros(4,1);zeros(2,5)]; 
%-----
 wD=0.02; wI=0.5; C0=CM(2,:);
 AA1=[Amin zeros(4,1);-C0 0];
 AA2=[Amax zeros(4,1);-C0 0]; 
 B1=[zeros(4,1);1]; B2=[B;0];
 C1=[zeros(1,4) wI;wD*C0*Anom 0]; D11=zeros(2,1); D12=[0;wD*C0*B];
 C2=[CM zeros(2,1);zeros(1,4) 1]; D21=[0;0;0]; D22=[0;0;0];
%===== 
 alpha=0.1; r=50; th=90/180*pi;
 LMIs=of_synlmi7(AA1,AA2,B1,B2,C1,C2,D11,D12,D21,D22,alpha,r,th);
 cobj=zeros(1,decnbr(LMIs)); 
 cobj(1)=1; 
 [cost,xopt]=mincx(LMIs,cobj);  
 gopt=dec2mat(LMIs,xopt,1)
 R=dec2mat(LMIs,xopt,2); 
 S=dec2mat(LMIs,xopt,3);
%=====
 ak1=dec2mat(LMIs,xopt,4); 
 bk1=dec2mat(LMIs,xopt,5); 
 ck1=dec2mat(LMIs,xopt,6); 
 dk1=dec2mat(LMIs,xopt,7); 
 [u,sd,v]=svd(eye(size(AA1,1))-R*S); 
 sd=diag(sqrt(1./diag(sd))); 
 Ni=sd*v'; Mti=u*sd; 
 AK1=Ni*(ak1-S*(AA1-B2*dk1*C2)*R-bk1*C2*R-S*B2*ck1)*Mti; 
 BK1=Ni*(bk1-S*B2*dk1); 
 CK1=(ck1-dk1*C2*R)*Mti; 
 DK1=dk1; 
 K1=[AK1 BK1;CK1 DK1];
%-----  
 pl1=eig(AA1)
 ACL1=[AA1+B2*DK1*C2 B2*CK1;
      BK1*C2 AK1];
 plCL1=eig(ACL1)
 figure(1)
 dregion(-alpha,0,r,th,r*[-1,1,-1,1]) 
 plot(real(pl1),imag(pl1),'x',real(plCL1),imag(plCL1),'*')
%-----  
 ACL1=[AA1+B2*DK1*C2 B2*CK1;BK1*C2 AK1];
 BCL1=[B1+B2*DK1*D21;BK1*D21];
 CCL1=[C2(1,:) zeros(1,5)];
 AK1=[AK1 BK1(:,3);zeros(1,6)];
 BK1=[BK1(:,1:2) zeros(5,1); -1 0 1];
 CK1=[CK1 DK1(:,3)];
 DK1=[DK1(:,1:2) 0];
 SK1=[AK1 BK1;CK1 DK1];
%-----  
 w=logspace(-2,2,100); 
 ga_WS=20*log10(abs(wI./(i*w))); 
 ga_WT=20*log10(abs(wD*(i*w)));
 G(:,:)=freqresp(ss(Amax,B,C0,[]),w); G=G.'; ga_G=20*log10(abs(G));
 K(:,:)=freqresp(ss(AK1,BK1(:,1),CK1,DK1(:,1)),w); K=K.'; ga_K=20*log10(abs(K)); 
 T(:,:)=freqresp(ss(ACL1,BCL1(:,1),CCL1(1,:),[]),w); T=T.'; ga_T=20*log10(abs(T)); 
 ga_S=20*log10(abs(1-T)); 
 figure(2)
 subplot(121),semilogx(w,ga_G+ga_K,w,ga_WS,'b',w,-ga_WT,'r'),grid,legend('L','WS','1/WT')
 subplot(122),semilogx(w,ga_T,'r',w,-ga_WT,'r',w,ga_S,'b',w,-ga_WS,'b'),grid,legend('T','1/WT','S','1/WS')
%=====
 ak2=dec2mat(LMIs,xopt,8); 
 bk2=dec2mat(LMIs,xopt,9); 
 ck2=dec2mat(LMIs,xopt,10); 
 dk2=dec2mat(LMIs,xopt,11); 
 [u,sd,v]=svd(eye(size(AA2,1))-R*S); 
 sd=diag(sqrt(1./diag(sd))); 
 Ni=sd*v'; Mti=u*sd; 
 AK2=Ni*(ak2-S*(AA2-B2*dk2*C2)*R-bk2*C2*R-S*B2*ck2)*Mti; 
 BK2=Ni*(bk2-S*B2*dk2); 
 CK2=(ck2-dk2*C2*R)*Mti; 
 DK2=dk2; 
 K2=[AK2 BK2;CK2 DK2];
%-----  
 pl2=eig(AA2)
 ACL2=[AA2+B2*DK2*C2 B2*CK2;
       BK2*C2 AK2];
 plCL2=eig(ACL2)
 figure(3)
 dregion(-alpha,0,r,th,r*[-1,1,-1,1]) 
 plot(real(pl2),imag(pl2),'x',real(plCL2),imag(plCL2),'*') 
%-----  
 ACL2=[AA2+B2*DK2*C2 B2*CK2;BK2*C2 AK2];
 BCL2=[B1+B2*DK2*D21;BK2*D21];
 CCL2=[C2(1,:) zeros(1,5)];
 AK2=[AK2 BK2(:,3);zeros(1,6)];
 BK2=[BK2(:,1:2) zeros(5,1); -1 0 1];
 CK2=[CK2 DK2(:,3)];
 DK2=[DK2(:,1:2) 0];
 SK2=[AK2 BK2;CK2 DK2];
%-----  
 w=logspace(-2,2,100); 
 ga_WS=20*log10(abs(wI./(i*w))); 
 ga_WT=20*log10(abs(wD*(i*w)));
 G(:,:)=freqresp(ss(Amin,B,C0,[]),w); G=G.'; ga_G=20*log10(abs(G));
 K(:,:)=freqresp(ss(AK2,BK2(:,1),CK2,DK2(:,1)),w); K=K.'; ga_K=20*log10(abs(K)); 
 T(:,:)=freqresp(ss(ACL2,BCL2(:,1),CCL2(1,:),[]),w); T=T.'; ga_T=20*log10(abs(T)); 
 ga_S=20*log10(abs(1-T)); 
 figure(4)
 subplot(121),semilogx(w,ga_G+ga_K,w,ga_WS,'b',w,-ga_WT,'r'),grid,legend('L','WS','1/WT')
 subplot(122),semilogx(w,ga_T,'r',w,-ga_WT,'r',w,ga_S,'b',w,-ga_WS,'b'),grid,legend('T','1/WT','S','1/WS')
%-----
 prange=rymax-rymin; pmax=rymax; pmin=rymin; 
%sim("ADIP_of_gs")
 sim("ADIP_of_gs_2015a")
%-----
function LMIs=of_synlmi7(A1,A2,B1,B2,C1,C2,D11,D12,D21,D22,alpha,r,th)
 [n,m]=size(B2);  [p,n]=size(C2);
 setlmis([]); 
 gam=lmivar(1,[1 0]);  
 [R,xxx,Rdec]=lmivar(1,[n 1]); 
 [S,xxx,Sdec]=lmivar(1,[n 1]); 
 Ak1=lmivar(2,[n n]); 
 Bk1=lmivar(2,[n p]); 
 Ck1=lmivar(2,[m n]); 
 Dk1=lmivar(2,[m p]); 
 Ak2=lmivar(2,[n n]); 
 Bk2=lmivar(2,[n p]); 
 Ck2=lmivar(2,[m n]); 
 Dk2=lmivar(2,[m p]);  
%=====
 lmiRS1=newlmi;
 lmiterm([lmiRS1 1 1 R],A1,1,'s');       %#1:R*A'+AR 
 lmiterm([lmiRS1 1 1 Ck1],B2,1,'s');     %#1:Ck'*B2'+B2*Ck 
 lmiterm([lmiRS1 2 1 0],A1');            %#1:A' 
 lmiterm([lmiRS1 2 1 Ak1],1,1);          %#1:Ak 
 lmiterm([lmiRS1 2 1 -Dk1],C2',B2');     %#1:C2'*Dk'*B2' 
 lmiterm([lmiRS1 2 2 S],1,A1,'s');       %#1:A'*S+S*A 
 lmiterm([lmiRS1 2 2 Bk1],1,C2,'s');     %#1:C2'*Bk'+Bk*C2 
 lmiterm([lmiRS1 1 3 0],B1);             %#1:B1 
 lmiterm([lmiRS1 1 3 Dk1],B2,D21);       %#1:B2*Dk*D21 
 lmiterm([lmiRS1 2 3 S],1,B1);           %#1:S*B1 
 lmiterm([lmiRS1 2 3 Bk1],1,D21);        %#1:Bk*D21 
 lmiterm([lmiRS1 3 3 gam],-1,1);         %#1:-gam 
 lmiterm([lmiRS1 4 1 R],C1,1);           %#1:C1*R 
 lmiterm([lmiRS1 4 1 Ck1],D12,1);        %#1:D12*Ck 
 lmiterm([lmiRS1 4 2 0],C1);             %#1:C1 
 lmiterm([lmiRS1 4 2 Dk1],D12,C2);       %#1:D12*Dk*C2 
 lmiterm([lmiRS1 4 3 0],D11);            %#1:D11 
 lmiterm([lmiRS1 4 3 Dk1],D12,D21);      %#1:D12*Dk*D21 
 lmiterm([lmiRS1 4 4 gam],-1,1);         %#1:-gam 
%-----
 lmiPL11=newlmi; 
 lmiterm([lmiPL11 1 1 R],A1,1,'s');      %#2:R*A'+A*R 
 lmiterm([lmiPL11 1 1 Ck1],B2,1,'s');    %#2:Ck'*B2'+B2*Ck 
 lmiterm([lmiPL11 2 1 Ak1],1,1);         %#2:Ak 
 lmiterm([lmiPL11 1 2 0],A1);            %#2:A 
 lmiterm([lmiPL11 1 2 Dk1],B2,C2);       %#2:B2*Dk*C2 
 lmiterm([lmiPL11 2 2 S],1,A1,'s');      %#2:A'*S+S*A 
 lmiterm([lmiPL11 2 2 Bk1],1,C2,'s');    %#2:C2'*Bk'+Bk*C2 
% 
 lmiterm([lmiPL11 1 1 R],2*alpha,1);     %#2:2*alpha*R
 lmiterm([lmiPL11 2 1 0],2*alpha);       %#2:2*alpha*I 
 lmiterm([lmiPL11 2 2 S],2*alpha,1);     %#2:2*alpha*S 
%-----
 lmiPL21=newlmi; 
 lmiterm([lmiPL21 1 1 R],-r,1);          %#3:-r*R 
 lmiterm([lmiPL21 2 1 0],-r);            %#3:-r*I 
 lmiterm([lmiPL21 2 2 S],-r,1);          %#3:-r*S 
% 
 lmiterm([lmiPL21 1 3 R],A1,1);          %#3:A*R
 lmiterm([lmiPL21 1 3 Ck1],B2,1);        %#3:B2*Ck 
 lmiterm([lmiPL21 2 3 Ak1],1,1);         %#3:Ak 
 lmiterm([lmiPL21 1 4 0],A1);            %#3:A 
 lmiterm([lmiPL21 1 4 Dk1],B2,C2);       %#3:B2*Dk*C2 
 lmiterm([lmiPL21 2 4 S],1,A1);          %#3:S*A 
 lmiterm([lmiPL21 2 4 Bk1],1,C2);        %#3:Bk*C2 
% 
 lmiterm([lmiPL21 3 3 R],-r,1);          %#3:-r*R
 lmiterm([lmiPL21 4 3 0],-r);            %#3:-r*I 
 lmiterm([lmiPL21 4 4 S],-r,1);          %#3:-r*S 
%-----
 sth=sin(th); cth=cos(th);
 lmiPL31=newlmi; 
 lmiterm([lmiPL31 1 1 R],sth*A1,1,'s');  %#4:sth*(R*A'+A*R) 
 lmiterm([lmiPL31 1 1 Ck1],sth*B2,1,'s');%#4:sth*(Ck'*B2'+B2*Ck) 
 lmiterm([lmiPL31 2 1 Ak1],sth,1);       %#4:sth*(Ak) 
 lmiterm([lmiPL31 1 2 0],sth*A1);        %#4:sth*(A) 
 lmiterm([lmiPL31 1 2 Dk1],sth*B2,C2);   %#4:sth*(B2*Dk*C2) 
 lmiterm([lmiPL31 2 2 S],1,sth*A1,'s');  %#4:sth*(A'*S+S*A) 
 lmiterm([lmiPL31 2 2 Bk1],1,sth*C2,'s');%#4:sth*(C2'*Bk'+Bk*C2) 
% 
 lmiterm([lmiPL31 1 3 R],cth*A1,1);      %#1:cth*(A*R) 
 lmiterm([lmiPL31 1 3 R],1,-cth*A1');    %#1:cth*(-R*A')
 lmiterm([lmiPL31 1 3 Ck1],cth*B2,1);    %#1:cth*(B*Ck) 
 lmiterm([lmiPL31 1 3 -Ck1],-cth*B2',1); %#1:cth*(-Ck'*B') 
 lmiterm([lmiPL31 2 3 Ak1],cth,1);       %#4:cth*(Ak) 
 lmiterm([lmiPL31 1 4 -Ak1],-cth,1);     %#4:cth*(-Ak') 
 lmiterm([lmiPL31 1 4 0],A1);            %#4:cth*(A) 
 lmiterm([lmiPL31 2 3 0],-A1');          %#4:cth*(-A') 
 lmiterm([lmiPL31 1 4 Dk1],cth*B2,C2);   %#4:cth*(B2*Dk*C2) 
 lmiterm([lmiPL31 2 3 -Dk1],-cth*C2',B2');%#4:cth*(-C2'*Dk'*B2') 
 lmiterm([lmiPL31 2 4 S],1,cth*A1);      %#4:cth*(S*A) 
 lmiterm([lmiPL31 2 4 S],-cth*A1',1);    %#4:cth*(-A'*S) 
 lmiterm([lmiPL31 2 4 Bk1],1,cth*C2);    %#4:cth*(Bk*C2) 
 lmiterm([lmiPL31 2 4 -Bk1],-cth*C2',1); %#4:cth*(-C2'*Bk') 
% 
 lmiterm([lmiPL31 3 3 R],sth*A1,1,'s');  %#4:sth*(R*A'+A*R)
 lmiterm([lmiPL31 3 3 Ck1],sth*B2,1,'s');%#4:sth*(Ck'*B2'+B2*Ck) 
 lmiterm([lmiPL31 4 3 Ak1],sth,1);       %#4:sth*(Ak) 
 lmiterm([lmiPL31 3 4 0],sth*A1);        %#4:sth*(A) 
 lmiterm([lmiPL31 3 4 Dk1],sth*B2,C2);   %#4:sth*(B2*Dk*C2) 
 lmiterm([lmiPL31 4 4 S],1,sth*A1,'s');  %#4:sth*(A'*S+S*A) 
 lmiterm([lmiPL31 4 4 Bk1],1,sth*C2,'s');%#4:sth*(C2'*Bk'+Bk*C2) 
%=====
 lmiRS2=newlmi;
 lmiterm([lmiRS2 1 1 R],A2,1,'s');       %#1:R*A'+AR 
 lmiterm([lmiRS2 1 1 Ck2],B2,1,'s');     %#1:Ck'*B2'+B2*Ck 
 lmiterm([lmiRS2 2 1 0],A2');            %#1:A' 
 lmiterm([lmiRS2 2 1 Ak2],1,1);          %#1:Ak 
 lmiterm([lmiRS2 2 1 -Dk2],C2',B2');     %#1:C2'*Dk'*B2' 
 lmiterm([lmiRS2 2 2 S],1,A2,'s');       %#1:A'*S+S*A 
 lmiterm([lmiRS2 2 2 Bk2],1,C2,'s');     %#1:C2'*Bk'+Bk*C2 
 lmiterm([lmiRS2 1 3 0],B1);             %#1:B1 
 lmiterm([lmiRS2 1 3 Dk2],B2,D21);       %#1:B2*Dk*D21 
 lmiterm([lmiRS2 2 3 S],1,B1);           %#1:S*B1 
 lmiterm([lmiRS2 2 3 Bk2],1,D21);        %#1:Bk*D21 
 lmiterm([lmiRS2 3 3 gam],-1,1);         %#1:-gam 
 lmiterm([lmiRS2 4 1 R],C1,1);           %#1:C1*R 
 lmiterm([lmiRS2 4 1 Ck2],D12,1);        %#1:D12*Ck 
 lmiterm([lmiRS2 4 2 0],C1);             %#1:C1 
 lmiterm([lmiRS2 4 2 Dk2],D12,C2);       %#1:D12*Dk*C2 
 lmiterm([lmiRS2 4 3 0],D11);            %#1:D11 
 lmiterm([lmiRS2 4 3 Dk2],D12,D21);      %#1:D12*Dk*D21 
 lmiterm([lmiRS2 4 4 gam],-1,1);         %#1:-gam 
%-----
 lmiPL12=newlmi; 
 lmiterm([lmiPL12 1 1 R],A2,1,'s');      %#2:R*A'+A*R 
 lmiterm([lmiPL12 1 1 Ck2],B2,1,'s');    %#2:Ck'*B2'+B2*Ck 
 lmiterm([lmiPL12 2 1 Ak2],1,1);         %#2:Ak 
 lmiterm([lmiPL12 1 2 0],A2);            %#2:A 
 lmiterm([lmiPL12 1 2 Dk2],B2,C2);       %#2:B2*Dk*C2 
 lmiterm([lmiPL12 2 2 S],1,A2,'s');      %#2:A'*S+S*A 
 lmiterm([lmiPL12 2 2 Bk2],1,C2,'s');    %#2:C2'*Bk'+Bk*C2 
% 
 lmiterm([lmiPL12 1 1 R],2*alpha,1);     %#2:2*alpha*R
 lmiterm([lmiPL12 2 1 0],2*alpha);       %#2:2*alpha*I 
 lmiterm([lmiPL12 2 2 S],2*alpha,1);     %#2:2*alpha*S 
%-----
 lmiPL22=newlmi; 
 lmiterm([lmiPL22 1 1 R],-r,1);          %#3:-r*R 
 lmiterm([lmiPL22 2 1 0],-r);            %#3:-r*I 
 lmiterm([lmiPL22 2 2 S],-r,1);          %#3:-r*S 
% 
 lmiterm([lmiPL22 1 3 R],A2,1);          %#3:A*R
 lmiterm([lmiPL22 1 3 Ck2],B2,1);        %#3:B2*Ck 
 lmiterm([lmiPL22 2 3 Ak2],1,1);         %#3:Ak 
 lmiterm([lmiPL22 1 4 0],A2);            %#3:A 
 lmiterm([lmiPL22 1 4 Dk2],B2,C2);       %#3:B2*Dk*C2 
 lmiterm([lmiPL22 2 4 S],1,A2);          %#3:S*A 
 lmiterm([lmiPL22 2 4 Bk2],1,C2);        %#3:Bk*C2 
% 
 lmiterm([lmiPL22 3 3 R],-r,1);          %#3:-r*R
 lmiterm([lmiPL22 4 3 0],-r);            %#3:-r*I 
 lmiterm([lmiPL22 4 4 S],-r,1);          %#3:-r*S 
%-----
 sth=sin(th); cth=cos(th);
 lmiPL32=newlmi; 
 lmiterm([lmiPL32 1 1 R],sth*A2,1,'s');  %#4:sth*(R*A'+A*R) 
 lmiterm([lmiPL32 1 1 Ck2],sth*B2,1,'s');%#4:sth*(Ck'*B2'+B2*Ck) 
 lmiterm([lmiPL32 2 1 Ak2],sth,1);       %#4:sth*(Ak) 
 lmiterm([lmiPL32 1 2 0],sth*A2);        %#4:sth*(A) 
 lmiterm([lmiPL32 1 2 Dk2],sth*B2,C2);   %#4:sth*(B2*Dk*C2) 
 lmiterm([lmiPL32 2 2 S],1,sth*A2,'s');  %#4:sth*(A'*S+S*A) 
 lmiterm([lmiPL32 2 2 Bk2],1,sth*C2,'s');%#4:sth*(C2'*Bk'+Bk*C2) 
% 
 lmiterm([lmiPL32 1 3 R],cth*A2,1);      %#1:cth*(A*R) 
 lmiterm([lmiPL32 1 3 R],1,-cth*A2');    %#1:cth*(-R*A')
 lmiterm([lmiPL32 1 3 Ck2],cth*B2,1);    %#1:cth*(B*Ck) 
 lmiterm([lmiPL32 1 3 -Ck2],-cth*B2',1); %#1:cth*(-Ck'*B') 
 lmiterm([lmiPL32 2 3 Ak2],cth,1);       %#4:cth*(Ak) 
 lmiterm([lmiPL32 1 4 -Ak2],-cth,1);     %#4:cth*(-Ak') 
 lmiterm([lmiPL32 1 4 0],A2);            %#4:cth*(A) 
 lmiterm([lmiPL32 2 3 0],-A2');          %#4:cth*(-A') 
 lmiterm([lmiPL32 1 4 Dk2],cth*B2,C2);   %#4:cth*(B2*Dk*C2) 
 lmiterm([lmiPL32 2 3 -Dk2],-cth*C2',B2');%#4:cth*(-C2'*Dk'*B2') 
 lmiterm([lmiPL32 2 4 S],1,cth*A2);      %#4:cth*(S*A) 
 lmiterm([lmiPL32 2 4 S],-cth*A2',1);    %#4:cth*(-A'*S) 
 lmiterm([lmiPL32 2 4 Bk2],1,cth*C2);    %#4:cth*(Bk*C2) 
 lmiterm([lmiPL32 2 4 -Bk2],-cth*C2',1); %#4:cth*(-C2'*Bk') 
% 
 lmiterm([lmiPL32 3 3 R],sth*A2,1,'s');  %#4:sth*(R*A'+A*R)
 lmiterm([lmiPL32 3 3 Ck2],sth*B2,1,'s');%#4:sth*(Ck'*B2'+B2*Ck) 
 lmiterm([lmiPL32 4 3 Ak2],sth,1);       %#4:sth*(Ak) 
 lmiterm([lmiPL32 3 4 0],sth*A2);        %#4:sth*(A) 
 lmiterm([lmiPL32 3 4 Dk2],sth*B2,C2);   %#4:sth*(B2*Dk*C2) 
 lmiterm([lmiPL32 4 4 S],1,sth*A2,'s');  %#4:sth*(A'*S+S*A) 
 lmiterm([lmiPL32 4 4 Bk2],1,sth*C2,'s');%#4:sth*(C2'*Bk'+Bk*C2)  
%=====
 posX=-newlmi;
 lmiterm([posX 1 1 R],1,1);              %#5:R 
 lmiterm([posX 2 1 0],1);                %#5:I 
 lmiterm([posX 2 2 S],1,1);              %#5:S 
%-----
 lmiDk1=-newlmi;                        
 lmiterm([lmiDk1 1 1 0],1e2);            %#6:1e2 
 lmiterm([lmiDk1 2 2 0],1e2);            %#6:1e2 
 lmiterm([lmiDk1 2 1 Dk1],1,1);          %#6:Dk 
%-----
 lmiDk2=-newlmi;                        
 lmiterm([lmiDk2 1 1 0],1e2);            %#6:1e2 
 lmiterm([lmiDk2 2 2 0],1e2);            %#6:1e2 
 lmiterm([lmiDk2 2 1 Dk2],1,1);          %#6:Dk 
%-----
 lmig=newlmi;                          
 lmiterm([lmig,1,1,gam],1,1);            %#7:gam 
 lmiterm([lmig,1,1,0],-1e3);             %#7:1e3 
 LMIs=getlmis;
end
%-----
%eof

ACC BP

次の論文で提起されているロバスト制御ベンチマーク問題ACC-BPを考えます。
Bong WieDennis S. Bernsteint: Benchmark Problems for Robust Control Design

ACC BP…Homework
[1] 次図のような連結台車を考えます。

これは次の運動方程式で表されます。

\displaystyle{(1)\quad \begin{array}{l} m_1\ddot{x}_1(t)=k(x_2(t)-x_1(t))+u(t)+w_1(t)\\ m_2\ddot{x}_2(t)=k(x_1(t)-x_2(t))+w_2(t) \end{array} }

ここで、パラメータの値は次が想定されています。

\displaystyle{(2)\quad \begin{array}{l} m_1=m_2=1\\ 0.5\le k \le 2 \end{array} }

●バネ定数kを乱数を100個発生させて所定の範囲内で変化させるとき、台車2に対してインパルス外乱が加わるときのx_2-x_1の振舞いのシミュレーションを行ってみます。

MATLAB
%ACCBP0.m
%-----
 clear all, close all
 m1=1; m2=1; kmin=0.5; kmax=2;
 k=(kmax-kmin)/2; 
 A0=[0 0 1 0;0 0 0 1;0 0 0 0;0 0 0 0];
 A1=[0 0 0 0;0 0 0 0;-1/m1 1/m1 0 0;1/m2 -1/m2 0 0];  
 B=[0 0 0;0 0 0;1/m1 0 1/m1;0 1/m2 0];
 B1=B(:,1); B2=B(:,2); 
 C=[-1 1 0 0];
 D=0;
 S0=[A0 B1;C D];
 S1=zeros(5,5); S1(1:4,1:4)=A1;
%-----
 k=(kmax-kmin)/2;
 t0=0; t1=20; t=t0:(t1-t0)/100:t1;
 for i=1:100
   k=rand*(kmax-kmin)+kmin;
   A=A0+k*A1;
   sys=ss(A,B1,C,D);
   [y,t]=initial(sys,B2,t);
   figure(1),plot(t,y),hold on
 end
 axis([t0 t1 -2 2]),grid
%-----
%eof


図1 台車2にインパルス外乱が加わるときのx_2-x_1の振舞い

原論文にはさまざまな問題設定がありますが、ここでは、台車2に対するインパルス外乱の下で、台車1の整定時間を20秒以内とする制御系を設計したいとします。ただし、操作入力は台車1に与えられ、次の振幅制限

\displaystyle{(3)\quad \begin{array}{l} |u(t)|\le 1 \end{array} }

が課されるとします。さらに観測出力は台車1の変位x_1(t)とします。

[2] 制御対象のLPVモデルを導出します。

\displaystyle{(4)\quad \begin{array}{l} \underbrace{ \left[\begin{array}{cc} m_1 & 0 \\ 0 & m_2 \end{array}\right] }_{M} \underbrace{ \left[\begin{array}{c} \ddot{x}_1(t)\\ \ddot{x}_2(t) \end{array}\right] }_{\ddot{x}(t)} +\underbrace{ \left[\begin{array}{cc} k & -k \\ -k & -k \end{array}\right] }_{K(k)} \underbrace{ \left[\begin{array}{ccc} {x}_1(t)\\ {x}_2(t) \end{array}\right] }_{{\xi}(t)} =\underbrace{ \left[\begin{array}{ccc} 1\\ 0 \end{array}\right] }_{E_{2\times1}}u(t) +\underbrace{ \left[\begin{array}{ccc} w_{1}\\ w_{2} \end{array}\right] }_{w_{d}} \end{array} }

\displaystyle{(5)\quad \begin{array}{l} \left[\begin{array}{c} \dot{\xi}(t)\\ \ddot{\xi}(t) \end{array}\right] = \underbrace{ \left[\begin{array}{cccc} 0_{2\times2} & I_2\\ -M^{-1}K & -M^{-1}D \end{array}\right] }_{A(k)} \left[\begin{array}{c} {\xi}(t)\\ \dot{\xi}(t) \end{array}\right]\\ + \left[\begin{array}{c} 0_{2\times1}\\ M^{-1}E_{2\times1} \end{array}\right]u(t) + \left[\begin{array}{c} 0_{2\times2}\\ M^{-1} \end{array}\right]w_d \end{array} }

ここで、\alpha_1\le\alpha\le\alpha_2に対する次の内分式に注目します。

\displaystyle{(6)\quad \alpha=\underbrace{\frac{\alpha_2-\alpha}{\alpha_2-\alpha_1}}_{p_{1}(\alpha)}\alpha_1+ \underbrace{\frac{\alpha-\alpha_1}{\alpha_2-\alpha_1}}_{p_{2}(\alpha)}\alpha_2 }

\displaystyle{(7)\quad p_1(\alpha)+p_2(\alpha)=1 }

k_{min}\le k \le k_{max}のとき、上の状態方程式は、端点モデル

\displaystyle{(8)\quad \begin{array}{l} \dot{x}(t)=\underbrace{A(k_{min})}_{A_1}x(t)+Bu(t)\\ \dot{x}(t)=\underbrace{A(k_{max})}_{A_2}x(t)+Bu(t) \end{array} }

を、p_1(k),p_2(k)によって重み付けして、LPVモデル

\displaystyle{(8)\quad \dot{x}(t)=\underbrace{(p_1(k)A_1+p_2(k)A_2)}_{A(k)}x(t)+Bu(t) }

として表されます。実際

\displaystyle{(9)\quad k= \underbrace{\frac{k_{max}-k}{k_{max}-k_{min}}}_{p_1(k)}k_{min} + \underbrace{\frac{k-k_{min}}{k_{max}-k_{min}}}_{p_2(k)}k_{max} }

\displaystyle{(10)\quad A(k)= \underbrace{\frac{k_{max}-k}{k_{max}-k_{min}}}_{p_1(k)} \underbrace{A(k_{min})}_{A_1} + \underbrace{\frac{k-k_{min}}{k_{max}-k_{min}}}_{p_2(k)} \underbrace{A(k_{max})}_{A_2} }

[3] 状態FBによる解として求める場合の2ポートシステムの例を次式に示します。

\displaystyle{(11) P: \left\{\begin{array}{l} \left[\begin{array}{c} \dot{\xi}\\ \ddot{\xi} \end{array}\right] = \underbrace{ \left[\begin{array}{cccc} 0_{2\times2} & I_2\\ -M^{-1}K & -M^{-1}D \end{array}\right] }_{A(k)=p_1(k)A_1+p_2(k)A_2} \left[\begin{array}{c} {\xi}\\ \dot{\xi} \end{array}\right] + \underbrace{ \left[\begin{array}{c} 0_{2\times2}\\ M^{-1} \end{array}\right] }_{B_1} w_d + \underbrace{ \left[\begin{array}{c} 0_{2\times1}\\ M^{-1}E_{2\times1} \end{array}\right] }_{B_2} u\\ \underbrace{ \left[\begin{array}{c} x_2-x_1 \\ x_1\\ 2u \end{array}\right] }_{y_1} = \underbrace{ \left[\begin{array}{cc|cc} -1 & 1 & 0 & 0\\ 1 & 0 & 0 & 0\\ 0 & 0 & 0 & 0\\ \end{array}\right] }_{C_1} \left[\begin{array}{c} {\xi}\\ \dot{\xi} \end{array}\right] + \underbrace{ 0_{3\times2} }_{D_{11}} w_d + \underbrace{ \left[\begin{array}{c} 0 \\ 0 \\ 2 \end{array}\right] }_{D_{12}} u \end{array}\right. }

バネ定数kを乱数を100個発生させて所定の範囲内で変化させるとき、台車2に対してインパルス外乱が加わるときの台車1の変位x_1と操作入力uの振舞いのシミュレーションを次に示します。


図2 状態FBによる求解結果

[4] 出力FBによる解として求める場合の2ポートシステムの例を次式に示します。

\displaystyle{(12) P: \left\{\begin{array}{l} \left[\begin{array}{c} \dot{\xi}\\ \ddot{\xi} \end{array}\right] = \underbrace{ \left[\begin{array}{cccc} 0_{2\times2} & I_2\\ -M^{-1}K & -M^{-1}D \end{array}\right] }_{A(k)=p_1(k)A_1+p_2(k)A_2} \left[\begin{array}{c} {\xi}\\ \dot{\xi} \end{array}\right] + \underbrace{ \left[\begin{array}{c} 0_{2\times2}\\ M^{-1} \end{array}\right] }_{B_1} w_d + \underbrace{ \left[\begin{array}{c} 0_{2\times1}\\ M^{-1}E_{2\times1} \end{array}\right] }_{B_2} u\\ \underbrace{ \left[\begin{array}{c} x_2-x_1 \\ x_1\\ 2u \end{array}\right] }_{y_1} = \underbrace{ \left[\begin{array}{cc|cc} -1 & 1 & 0 & 0\\ 1 & 0 & 0 & 0\\ 0 & 0 & 0 & 0\\ \end{array}\right] }_{C_1} \left[\begin{array}{c} {\xi}\\ \dot{\xi} \end{array}\right] + \underbrace{ 0_{3\times2} }_{D_{11}} w_d + \underbrace{ \left[\begin{array}{c} 0 \\ 0 \\ 2 \end{array}\right] }_{D_{12}} u\\ \underbrace{ x_1 }_{y_2} = \underbrace{ \left[\begin{array}{cc|cc} 1 & 0 & 0 & 0 \end{array}\right] }_{C_2} \left[\begin{array}{c} {\xi}(t)\\ \dot{\xi}(t) \end{array}\right] + \underbrace{ 0_{1\times2} }_{D_{21}} w_d + \underbrace{ 0 }_{D_{22}} u \end{array}\right. }

バネ定数kを乱数を100個発生させて所定の範囲内で変化させるとき、台車2に対してインパルス外乱が加わるときの台車1の変位x_1と操作入力uの振舞いのシミュレーションを次に示します。


図3 出力FBによる求解結果

演習B53…Flipped Classroom

1^\circ 図2のグラフを描く、次のコードを説明せよ

MATLAB
%cACCBP_sf_gs.m
%-----
 clear all, close all
 m1=1; m2=1; kmin=0.5; kmax=2;
 A0=[0 0 1 0;0 0 0 1;0 0 0 0;0 0 0 0];
 A1=[0 0 0 0;0 0 0 0;-1/m1 1/m1 0 0;1/m2 -1/m2 0 0];  
 C=[-1 1 0 0];
 D=0;
 a1= A0+kmin*A1; 
 a2= A0+kmax*A1;
 A1=a1; A2=a2;
 BG=[0 0 0;0 0 0;1/m1 0 1/m1;0 1/m2 0]; 
 B1=BG(:,2); %負荷外乱 
 B2=BG(:,3); %操作入力
 C1=[1 -1 0 0;1 0 0 0;0 0 0 0];  
 D11=zeros(3,1); 
 D12=[0;0;2];
%-----
 alpha=0.05; r=2; th=pi/4;
 LMIs=sf_synlmi7(A1,A2,B1,B2,C1,D11,D12,alpha,r,th);
 cobj=zeros(1,decnbr(LMIs)); 
 cobj(1)=1; 
 [cost,xopt]=mincx(LMIs,cobj); 
 gopt=dec2mat(LMIs,xopt,1)
 Y=dec2mat(LMIs,xopt,2);  
 Z1=dec2mat(LMIs,xopt,3);
 Z2=dec2mat(LMIs,xopt,4); 
 F1=Z1/Y,pl1=eig(A1-B2*F1)
 F2=Z2/Y,pl2=eig(A2-B2*F2) 
%-----
 A0=[0 0 1 0;0 0 0 1;0 0 0 0;0 0 0 0];
 A1=[0 0 0 0;0 0 0 0;-1/m1 1/m1 0 0;1/m2 -1/m2 0 0];  
 prange=kmax-kmin; pmax=kmax; pmin=kmin; 
 t0=0; t1=20; t=t0:(t1-t0)/100:t1;
 for i=1:100
   k=rand*(kmax-kmin)+kmin; 
   A=A0+k*A1;
   p1=(pmax-k)/prange; p2=(k-pmin)/prange;
   F=p1*F1+p2*F2;
   sys=ss(A-B2*F,B1,C,D);
   [y,t]=initial(sys,B1,t);
   figure(1),plot(t,y),hold on
 end
 axis([t0 t1 -2 2]),grid
%-----
function LMIs=sf_synlmi7(A1,A2,B1,B2,C1,D11,D12,alpha,r,th)
 [n,m]=size(B2);  
 sth=sin(th); cth=cos(th);
 setlmis([]);
 gam=lmivar(1,[1 0]); 
 Y=lmivar(1,[n 1]); 
 Z1=lmivar(2,[m n]); 
 Z2=lmivar(2,[m n]); 
%
 lmi11=newlmi;
 lmiterm([lmi11,1,1,Y],A1,1,'s');      %#1:A*Y+Y*A' 
 lmiterm([lmi11,1,1,Z1],-B2,1,'s');    %#1:-(B2*Z+Z*B2') 
 lmiterm([lmi11,1,2,0],B1);            %#1:B1 
 lmiterm([lmi11,2,2,gam],-1,1);        %#1:-gam 
 lmiterm([lmi11,3,1,Y],C1,1);          %#1:C1*Y 
 lmiterm([lmi11,3,1,Z1],-D12,1);       %#1:D12*Z 
 lmiterm([lmi11,3,2,0],D11);           %#1:D11 
 lmiterm([lmi11,3,3,gam],-1,1);        %#1:-gam 
 lmi21=newlmi;  
 lmiterm([lmi21,1,1,Y],A1,1,'s');      %#2:A*Y+Y*A'   
 lmiterm([lmi21,1,1,Z1],-B2,1,'s');    %#2:-(B2*Z+Z'*B2')   
 lmiterm([lmi21,1,1,Y],2*alpha,1);     %#2:2*alpha*Y   
 lmi31=newlmi;  
 lmiterm([lmi31,1,1,Y],-r,1);          %#3:-r*Y  
 lmiterm([lmi31,1,2,Y],A1,1);          %#3:A*Y   
 lmiterm([lmi31,1,2,Z1],-B2,1);        %#3:-B2*Z  
 lmiterm([lmi31,2,2,Y],-r,1);          %#3:-r*Y  
 lmi41=newlmi;  
 lmiterm([lmi41,1,1,Y],sth*A1,1,'s');  %#4:sth*(A*Y+Y*A')  
 lmiterm([lmi41,1,1,Z1],-sth*B2,1,'s');%#4:-sth*(B2*Z+Z'*B2')  
 lmiterm([lmi41,1,2,Y],cth*A1,1);      %#4:cth*A*Y  
 lmiterm([lmi41,1,2,Y],1,-cth*A1');    %#4:-cth*Y*A'  
 lmiterm([lmi41,1,2,Z1],-cth*B2,1);    %#4:-cth*B2*Z  
 lmiterm([lmi41,1,2,-Z1],1,cth*B2');   %#4:cth*Z'*B2'  
 lmiterm([lmi41,2,2,Y],sth*A1,1,'s');  %#4:sth*(A*Y+Y*A')  
 lmiterm([lmi41,2,2,Z1],-sth*B2,1,'s');%#4:-sth*(B2*Z+Z'*B2')  
%
 lmi12=newlmi;
 lmiterm([lmi12,1,1,Y],A2,1,'s');      %#1:A*Y+Y*A' 
 lmiterm([lmi12,1,1,Z2],-B2,1,'s');    %#1:-(B2*Z+Z*B2') 
 lmiterm([lmi12,1,2,0],B1);            %#1:B1 
 lmiterm([lmi12,2,2,gam],-1,1);        %#1:-gam 
 lmiterm([lmi12,3,1,Y],C1,1);          %#1:C1*Y 
 lmiterm([lmi12,3,1,Z2],-D12,1);       %#1:D12*Z 
 lmiterm([lmi12,3,2,0],D11);           %#1:D11 
 lmiterm([lmi12,3,3,gam],-1,1);        %#1:-gam 
 lmi22=newlmi;  
 lmiterm([lmi22,1,1,Y],A2,1,'s');      %#2:A*Y+Y*A'   
 lmiterm([lmi22,1,1,Z2],-B2,1,'s');    %#2:-(B2*Z+Z'*B2')   
 lmiterm([lmi22,1,1,Y],2*alpha,1);     %#2:2*alpha*Y   
 lmi32=newlmi;  
 lmiterm([lmi32,1,1,Y],-r,1);          %#3:-r*Y  
 lmiterm([lmi32,1,2,Y],A2,1);          %#3:A*Y   
 lmiterm([lmi32,1,2,Z2],-B2,1);        %#3:-B2*Z  
 lmiterm([lmi32,2,2,Y],-r,1);          %#3:-r*Y  
 lmi42=newlmi;  
 lmiterm([lmi42,1,1,Y],sth*A2,1,'s');  %#4:sth*(A*Y+Y*A')  
 lmiterm([lmi42,1,1,Z2],-sth*B2,1,'s');%#4:-sth*(B2*Z+Z'*B2')  
 lmiterm([lmi42,1,2,Y],cth*A2,1);      %#4:cth*A*Y  
 lmiterm([lmi42,1,2,Y],1,-cth*A2');    %#4:-cth*Y*A'  
 lmiterm([lmi42,1,2,Z2],-cth*B2,1);    %#4:-cth*B2*Z  
 lmiterm([lmi42,1,2,-Z2],1,cth*B2');   %#4:cth*Z'*B2'  
 lmiterm([lmi42,2,2,Y],sth*A2,1,'s');  %#4:sth*(A*Y+Y*A')  
 lmiterm([lmi42,2,2,Z2],-sth*B2,1,'s');%#4:-sth*(B2*Z+Z'*B2')  
%
 lmi5=newlmi;
 lmiterm([-lmi5,1,1,Y],1,1);           %#5:Y   
 lmi6=newlmi;
 lmiterm([lmi6,1,1,gam],1,1);          %#6:gam 
 lmiterm([-lmi6,1,1,0],1e3);           %#6:1000    
 LMIs=getlmis; 
end
%-----
%eof

2^\circ 図3のグラフを描く、次のコードを説明せよ。

MATLAB
%cACCBP_of_gs.m
%-----
 clear all, close all
 m1=1; m2=1; kmin=0.5; kmax=2; 
 A1=[0 0 1 0;0 0 0 1;-kmin/m1 kmin/m1 0 0;kmin/m2 -kmin/m2 0 0];
 A2=[0 0 1 0;0 0 0 1;-kmax/m1 kmax/m1 0 0;kmax/m2 -kmax/m2 0 0];
 BG=[0 0 0;0 0 0;1/m1 0 1/m1;0 1/m2 0]; 
 B1=BG(:,2); B2=BG(:,3);
 C1=[-1 1 0 0;1 0 0 0;0 0 0 0]; D11=zeros(3,1); D12=[0;0;2];
 C2=[1 0 0 0]; D21=0; D22=0;
%-----
 alpha=0.05; r=5; th=0.5*pi;
 LMIs=of_synlmi7(A1,A2,B1,B2,C1,C2,D11,D12,D21,D22,alpha,r,th);
 cobj=zeros(1,decnbr(LMIs)); 
 cobj(1)=1; 
 [cost,xopt]=mincx(LMIs,cobj);  
 gopt=dec2mat(LMIs,xopt,1)
 R=dec2mat(LMIs,xopt,2); 
 S=dec2mat(LMIs,xopt,3); 
 %-----
 ak1=dec2mat(LMIs,xopt,4); 
 bk1=dec2mat(LMIs,xopt,5); 
 ck1=dec2mat(LMIs,xopt,6); 
 dk1=dec2mat(LMIs,xopt,7); 
 [u,sd,v]=svd(eye(size(A1,1))-R*S); 
 sd=diag(sqrt(1./diag(sd))); 
 Ni=sd*v'; Mti=u*sd; 
 AK1=Ni*(ak1-S*(A1-B2*dk1*C2)*R-bk1*C2*R-S*B2*ck1)*Mti; 
 BK1=Ni*(bk1-S*B2*dk1); 
 CK1=(ck1-dk1*C2*R)*Mti; 
 DK1=dk1; 
 K1=[AK1 BK1;CK1 DK1];
 %-----
 ak2=dec2mat(LMIs,xopt,8); 
 bk2=dec2mat(LMIs,xopt,9); 
 ck2=dec2mat(LMIs,xopt,10); 
 dk2=dec2mat(LMIs,xopt,11); 
 [u,sd,v]=svd(eye(size(A2,1))-R*S); 
 sd=diag(sqrt(1./diag(sd))); 
 Ni=sd*v'; Mti=u*sd; 
 AK2=Ni*(ak2-S*(A2-B2*dk2*C2)*R-bk2*C2*R-S*B2*ck2)*Mti; 
 BK2=Ni*(bk2-S*B2*dk2); 
 CK2=(ck2-dk2*C2*R)*Mti; 
 DK2=dk2; 
 K2=[AK2 BK2;CK2 DK2];
%-----
 A0=[0 0 1 0;0 0 0 1;0 0 0 0;0 0 0 0];
 A1=[0 0 0 0;0 0 0 0;-1/m1 1/m1 0 0;1/m2 -1/m2 0 0];  
 prange=kmax-kmin; pmax=kmax; pmin=kmin; 
 t0=0; t1=20; t=t0:(t1-t0)/100:t1;
 for i=1:100
   k=rand*(kmax-kmin)+kmin; 
   A=A0+k*A1;
   p1=(pmax-k)/prange; p2=(k-pmin)/prange;
   AK=p1*AK1+p2*AK2;
   BK=p1*BK1+p2*BK2;
   CK=p1*CK1+p2*CK2;
   DK=p1*DK1+p2*DK2;
   ACL=[A+B2*DK*C2 B2*CK;BK*C2 AK];   
   BCL=[B1+B2*DK*D21;BK*D21];
   CCL=[1 0 0]*[C1+D12*DK*C2 D12*CK];
   DCL=[1 0 0]*(D11+D12*DK*D21);
   sys=ss(ACL,BCL,CCL,DCL);
   [y,t]=initial(sys,[B1;zeros(4,1)],t);
   figure(1),plot(t,y),hold on
 end
 axis([t0 t1 -2 2]),grid
%-----
function LMIs=of_synlmi7(A1,A2,B1,B2,C1,C2,D11,D12,D21,D22,alpha,r,th)
 [n,m]=size(B2);  [p,n]=size(C2);
 setlmis([]); 
 gam=lmivar(1,[1 0]);  
 [R,xxx,Rdec]=lmivar(1,[n 1]); 
 [S,xxx,Sdec]=lmivar(1,[n 1]); 
 Ak1=lmivar(2,[n n]); 
 Bk1=lmivar(2,[n p]); 
 Ck1=lmivar(2,[m n]); 
 Dk1=lmivar(2,[m p]); 
 Ak2=lmivar(2,[n n]); 
 Bk2=lmivar(2,[n p]); 
 Ck2=lmivar(2,[m n]); 
 Dk2=lmivar(2,[m p]);  
%=====
 lmiRS1=newlmi;
 lmiterm([lmiRS1 1 1 R],A1,1,'s');       %#1:R*A'+AR 
 lmiterm([lmiRS1 1 1 Ck1],B2,1,'s');     %#1:Ck'*B2'+B2*Ck 
 lmiterm([lmiRS1 2 1 0],A1');            %#1:A' 
 lmiterm([lmiRS1 2 1 Ak1],1,1);          %#1:Ak 
 lmiterm([lmiRS1 2 1 -Dk1],C2',B2');     %#1:C2'*Dk'*B2' 
 lmiterm([lmiRS1 2 2 S],1,A1,'s');       %#1:A'*S+S*A 
 lmiterm([lmiRS1 2 2 Bk1],1,C2,'s');     %#1:C2'*Bk'+Bk*C2 
 lmiterm([lmiRS1 1 3 0],B1);            %#1:B1 
 lmiterm([lmiRS1 1 3 Dk1],B2,D21);       %#1:B2*Dk*D21 
 lmiterm([lmiRS1 2 3 S],1,B1);          %#1:S*B1 
 lmiterm([lmiRS1 2 3 Bk1],1,D21);        %#1:Bk*D21 
 lmiterm([lmiRS1 3 3 gam],-1,1);        %#1:-gam 
 lmiterm([lmiRS1 4 1 R],C1,1);          %#1:C1*R 
 lmiterm([lmiRS1 4 1 Ck1],D12,1);        %#1:D12*Ck 
 lmiterm([lmiRS1 4 2 0],C1);            %#1:C1 
 lmiterm([lmiRS1 4 2 Dk1],D12,C2);       %#1:D12*Dk*C2 
 lmiterm([lmiRS1 4 3 0],D11);           %#1:D11 
 lmiterm([lmiRS1 4 3 Dk1],D12,D21);      %#1:D12*Dk*D21 
 lmiterm([lmiRS1 4 4 gam],-1,1);        %#1:-gam 
%-----
 lmiPL11=newlmi; 
 lmiterm([lmiPL11 1 1 R],A1,1,'s');      %#2:R*A'+A*R 
 lmiterm([lmiPL11 1 1 Ck1],B2,1,'s');    %#2:Ck'*B2'+B2*Ck 
 lmiterm([lmiPL11 2 1 Ak1],1,1);         %#2:Ak 
 lmiterm([lmiPL11 1 2 0],A1);            %#2:A 
 lmiterm([lmiPL11 1 2 Dk1],B2,C2);       %#2:B2*Dk*C2 
 lmiterm([lmiPL11 2 2 S],1,A1,'s');      %#2:A'*S+S*A 
 lmiterm([lmiPL11 2 2 Bk1],1,C2,'s');    %#2:C2'*Bk'+Bk*C2 
% 
 lmiterm([lmiPL11 1 1 R],2*alpha,1);    %#2:2*alpha*R
 lmiterm([lmiPL11 2 1 0],2*alpha);      %#2:2*alpha*I 
 lmiterm([lmiPL11 2 2 S],2*alpha,1);    %#2:2*alpha*S 
%-----
 lmiPL21=newlmi; 
 lmiterm([lmiPL21 1 1 R],-r,1);         %#3:-r*R 
 lmiterm([lmiPL21 2 1 0],-r);           %#3:-r*I 
 lmiterm([lmiPL21 2 2 S],-r,1);         %#3:-r*S 
% 
 lmiterm([lmiPL21 1 3 R],A1,1);          %#3:A*R
 lmiterm([lmiPL21 1 3 Ck1],B2,1);        %#3:B2*Ck 
 lmiterm([lmiPL21 2 3 Ak1],1,1);         %#3:Ak 
 lmiterm([lmiPL21 1 4 0],A1);            %#3:A 
 lmiterm([lmiPL21 1 4 Dk1],B2,C2);       %#3:B2*Dk*C2 
 lmiterm([lmiPL21 2 4 S],1,A1);          %#3:S*A 
 lmiterm([lmiPL21 2 4 Bk1],1,C2);        %#3:Bk*C2 
% 
 lmiterm([lmiPL21 3 3 R],-r,1);         %#3:-r*R
 lmiterm([lmiPL21 4 3 0],-r);           %#3:-r*I 
 lmiterm([lmiPL21 4 4 S],-r,1);         %#3:-r*S 
%-----
 sth=sin(th); cth=cos(th);
 lmiPL31=newlmi; 
 lmiterm([lmiPL31 1 1 R],sth*A1,1,'s');  %#4:sth*(R*A'+A*R) 
 lmiterm([lmiPL31 1 1 Ck1],sth*B2,1,'s');%#4:sth*(Ck'*B2'+B2*Ck) 
 lmiterm([lmiPL31 2 1 Ak1],sth,1);       %#4:sth*(Ak) 
 lmiterm([lmiPL31 1 2 0],sth*A1);        %#4:sth*(A) 
 lmiterm([lmiPL31 1 2 Dk1],sth*B2,C2);   %#4:sth*(B2*Dk*C2) 
 lmiterm([lmiPL31 2 2 S],1,sth*A1,'s');  %#4:sth*(A'*S+S*A) 
 lmiterm([lmiPL31 2 2 Bk1],1,sth*C2,'s');%#4:sth*(C2'*Bk'+Bk*C2) 
% 
 lmiterm([lmiPL31 1 3 R],cth*A1,1);      %#1:cth*(A*R) 
 lmiterm([lmiPL31 1 3 R],1,-cth*A1');    %#1:cth*(-R*A')
 lmiterm([lmiPL31 1 3 Ck1],cth*B2,1);     %#1:cth*(B*Ck) 
 lmiterm([lmiPL31 1 3 -Ck1],-cth*B2',1);  %#1:cth*(-Ck'*B') 
 lmiterm([lmiPL31 2 3 Ak1],cth,1);       %#4:cth*(Ak) 
 lmiterm([lmiPL31 1 4 -Ak1],-cth,1);     %#4:cth*(-Ak') 
 lmiterm([lmiPL31 1 4 0],A1);            %#4:cth*(A) 
 lmiterm([lmiPL31 2 3 0],-A1');          %#4:cth*(-A') 
 lmiterm([lmiPL31 1 4 Dk1],cth*B2,C2);   %#4:cth*(B2*Dk*C2) 
 lmiterm([lmiPL31 2 3 -Dk1],-cth*C2',B2');%#4:cth*(-C2'*Dk'*B2') 
 lmiterm([lmiPL31 2 4 S],1,cth*A1);      %#4:cth*(S*A) 
 lmiterm([lmiPL31 2 4 S],-cth*A1',1);    %#4:cth*(-A'*S) 
 lmiterm([lmiPL31 2 4 Bk1],1,cth*C2);    %#4:cth*(Bk*C2) 
 lmiterm([lmiPL31 2 4 -Bk1],-cth*C2',1); %#4:cth*(-C2'*Bk') 
% 
 lmiterm([lmiPL31 3 3 R],sth*A1,1,'s');  %#4:sth*(R*A'+A*R)
 lmiterm([lmiPL31 3 3 Ck1],sth*B2,1,'s');%#4:sth*(Ck'*B2'+B2*Ck) 
 lmiterm([lmiPL31 4 3 Ak1],sth,1);       %#4:sth*(Ak) 
 lmiterm([lmiPL31 3 4 0],sth*A1);        %#4:sth*(A) 
 lmiterm([lmiPL31 3 4 Dk1],sth*B2,C2);   %#4:sth*(B2*Dk*C2) 
 lmiterm([lmiPL31 4 4 S],1,sth*A1,'s');  %#4:sth*(A'*S+S*A) 
 lmiterm([lmiPL31 4 4 Bk1],1,sth*C2,'s');%#4:sth*(C2'*Bk'+Bk*C2) 
%=====
 lmiRS2=newlmi;
 lmiterm([lmiRS2 1 1 R],A2,1,'s');       %#1:R*A'+AR 
 lmiterm([lmiRS2 1 1 Ck2],B2,1,'s');     %#1:Ck'*B2'+B2*Ck 
 lmiterm([lmiRS2 2 1 0],A2');            %#1:A' 
 lmiterm([lmiRS2 2 1 Ak2],1,1);          %#1:Ak 
 lmiterm([lmiRS2 2 1 -Dk2],C2',B2');     %#1:C2'*Dk'*B2' 
 lmiterm([lmiRS2 2 2 S],1,A2,'s');       %#1:A'*S+S*A 
 lmiterm([lmiRS2 2 2 Bk2],1,C2,'s');     %#1:C2'*Bk'+Bk*C2 
 lmiterm([lmiRS2 1 3 0],B1);             %#1:B1 
 lmiterm([lmiRS2 1 3 Dk2],B2,D21);       %#1:B2*Dk*D21 
 lmiterm([lmiRS2 2 3 S],1,B1);           %#1:S*B1 
 lmiterm([lmiRS2 2 3 Bk2],1,D21);        %#1:Bk*D21 
 lmiterm([lmiRS2 3 3 gam],-1,1);         %#1:-gam 
 lmiterm([lmiRS2 4 1 R],C1,1);           %#1:C1*R 
 lmiterm([lmiRS2 4 1 Ck2],D12,1);        %#1:D12*Ck 
 lmiterm([lmiRS2 4 2 0],C1);             %#1:C1 
 lmiterm([lmiRS2 4 2 Dk2],D12,C2);       %#1:D12*Dk*C2 
 lmiterm([lmiRS2 4 3 0],D11);            %#1:D11 
 lmiterm([lmiRS2 4 3 Dk2],D12,D21);      %#1:D12*Dk*D21 
 lmiterm([lmiRS2 4 4 gam],-1,1);         %#1:-gam 
%-----
 lmiPL12=newlmi; 
 lmiterm([lmiPL12 1 1 R],A2,1,'s');      %#2:R*A'+A*R 
 lmiterm([lmiPL12 1 1 Ck2],B2,1,'s');    %#2:Ck'*B2'+B2*Ck 
 lmiterm([lmiPL12 2 1 Ak2],1,1);         %#2:Ak 
 lmiterm([lmiPL12 1 2 0],A2);            %#2:A 
 lmiterm([lmiPL12 1 2 Dk2],B2,C2);       %#2:B2*Dk*C2 
 lmiterm([lmiPL12 2 2 S],1,A2,'s');      %#2:A'*S+S*A 
 lmiterm([lmiPL12 2 2 Bk2],1,C2,'s');    %#2:C2'*Bk'+Bk*C2 
% 
 lmiterm([lmiPL12 1 1 R],2*alpha,1);     %#2:2*alpha*R
 lmiterm([lmiPL12 2 1 0],2*alpha);       %#2:2*alpha*I 
 lmiterm([lmiPL12 2 2 S],2*alpha,1);     %#2:2*alpha*S 
%-----
 lmiPL22=newlmi; 
 lmiterm([lmiPL22 1 1 R],-r,1);          %#3:-r*R 
 lmiterm([lmiPL22 2 1 0],-r);            %#3:-r*I 
 lmiterm([lmiPL22 2 2 S],-r,1);          %#3:-r*S 
% 
 lmiterm([lmiPL22 1 3 R],A2,1);          %#3:A*R
 lmiterm([lmiPL22 1 3 Ck2],B2,1);        %#3:B2*Ck 
 lmiterm([lmiPL22 2 3 Ak2],1,1);         %#3:Ak 
 lmiterm([lmiPL22 1 4 0],A2);            %#3:A 
 lmiterm([lmiPL22 1 4 Dk2],B2,C2);       %#3:B2*Dk*C2 
 lmiterm([lmiPL22 2 4 S],1,A2);          %#3:S*A 
 lmiterm([lmiPL22 2 4 Bk2],1,C2);        %#3:Bk*C2 
% 
 lmiterm([lmiPL22 3 3 R],-r,1);          %#3:-r*R
 lmiterm([lmiPL22 4 3 0],-r);            %#3:-r*I 
 lmiterm([lmiPL22 4 4 S],-r,1);          %#3:-r*S 
%-----
 sth=sin(th); cth=cos(th);
 lmiPL32=newlmi; 
 lmiterm([lmiPL32 1 1 R],sth*A2,1,'s');  %#4:sth*(R*A'+A*R) 
 lmiterm([lmiPL32 1 1 Ck2],sth*B2,1,'s');%#4:sth*(Ck'*B2'+B2*Ck) 
 lmiterm([lmiPL32 2 1 Ak2],sth,1);       %#4:sth*(Ak) 
 lmiterm([lmiPL32 1 2 0],sth*A2);        %#4:sth*(A) 
 lmiterm([lmiPL32 1 2 Dk2],sth*B2,C2);   %#4:sth*(B2*Dk*C2) 
 lmiterm([lmiPL32 2 2 S],1,sth*A2,'s');  %#4:sth*(A'*S+S*A) 
 lmiterm([lmiPL32 2 2 Bk2],1,sth*C2,'s');%#4:sth*(C2'*Bk'+Bk*C2) 
% 
 lmiterm([lmiPL32 1 3 R],cth*A2,1);      %#1:cth*(A*R) 
 lmiterm([lmiPL32 1 3 R],1,-cth*A2');    %#1:cth*(-R*A')
 lmiterm([lmiPL32 1 3 Ck2],cth*B2,1);    %#1:cth*(B*Ck) 
 lmiterm([lmiPL32 1 3 -Ck2],-cth*B2',1); %#1:cth*(-Ck'*B') 
 lmiterm([lmiPL32 2 3 Ak2],cth,1);       %#4:cth*(Ak) 
 lmiterm([lmiPL32 1 4 -Ak2],-cth,1);     %#4:cth*(-Ak') 
 lmiterm([lmiPL32 1 4 0],A2);            %#4:cth*(A) 
 lmiterm([lmiPL32 2 3 0],-A2');          %#4:cth*(-A') 
 lmiterm([lmiPL32 1 4 Dk2],cth*B2,C2);   %#4:cth*(B2*Dk*C2) 
 lmiterm([lmiPL32 2 3 -Dk2],-cth*C2',B2');%#4:cth*(-C2'*Dk'*B2') 
 lmiterm([lmiPL32 2 4 S],1,cth*A2);      %#4:cth*(S*A) 
 lmiterm([lmiPL32 2 4 S],-cth*A2',1);    %#4:cth*(-A'*S) 
 lmiterm([lmiPL32 2 4 Bk2],1,cth*C2);    %#4:cth*(Bk*C2) 
 lmiterm([lmiPL32 2 4 -Bk2],-cth*C2',1); %#4:cth*(-C2'*Bk') 
% 
 lmiterm([lmiPL32 3 3 R],sth*A2,1,'s');  %#4:sth*(R*A'+A*R)
 lmiterm([lmiPL32 3 3 Ck2],sth*B2,1,'s');%#4:sth*(Ck'*B2'+B2*Ck) 
 lmiterm([lmiPL32 4 3 Ak2],sth,1);       %#4:sth*(Ak) 
 lmiterm([lmiPL32 3 4 0],sth*A2);        %#4:sth*(A) 
 lmiterm([lmiPL32 3 4 Dk2],sth*B2,C2);   %#4:sth*(B2*Dk*C2) 
 lmiterm([lmiPL32 4 4 S],1,sth*A2,'s');  %#4:sth*(A'*S+S*A) 
 lmiterm([lmiPL32 4 4 Bk2],1,sth*C2,'s');%#4:sth*(C2'*Bk'+Bk*C2)  
%=====
 posX=-newlmi;
 lmiterm([posX 1 1 R],1,1);              %#5:R 
 lmiterm([posX 2 1 0],1);                %#5:I 
 lmiterm([posX 2 2 S],1,1);              %#5:S 
%-----
 lmiDk1=-newlmi;                        
 lmiterm([lmiDk1 1 1 0],1e2);            %#6:1e2 
 lmiterm([lmiDk1 2 2 0],1e2);            %#6:1e2 
 lmiterm([lmiDk1 2 1 Dk1],1,1);          %#6:Dk 
%-----
 lmiDk2=-newlmi;                        
 lmiterm([lmiDk2 1 1 0],1e2);            %#6:1e2 
 lmiterm([lmiDk2 2 2 0],1e2);            %#6:1e2 
 lmiterm([lmiDk2 2 1 Dk2],1,1);          %#6:Dk 
%-----
 lmig=newlmi;                          
 lmiterm([lmig,1,1,gam],1,1);            %#7:gam 
 lmiterm([lmig,1,1,0],-1e3);             %#7:1e3 
 LMIs=getlmis;
end
%-----
%eof

LPV制御(出力FB)

LPV制御(出力FB)…Homework

ここでは、主軸変動を伴う回転体の運動制御を例にとって、出力FB形式のGS制御について説明します。

[1] 次図のような回転体の運動を考えます。


図1 主軸変動を伴う回転体

これは次の運動方程式で表されます。

\displaystyle{(1)\quad \left\{\begin{array}{l} J_1\dot{\omega}_1(t)-\omega_2(t)\Omega(t)(J_2-J_3)=\tau_1(t) \\ J_2\dot{\omega}_2(t)-\omega_1(t)\Omega(t)(J_3-J_1)=\tau_2(t) \end{array}\right. }

ここで、次のパラメータ変動を想定します。

\displaystyle{(2)\quad \Omega_{min}<\Omega(t)<\Omega_{max} }

次の状態方程式を得ます。

\displaystyle{(3) \underbrace{ \left[\begin{array}{c} \dot{\omega}_1(t) \\ \dot{\omega}_2(t) \end{array}\right] }_{\dot{x}(t)} = \underbrace{ \left[\begin{array}{cc} 0 & \Omega(t)\frac{J_2-J_3}{J_1} \\ -\Omega(t)\frac{J_3-J_1}{J_2} & 0 \end{array}\right] }_{A(\Omega(t))} \underbrace{ \left[\begin{array}{c} \omega_1(t) \\ \omega_2(t) \end{array}\right] }_{x(t)} + \underbrace{ \left[\begin{array}{cc} \frac{1}{J_1} & 0 \\ 0 & \frac{1}{J_2} \end{array}\right] }_{B} \underbrace{ \left[\begin{array}{c} \tau_1(t) \\ \tau_2(t) \end{array}\right] }_{u(t)} }

●いま、A(\Omega(t))は次式で表されることに着目します。

\displaystyle{(4)\quad A(\Omega(t))= \underbrace{\frac{\Omega_{max}-\Omega(t)}{\Omega_{max}-\Omega_{min}}}_{p_1(\Omega(t))} \underbrace{A(\Omega_{min})}_{A_1} + \underbrace{\frac{\Omega(t)-\Omega_{min}}{\Omega_{max}-\Omega_{min}}}_{p_2(\Omega(t))} \underbrace{A(\Omega_{max})}_{A_2} }

ただし

\displaystyle{(5)\quad p_1(\Omega(t))+p_2(\Omega(t))=1 }

このとき上の状態方程式は、端点(vertex)モデルとよばれる

\displaystyle{(6)\quad \dot{x}(t)=A_1x(t)+Bu(t),\ \dot{x}(t)=A_2x(t)+Bu(t) }

を、係数p_1(\Omega),p_2(\Omega)によって重み付けて

\displaystyle{(7)\quad \dot{x}(t)=\underbrace{(p_1(\Omega(t))A_1+p_2(\Omega(t))A_2)}_{A(\Omega(t))}x(t)+Bu(t) }

のように得られることが分かります。これをLPV(Linear Parameter Varying)モデルと呼びます。

●出力フィートバックによるパラメータ変動抑制について考えます。そのために端点モデルに対応した出力フィートバック(端点コントローラとよばれる)

\displaystyle{(8)\quad \begin{array}{l} \left\{\begin{array}{l} \dot{x}_K(t)=A_{K1}x_K(t)+B_{K1}y(t) \\ u(t)=C_{K1}x_K(t)+D_{K1}y(t) \end{array}\right.\\ \left\{\begin{array}{l} \dot{x}_K(t)=A_{K2}x_K(t)+B_{K2}y(t) \\ u(t)=C_{K2}x_K(t)+D_{K2}y(t) \end{array}\right. \end{array} }

を、それぞれ係数p_1(\Omega(t)),p_2(\Omega(t))によって重み付けた

\displaystyle{(9)\quad \begin{array}{l} \dot{x}_K(t)=\underbrace{(p_1(\Omega(t))A_{K1}+p_2(\Omega(t))A_{K2})}_{A_K(\Omega(t))}x_K(t)\\ +\underbrace{(p_1(\Omega(t))B_{K1}+p_2(\Omega(t))B_{K2})}_{B_K(\Omega(t))}y(t) \\ u=\underbrace{(p_1(\Omega(t))C_{K1}+p_2(\Omega(t))C_{K2})}_{C_K(\Omega(t))}x_K(t)\\ +\underbrace{(p_1(\Omega(t))D_{K1}+p_2(\Omega(t))D_{K2})}_{D_K(\Omega(t))}y(t) \end{array} }

のようなLPV(Linear Parameter Varying)制御を考えます。この閉ループ系は次式で表されます。

\displaystyle{(10)\quad \begin{array}{l} \left[\begin{array}{c} \dot{x}(t) \\ \dot{x}_K(t) \end{array}\right] =(p_1(\Omega(t)) \underbrace{ \left[\begin{array}{ccc} A_1+BD_{K1}C & BC_{K1} \\ B_{K1}C & A_{K1} \end{array}\right] }_{A_{CL1}}\\ +p_2(\Omega(t)) \underbrace{ \left[\begin{array}{ccc} A_2+BD_{K2}C & BC_{K2} \\ B_{K2}C & A_{K2} \end{array}\right] }_{A_{CL2}} )\left[\begin{array}{c} x(t) \\ x_K(t) \end{array}\right]\\ =\underbrace{(p_1(\Omega(t))A_{CL1} +p_2(\Omega(t))A_{CL2} )}_{A_{CL}(\Omega(t))} \left[\begin{array}{c} x(t) \\ x_K(t) \end{array}\right] \end{array} }

ここで、端点コントローラによる閉ループ系

\displaystyle{(11)\quad \begin{array}{l} \left[\begin{array}{c} \dot{x}(t) \\ \dot{x}_K(t) \end{array}\right] = \underbrace{ \left[\begin{array}{ccc} A_1+BD_{K1}C & BC_{K1} \\ B_{K1}C & A_{K1} \end{array}\right] }_{A_{CL1}} \left[\begin{array}{c} x(t) \\ x_K(t) \end{array}\right]\\ \left[\begin{array}{c} \dot{x}(t) \\ \dot{x}_K(t) \end{array}\right] = \underbrace{ \left[\begin{array}{ccc} A_2+BD_{K2}C & BC_{K2} \\ B_{K2}C & A_{K1} \end{array}\right] }_{A_{CL2}} \left[\begin{array}{c} x(t) \\ x_K(t) \end{array}\right] \end{array} }

はそれぞれ漸近安定となるように設計しますが、閉ループ系の時変系としての安定性が保証されるかの検討が必要になります(Note B52参照)。

[2] いま、次の2ポート表現かつポリトピック表現されたn次系を考えます。混乱を避けるため、A^{(1)}=A_1A^{(2)}=A_2と記法を改めたことに注意してください。

\displaystyle{(12)\quad P: \left\{\begin{array}{l} \dot{x}(t)=\underbrace{(p_1(\Omega(t))A^{(1)}+p_2(\Omega(t))A^{(2)})}_{A(\Omega(t))}x(t)+B_1u_1(t)+B_2u_2(t) \\ \underbrace{ \left[\begin{array}{c} y(t)\\ u(t) \end{array}\right] }_{y_1(t)} = \underbrace{ \left[\begin{array}{c} C\\ 0 \end{array}\right] }_{C_1} x(t)+ \underbrace{ \left[\begin{array}{c} 0\\ 0 \end{array}\right] }_{D_{11}}u_1(t)+ \underbrace{ \left[\begin{array}{c} 0\\ I \end{array}\right] }_{D_{12}} u_2(t) \\ y_2(t)=C_2x(t) \end{array}\right. }

これに対する出力フィードバック

\displaystyle{(13)\quad K:  \left\{\begin{array}{l} \dot{x}_K(t)=\underbrace{(p_1(\Omega(t))A_{K1}+p_2(\Omega(t))A_{K2})}_{A_K(\Omega(t))}x_K(t)\\ +\underbrace{(p_1(\Omega(t))B_{K1}+p_2(\Omega(t))B_{K2})}_{B_K(\Omega(t))}y_2(t) \\ u_2(t)=\underbrace{(p_1(\Omega(t))C_{K1}+p_2(\Omega(t))C_{K2})}_{C_K(\Omega(t))}x_K(t)\\ +\underbrace{(p_1(\Omega(t))D_{K1}+p_2(\Omega(t))D_{K2})}_{D_K(\Omega(t))}y_2(t) \end{array}\right. }

による閉ループ系

\displaystyle{(14)\quad P_{CL}: \left\{\begin{array}{l} \left[\begin{array}{c} \dot{x}(t) \\ \dot{x}_K(t) \end{array}\right] =\underbrace{(p_1(\Omega(t))A_{CL1} +p_2(\Omega(t))A_{CL2} )}_{A_{CL}(\Omega(t))} \left[\begin{array}{c} x(t) \\ x_K(t) \end{array}\right]\\ + \underbrace{ \left[\begin{array}{ccc} B_1 \\ 0 \end{array}\right] }_{B_{CL}} u_1(t)\\ y_1(t) = \underbrace{ \left[\begin{array}{ccc} C_1+D_{12}D_KC_2 & D_{12}C_K \end{array}\right] }_{C_{CL}} \left[\begin{array}{c} x(t) \\ x_K(t) \end{array}\right] \end{array}\right. }

において、その{\cal L}_2ゲインが\gammaより小、すなわち

\displaystyle{(15)\quad \sup_{u_1\in{\cal L}_2}\frac{||y_1(t)||_2}{||u_1(t)||_2}<\gamma }

となるように出力フィードバックゲインを求める問題を考えます。

●そのために、各端点におけるH_\infty制御(出力フィードバック)を共通のリャプノフ関数をもつように解きます。その際コントローラの実装上の立場から、各端点において

\lambda(A_{CL1}),\lambda(A_{CL2})\subset{\cal D}_1\cup{\cal D}_2\cup{\cal D}_3

の制約を課すことがあります。この問題は次のように定式化されます。

Minimize \gamma on R,S,{\cal A}_K^{(1)},{\cal B}_K^{(1)},{\cal C}_K^{(1)},D_K^{(1)},{\cal A}_K^{(2)},{\cal B}_K^{(2)},{\cal C}_K^{(2)},D_K^{(2)} subject to

\displaystyle{(16) \begin{array}{l} \left[\begin{array}{cc} R & I \\ I & S \end{array}\right] >0 \end{array} }

\displaystyle{(17) \left[\begin{array}{ccc} \left[\begin{array}{cc} A^{(1)}R+B_2{\cal C}_K^{(1)} & A^{(1)}+B_2D_K^{(1)}C_2\\ {\cal A}_K^{(1)} & SA^{(1)}+{\cal B}_K^{(1)}C_2 \end{array}\right]+(*)^T & \left[\begin{array}{c} B_1+B_2D_K^{(1)}D_{21} \\ SB_1+{\cal B}_K^{(1)}D_{21} \end{array}\right] & (*)^T \\ (*)^T & -\gamma I & (*)^T \\ \left[\begin{array}{cc} C_1R+D_{12}{\cal C}_K^{(1)} & C_1+D_{12}D_K^{(1)}C_2 \end{array}\right] & D_{11} & -\gamma I \end{array}\right]<0 }

\displaystyle{(18) \begin{array}{l} \left[\begin{array}{cc} A^{(1)}R+B_2{\cal C}_K^{(1)} & A^{(1)}+B_2D_K^{(1)}C_2\\ {\cal A}_K^{(1)} & SA^{(1)}+{\cal B}_K^{(1)}C_2 \end{array}\right] +(*)^T %\nonumber\\&& +\alpha \left[\begin{array}{cc} R & I \\ I & S \end{array}\right]<0} \\ \left[\begin{array}{cc} -r \left[\begin{array}{cc} R & I \\ I & S \end{array}\right] & \left[\begin{array}{cc} A^{(1)}R+B_2{\cal C}_K^{(1)} & A^{(1)}+B_2D_K^{(1)}C_2\\ {\cal A}_K^{(1)} & SA^{(1)}+{\cal B}_K^{(1)}C_2 \end{array}\right] \\ (*)^T & -r \left[\begin{array}{cc} R & I \\ I & S \end{array}\right] \end{array}\right] <0 \\ \left[\begin{array}{cc} \sin\theta & \cos\theta \\ -\cos\theta & \sin\theta \end{array}\right]\otimes \left[\begin{array}{cc} A^{(1)}R+B_2{\cal C}_K^{(1)} & A^{(1)}+B_2D_K^{(1)}C_2\\ {\cal A}_K^{(1)} & SA^{(1)}+{\cal B}_K^{(1)}C_2 \end{array}\right]+ (*)^T <0 \end{array} }

\displaystyle{(19) \left[\begin{array}{ccc} \left[\begin{array}{cc} A^{(2)}R+B_2{\cal C}_K^{(2)} & A^{(2)}+B_2D_K^{(2)}C_2\\ {\cal A}_K^{(2)} & SA^{(2)}+{\cal B}_K^{(2)}C_2 \end{array}\right]+(*)^T & \left[\begin{array}{c} B_1+B_2D_K^{(2)}D_{21} \\ SB_1+{\cal B}_K^{(2)}D_{21} \end{array}\right] & (*)^T \\ (*)^T & -\gamma I & (*)^T \\ \left[\begin{array}{cc} C_1R+D_{12}{\cal C}_K^{(2)} & C_1+D_{12}D_K^{(2)}C_2 \end{array}\right] & D_{11} & -\gamma I \end{array}\right]<0 }

\displaystyle{(20) \begin{array}{l} \left[\begin{array}{cc} A^{(2)}R+B_2{\cal C}_K^{(2)} & A^{(1)}+B_2D_K^{(2)}C_2\\ {\cal A}_K^{(2)} & SA^{(2)}+{\cal B}_K^{(2)}C_2 \end{array}\right] +(*)^T %\nonumber\\&& +\alpha \left[\begin{array}{cc} R & I \\ I & S \end{array}\right]<0} \\ \left[\begin{array}{cc} -r \left[\begin{array}{cc} R & I \\ I & S \end{array}\right] & \left[\begin{array}{cc} A^{(2)}R+B_2{\cal C}_K^{(2)} & A^{(2)}+B_2D_K^{(2)}C_2\\ {\cal A}_K^{(2)} & SA^{(2)}+{\cal B}_K^{(2)}C_2 \end{array}\right] \\ (*)^T & -r \left[\begin{array}{cc} R & I \\ I & S \end{array}\right] \end{array}\right] <0 \\ \left[\begin{array}{cc} \sin\theta & \cos\theta \\ -\cos\theta & \sin\theta \end{array}\right]\otimes \left[\begin{array}{cc} A^{(2)}R+B_2{\cal C}_K^{(2)} & A^{(2)}+B_2D_K^{(2)}C_2\\ {\cal A}_K^{(2)} & SA^{(2)}+{\cal B}_K^{(2)}C_2 \end{array}\right]+ (*)^T <0 \end{array} }

この最小化問題の解 R,S,{\cal A}_K^{(1)},{\cal B}_K^{(1)},{\cal C}_K^{(1)},D_K^{(1)},{\cal A}_K^{(2)},{\cal B}_K^{(2)},{\cal C}_K^{(2)},D_K^{(2)}を用いて、次式によって出力フィードバック(12)のゲインを決定します。

\displaystyle{(21)\quad \begin{array}{lll} A_{K1}=N^{-1}({\cal A}_K^{(1)}-S(A-B_2D_K^{(1)}C_2)R-{\cal B}_K^{(1)}C_2R-SB_2{\cal C}_K^{(1)})M^{-T} \nonumber\\ B_{K1}=N^{-1}({\cal B}_K^{(1)}-SB_2D_K^{(1)}) \nonumber\\ C_{K1}=({\cal C}_K^{(1)}-D_K^{(1)}C_2R)M^{-T} \nonumber\\ (I-SR=NM^T) \end{array} }

\displaystyle{(22)\quad \begin{array}{lll} A_{K2}=N^{-1}({\cal A}_K^{(2)}-S(A-B_2D_K^{(2)}C_2)R-{\cal B}_K^{(2)}C_2R-SB_2{\cal C}_K^{(2)})M^{-T} \nonumber\\ B_{K2}=N^{-1}({\cal B}_K^{(2)}-SB_2D_K^{(2)}) \nonumber\\ C_{K2}=({\cal C}_K^{(2)}-D_K^{(2)}C_2R)M^{-T} \nonumber\\ (I-SR=NM^T) \end{array} }

●この問題設定では

\displaystyle{(23)\quad \left[\begin{array}{ccc} Y_{CL}A_{CL1}^T+A_{CL1}Y_{CL} & B_{CL} & Y_{CL}C_{CL}^T \\ B_{CL}^T & -\gamma I & D_{CL}^T \\ C_{CL}Y_{CL} & D_{CL} & -\gamma I \end{array}\right]<0 }
\displaystyle{(24)\quad \left[\begin{array}{ccc} Y_{CL}A_{CL2}^T+A_{CL2}Y_{CL} & B_{CL} & Y_{CL}C_{CL}^T \\ B_{CL}^T & -\gamma I & D_{CL}^T \\ C_{CL}Y_{CL} & D_{CL} & -\gamma I \end{array}\right]<0 }

の共通解Y_{CL}>0を求めています。X_{CL}=Y_{CL}^{-1}ととれば

\displaystyle{(25)\quad X_{CL}>0 \Leftrightarrow Y_{CL}>0 \Leftrightarrow \left[\begin{array}{cc} R & I \\ I & S \end{array}\right] >0 }

に注意して

\displaystyle{(26)\quad \left[\begin{array}{ccc} A_{CL1}^TX_{CL}+X_{CL}A_{CL1} & X_{CL}B_{CL} & C_{CL}^T \\ B_{CL}^TX_{CL} & -\gamma I & D_{CL}^T \\ C_{CL} & D_{CL} & -\gamma I \end{array}\right]<0 }
\displaystyle{(27)\quad \left[\begin{array}{ccc} A_{CL2}^TX_{CL}+X_{CL}A_{CL2} & X_{CL}B_{CL} & C_{CL}^T \\ B_{CL}^TX_{CL} & -\gamma I & D_{CL}^T \\ C_{CL} & D_{CL} & -\gamma I \end{array}\right]<0 }

の共通解となっています。これにより、閉ループ系の時変系としての安定性が保証されます(Note B52参照)。

演習B52…Flipped Classroom

1^\circ 回転体のパラメータ変動を出力FBによるLPV制御で抑制したシミュレーションプログラムを以下に示す。これを実行し効果を確かめよ。

MATLAB
%cSPIN_of_gs.m
%-----
 clear all close all
 J1=1; J2=1; J3=0.5;
 OMnom=2*pi; OMmin=0*OMnom; OMmax=2*OMnom;
%  sim("SPIN0")
 A1=[0 (J2-J3)/J1;(J3-J1)/J2 0];
 B=diag([1/J1 1/J2]); C=eye(2); D=zeros(2,2);
 S0=[zeros(2,2) B;C D];
 S1=zeros(4,4); S1(1:2,1:2)=A1;
%  sim("SPIN")
%-----
 J1=1; J2=1; J3=0.5; 
 OMnom=2*pi; OMmin=0*OMnom; OMmax=2*OMnom;
 A1= OMmin*[0 (J2-J3)/J1;(J3-J1)/J2 0]; 
 A2= OMmax*[0 (J2-J3)/J1;(J3-J1)/J2 0];
 B=diag([1/J1 1/J2]); 
 B1=B; B2=B;
 C1=[eye(2,2);zeros(2,2)]; 
 D11=zeros(4,2); 
 D12=[zeros(2,2);eye(2,2)];
 C2=eye(2,2); 
 D21=zeros(2,2); 
 D22=zeros(2,2);
%----- 
 alpha=1; r=3; th=pi/4; 
 LMIs=of_synlmi7(A1,A2,B1,B2,C1,C2,D11,D12,D21,D22,alpha,r,th);
 cobj=zeros(1,decnbr(LMIs)); 
 cobj(1)=1; 
 [cost,xopt]=mincx(LMIs,cobj);  
 gopt=dec2mat(LMIs,xopt,1)
 R=dec2mat(LMIs,xopt,2); 
 S=dec2mat(LMIs,xopt,3); 
 %-----
 ak1=dec2mat(LMIs,xopt,4); 
 bk1=dec2mat(LMIs,xopt,5); 
 ck1=dec2mat(LMIs,xopt,6); 
 dk1=dec2mat(LMIs,xopt,7); 
 [u,sd,v]=svd(eye(size(A1,1))-R*S); 
 sd=diag(sqrt(1./diag(sd))); 
 Ni=sd*v'; Mti=u*sd; 
 AK1=Ni*(ak1-S*(A1-B2*dk1*C2)*R-bk1*C2*R-S*B2*ck1)*Mti; 
 BK1=Ni*(bk1-S*B2*dk1); 
 CK1=(ck1-dk1*C2*R)*Mti; 
 DK1=dk1; 
 K1=[AK1 BK1;CK1 DK1];
 ACL1=[A1+B2*DK1*C2 B2*CK1;
      BK1*C2 AK1];
 plCL1=eig(ACL1)
 %-----
 ak2=dec2mat(LMIs,xopt,8); 
 bk2=dec2mat(LMIs,xopt,9); 
 ck2=dec2mat(LMIs,xopt,10); 
 dk2=dec2mat(LMIs,xopt,11); 
 [u,sd,v]=svd(eye(size(A2,1))-R*S); 
 sd=diag(sqrt(1./diag(sd))); 
 Ni=sd*v'; Mti=u*sd; 
 AK2=Ni*(ak2-S*(A2-B2*dk2*C2)*R-bk2*C2*R-S*B2*ck2)*Mti; 
 BK2=Ni*(bk2-S*B2*dk2); 
 CK2=(ck2-dk2*C2*R)*Mti; 
 DK2=dk2; 
 K2=[AK2 BK2;CK2 DK2];
 ACL2=[A2+B2*DK2*C2 B2*CK2;
       BK2*C2 AK2];
 plCL2=eig(ACL2)
%------
 figure(1) 
 subplot(121),dregion(alpha,0,r,th,r*[-1,1,-1,1]) 
 plot(real(plCL1),imag(plCL1),'*') 
 subplot(122), dregion(alpha,0,r,th,r*[-1,1,-1,1]) 
 plot(real(plCL2),imag(plCL2),'*')  
%-----
 prange=OMmax-OMmin; pmax=OMmax; pmin=OMmin; 
%sim("SPIN_of_gs") 
 sim("SPIN_of_gs_2015a")  
%-----
function LMIs=of_synlmi7(A1,A2,B1,B2,C1,C2,D11,D12,D21,D22,alpha,r,th)
 [n,m]=size(B2);  [p,n]=size(C2);
 setlmis([]); 
 gam=lmivar(1,[1 0]);  
 [R,xxx,Rdec]=lmivar(1,[n 1]); 
 [S,xxx,Sdec]=lmivar(1,[n 1]); 
 Ak1=lmivar(2,[n n]); 
 Bk1=lmivar(2,[n p]); 
 Ck1=lmivar(2,[m n]); 
 Dk1=lmivar(2,[m p]); 
 Ak2=lmivar(2,[n n]); 
 Bk2=lmivar(2,[n p]); 
 Ck2=lmivar(2,[m n]); 
 Dk2=lmivar(2,[m p]);  
%=====
 lmiRS1=newlmi;
 lmiterm([lmiRS1 1 1 R],A1,1,'s');       %#1:R*A'+AR 
 lmiterm([lmiRS1 1 1 Ck1],B2,1,'s');     %#1:Ck'*B2'+B2*Ck 
 lmiterm([lmiRS1 2 1 0],A1');            %#1:A' 
 lmiterm([lmiRS1 2 1 Ak1],1,1);          %#1:Ak 
 lmiterm([lmiRS1 2 1 -Dk1],C2',B2');     %#1:C2'*Dk'*B2' 
 lmiterm([lmiRS1 2 2 S],1,A1,'s');       %#1:A'*S+S*A 
 lmiterm([lmiRS1 2 2 Bk1],1,C2,'s');     %#1:C2'*Bk'+Bk*C2 
 lmiterm([lmiRS1 1 3 0],B1);             %#1:B1 
 lmiterm([lmiRS1 1 3 Dk1],B2,D21);       %#1:B2*Dk*D21 
 lmiterm([lmiRS1 2 3 S],1,B1);           %#1:S*B1 
 lmiterm([lmiRS1 2 3 Bk1],1,D21);        %#1:Bk*D21 
 lmiterm([lmiRS1 3 3 gam],-1,1);         %#1:-gam 
 lmiterm([lmiRS1 4 1 R],C1,1);           %#1:C1*R 
 lmiterm([lmiRS1 4 1 Ck1],D12,1);        %#1:D12*Ck 
 lmiterm([lmiRS1 4 2 0],C1);             %#1:C1 
 lmiterm([lmiRS1 4 2 Dk1],D12,C2);       %#1:D12*Dk*C2 
 lmiterm([lmiRS1 4 3 0],D11);            %#1:D11 
 lmiterm([lmiRS1 4 3 Dk1],D12,D21);      %#1:D12*Dk*D21 
 lmiterm([lmiRS1 4 4 gam],-1,1);         %#1:-gam 
%-----
 lmiPL11=newlmi; 
 lmiterm([lmiPL11 1 1 R],A1,1,'s');      %#2:R*A'+A*R 
 lmiterm([lmiPL11 1 1 Ck1],B2,1,'s');    %#2:Ck'*B2'+B2*Ck 
 lmiterm([lmiPL11 2 1 Ak1],1,1);         %#2:Ak 
 lmiterm([lmiPL11 1 2 0],A1);            %#2:A 
 lmiterm([lmiPL11 1 2 Dk1],B2,C2);       %#2:B2*Dk*C2 
 lmiterm([lmiPL11 2 2 S],1,A1,'s');      %#2:A'*S+S*A 
 lmiterm([lmiPL11 2 2 Bk1],1,C2,'s');    %#2:C2'*Bk'+Bk*C2 
% 
 lmiterm([lmiPL11 1 1 R],2*alpha,1);     %#2:2*alpha*R
 lmiterm([lmiPL11 2 1 0],2*alpha);       %#2:2*alpha*I 
 lmiterm([lmiPL11 2 2 S],2*alpha,1);     %#2:2*alpha*S 
%-----
 lmiPL21=newlmi; 
 lmiterm([lmiPL21 1 1 R],-r,1);          %#3:-r*R 
 lmiterm([lmiPL21 2 1 0],-r);            %#3:-r*I 
 lmiterm([lmiPL21 2 2 S],-r,1);          %#3:-r*S 
% 
 lmiterm([lmiPL21 1 3 R],A1,1);          %#3:A*R
 lmiterm([lmiPL21 1 3 Ck1],B2,1);        %#3:B2*Ck 
 lmiterm([lmiPL21 2 3 Ak1],1,1);         %#3:Ak 
 lmiterm([lmiPL21 1 4 0],A1);            %#3:A 
 lmiterm([lmiPL21 1 4 Dk1],B2,C2);       %#3:B2*Dk*C2 
 lmiterm([lmiPL21 2 4 S],1,A1);          %#3:S*A 
 lmiterm([lmiPL21 2 4 Bk1],1,C2);        %#3:Bk*C2 
% 
 lmiterm([lmiPL21 3 3 R],-r,1);          %#3:-r*R
 lmiterm([lmiPL21 4 3 0],-r);            %#3:-r*I 
 lmiterm([lmiPL21 4 4 S],-r,1);          %#3:-r*S 
%-----
 sth=sin(th); cth=cos(th);
 lmiPL31=newlmi; 
 lmiterm([lmiPL31 1 1 R],sth*A1,1,'s');  %#4:sth*(R*A'+A*R) 
 lmiterm([lmiPL31 1 1 Ck1],sth*B2,1,'s');%#4:sth*(Ck'*B2'+B2*Ck) 
 lmiterm([lmiPL31 2 1 Ak1],sth,1);       %#4:sth*(Ak) 
 lmiterm([lmiPL31 1 2 0],sth*A1);        %#4:sth*(A) 
 lmiterm([lmiPL31 1 2 Dk1],sth*B2,C2);   %#4:sth*(B2*Dk*C2) 
 lmiterm([lmiPL31 2 2 S],1,sth*A1,'s');  %#4:sth*(A'*S+S*A) 
 lmiterm([lmiPL31 2 2 Bk1],1,sth*C2,'s');%#4:sth*(C2'*Bk'+Bk*C2) 
% 
 lmiterm([lmiPL31 1 3 R],cth*A1,1);      %#1:cth*(A*R) 
 lmiterm([lmiPL31 1 3 R],1,-cth*A1');    %#1:cth*(-R*A')
 lmiterm([lmiPL31 1 3 Ck1],cth*B2,1);    %#1:cth*(B*Ck) 
 lmiterm([lmiPL31 1 3 -Ck1],-cth*B2',1); %#1:cth*(-Ck'*B') 
 lmiterm([lmiPL31 2 3 Ak1],cth,1);       %#4:cth*(Ak) 
 lmiterm([lmiPL31 1 4 -Ak1],-cth,1);     %#4:cth*(-Ak') 
 lmiterm([lmiPL31 1 4 0],A1);            %#4:cth*(A) 
 lmiterm([lmiPL31 2 3 0],-A1');          %#4:cth*(-A') 
 lmiterm([lmiPL31 1 4 Dk1],cth*B2,C2);   %#4:cth*(B2*Dk*C2) 
 lmiterm([lmiPL31 2 3 -Dk1],-cth*C2',B2');%#4:cth*(-C2'*Dk'*B2') 
 lmiterm([lmiPL31 2 4 S],1,cth*A1);      %#4:cth*(S*A) 
 lmiterm([lmiPL31 2 4 S],-cth*A1',1);    %#4:cth*(-A'*S) 
 lmiterm([lmiPL31 2 4 Bk1],1,cth*C2);    %#4:cth*(Bk*C2) 
 lmiterm([lmiPL31 2 4 -Bk1],-cth*C2',1); %#4:cth*(-C2'*Bk') 
% 
 lmiterm([lmiPL31 3 3 R],sth*A1,1,'s');  %#4:sth*(R*A'+A*R)
 lmiterm([lmiPL31 3 3 Ck1],sth*B2,1,'s');%#4:sth*(Ck'*B2'+B2*Ck) 
 lmiterm([lmiPL31 4 3 Ak1],sth,1);       %#4:sth*(Ak) 
 lmiterm([lmiPL31 3 4 0],sth*A1);        %#4:sth*(A) 
 lmiterm([lmiPL31 3 4 Dk1],sth*B2,C2);   %#4:sth*(B2*Dk*C2) 
 lmiterm([lmiPL31 4 4 S],1,sth*A1,'s');  %#4:sth*(A'*S+S*A) 
 lmiterm([lmiPL31 4 4 Bk1],1,sth*C2,'s');%#4:sth*(C2'*Bk'+Bk*C2) 
%=====
 lmiRS2=newlmi;
 lmiterm([lmiRS2 1 1 R],A2,1,'s');       %#1:R*A'+AR 
 lmiterm([lmiRS2 1 1 Ck2],B2,1,'s');     %#1:Ck'*B2'+B2*Ck 
 lmiterm([lmiRS2 2 1 0],A2');            %#1:A' 
 lmiterm([lmiRS2 2 1 Ak2],1,1);          %#1:Ak 
 lmiterm([lmiRS2 2 1 -Dk2],C2',B2');     %#1:C2'*Dk'*B2' 
 lmiterm([lmiRS2 2 2 S],1,A2,'s');       %#1:A'*S+S*A 
 lmiterm([lmiRS2 2 2 Bk2],1,C2,'s');     %#1:C2'*Bk'+Bk*C2 
 lmiterm([lmiRS2 1 3 0],B1);            %#1:B1 
 lmiterm([lmiRS2 1 3 Dk2],B2,D21);       %#1:B2*Dk*D21 
 lmiterm([lmiRS2 2 3 S],1,B1);          %#1:S*B1 
 lmiterm([lmiRS2 2 3 Bk2],1,D21);        %#1:Bk*D21 
 lmiterm([lmiRS2 3 3 gam],-1,1);        %#1:-gam 
 lmiterm([lmiRS2 4 1 R],C1,1);          %#1:C1*R 
 lmiterm([lmiRS2 4 1 Ck2],D12,1);        %#1:D12*Ck 
 lmiterm([lmiRS2 4 2 0],C1);            %#1:C1 
 lmiterm([lmiRS2 4 2 Dk2],D12,C2);       %#1:D12*Dk*C2 
 lmiterm([lmiRS2 4 3 0],D11);           %#1:D11 
 lmiterm([lmiRS2 4 3 Dk2],D12,D21);      %#1:D12*Dk*D21 
 lmiterm([lmiRS2 4 4 gam],-1,1);        %#1:-gam 
%-----
 lmiPL12=newlmi; 
 lmiterm([lmiPL12 1 1 R],A2,1,'s');      %#2:R*A'+A*R 
 lmiterm([lmiPL12 1 1 Ck2],B2,1,'s');    %#2:Ck'*B2'+B2*Ck 
 lmiterm([lmiPL12 2 1 Ak2],1,1);         %#2:Ak 
 lmiterm([lmiPL12 1 2 0],A2);            %#2:A 
 lmiterm([lmiPL12 1 2 Dk2],B2,C2);       %#2:B2*Dk*C2 
 lmiterm([lmiPL12 2 2 S],1,A2,'s');      %#2:A'*S+S*A 
 lmiterm([lmiPL12 2 2 Bk2],1,C2,'s');    %#2:C2'*Bk'+Bk*C2 
% 
 lmiterm([lmiPL12 1 1 R],2*alpha,1);     %#2:2*alpha*R
 lmiterm([lmiPL12 2 1 0],2*alpha);       %#2:2*alpha*I 
 lmiterm([lmiPL12 2 2 S],2*alpha,1);     %#2:2*alpha*S 
%-----
 lmiPL22=newlmi; 
 lmiterm([lmiPL22 1 1 R],-r,1);          %#3:-r*R 
 lmiterm([lmiPL22 2 1 0],-r);            %#3:-r*I 
 lmiterm([lmiPL22 2 2 S],-r,1);          %#3:-r*S 
% 
 lmiterm([lmiPL22 1 3 R],A2,1);          %#3:A*R
 lmiterm([lmiPL22 1 3 Ck2],B2,1);        %#3:B2*Ck 
 lmiterm([lmiPL22 2 3 Ak2],1,1);         %#3:Ak 
 lmiterm([lmiPL22 1 4 0],A2);            %#3:A 
 lmiterm([lmiPL22 1 4 Dk2],B2,C2);       %#3:B2*Dk*C2 
 lmiterm([lmiPL22 2 4 S],1,A2);          %#3:S*A 
 lmiterm([lmiPL22 2 4 Bk2],1,C2);        %#3:Bk*C2 
% 
 lmiterm([lmiPL22 3 3 R],-r,1);          %#3:-r*R
 lmiterm([lmiPL22 4 3 0],-r);            %#3:-r*I 
 lmiterm([lmiPL22 4 4 S],-r,1);          %#3:-r*S 
%-----
 sth=sin(th); cth=cos(th);
 lmiPL32=newlmi; 
 lmiterm([lmiPL32 1 1 R],sth*A2,1,'s');  %#4:sth*(R*A'+A*R) 
 lmiterm([lmiPL32 1 1 Ck2],sth*B2,1,'s');%#4:sth*(Ck'*B2'+B2*Ck) 
 lmiterm([lmiPL32 2 1 Ak2],sth,1);       %#4:sth*(Ak) 
 lmiterm([lmiPL32 1 2 0],sth*A2);        %#4:sth*(A) 
 lmiterm([lmiPL32 1 2 Dk2],sth*B2,C2);   %#4:sth*(B2*Dk*C2) 
 lmiterm([lmiPL32 2 2 S],1,sth*A2,'s');  %#4:sth*(A'*S+S*A) 
 lmiterm([lmiPL32 2 2 Bk2],1,sth*C2,'s');%#4:sth*(C2'*Bk'+Bk*C2) 
% 
 lmiterm([lmiPL32 1 3 R],cth*A2,1);      %#1:cth*(A*R) 
 lmiterm([lmiPL32 1 3 R],1,-cth*A2');    %#1:cth*(-R*A')
 lmiterm([lmiPL32 1 3 Ck2],cth*B2,1);    %#1:cth*(B*Ck) 
 lmiterm([lmiPL32 1 3 -Ck2],-cth*B2',1); %#1:cth*(-Ck'*B') 
 lmiterm([lmiPL32 2 3 Ak2],cth,1);       %#4:cth*(Ak) 
 lmiterm([lmiPL32 1 4 -Ak2],-cth,1);     %#4:cth*(-Ak') 
 lmiterm([lmiPL32 1 4 0],A2);            %#4:cth*(A) 
 lmiterm([lmiPL32 2 3 0],-A2');          %#4:cth*(-A') 
 lmiterm([lmiPL32 1 4 Dk2],cth*B2,C2);   %#4:cth*(B2*Dk*C2) 
 lmiterm([lmiPL32 2 3 -Dk2],-cth*C2',B2');%#4:cth*(-C2'*Dk'*B2') 
 lmiterm([lmiPL32 2 4 S],1,cth*A2);      %#4:cth*(S*A) 
 lmiterm([lmiPL32 2 4 S],-cth*A2',1);    %#4:cth*(-A'*S) 
 lmiterm([lmiPL32 2 4 Bk2],1,cth*C2);    %#4:cth*(Bk*C2) 
 lmiterm([lmiPL32 2 4 -Bk2],-cth*C2',1); %#4:cth*(-C2'*Bk') 
% 
 lmiterm([lmiPL32 3 3 R],sth*A2,1,'s');  %#4:sth*(R*A'+A*R)
 lmiterm([lmiPL32 3 3 Ck2],sth*B2,1,'s');%#4:sth*(Ck'*B2'+B2*Ck) 
 lmiterm([lmiPL32 4 3 Ak2],sth,1);       %#4:sth*(Ak) 
 lmiterm([lmiPL32 3 4 0],sth*A2);        %#4:sth*(A) 
 lmiterm([lmiPL32 3 4 Dk2],sth*B2,C2);   %#4:sth*(B2*Dk*C2) 
 lmiterm([lmiPL32 4 4 S],1,sth*A2,'s');  %#4:sth*(A'*S+S*A) 
 lmiterm([lmiPL32 4 4 Bk2],1,sth*C2,'s');%#4:sth*(C2'*Bk'+Bk*C2)  
%=====
 posX=-newlmi;
 lmiterm([posX 1 1 R],1,1);              %#5:R 
 lmiterm([posX 2 1 0],1);                %#5:I 
 lmiterm([posX 2 2 S],1,1);              %#5:S 
%-----
 lmiDk1=-newlmi;                        
 lmiterm([lmiDk1 1 1 0],1e2);            %#6:1e2 
 lmiterm([lmiDk1 2 2 0],1e2);            %#6:1e2 
 lmiterm([lmiDk1 2 1 Dk1],1,1);          %#6:Dk 
%-----
 lmiDk2=-newlmi;                        
 lmiterm([lmiDk2 1 1 0],1e2);            %#6:1e2 
 lmiterm([lmiDk2 2 2 0],1e2);            %#6:1e2 
 lmiterm([lmiDk2 2 1 Dk2],1,1);          %#6:Dk 
%-----
 lmig=newlmi;                          
 lmiterm([lmig,1,1,gam],1,1);            %#7:gam 
 lmiterm([lmig,1,1,0],-1e3);             %#7:1e3 
 LMIs=getlmis;
end
%-----
%eof


図2 回転体のLPV制御

2^\circ 回転体のパラメータ変動を出力FBによるH^\infty制御で抑制したシミュレーションプログラムを以下に示す。これを実行し1^\circと比較せよ。

MATLAB
%cSPIN_of_hinf.m
%-----
 clear all close all
 J1=1; J2=1; J3=0.5;
 OMnom=2*pi; OMmin=0*OMnom; OMmax=2*OMnom;
%  sim("SPIN0")
 A1=[0 (J2-J3)/J1;(J3-J1)/J2 0];
 B=diag([1/J1 1/J2]); C=eye(2); D=zeros(2,2);
 S0=[zeros(2,2) B;C D];
 S1=zeros(4,4); S1(1:2,1:2)=A1;
%  sim("SPIN")
%-----
 A=OMnom*[0 (J2-J3)/J1;(J3-J1)/J2 0];
 B=diag([1/J1 1/J2]); 
 B1=B; B2=B;
 C1=[eye(2,2);zeros(2,2)]; 
 D11=zeros(4,2); 
 D12=[zeros(2,2);eye(2,2)];
 C2=eye(2,2); 
 D21=zeros(2,2); 
 D22=zeros(2,2);
 %-----
 alpha=1; r=3; th=pi/4; 
 LMIs=of_synlmi6(A,B1,B2,C1,C2,D11,D12,D21,D22,alpha,r,th);
 cobj=zeros(1,decnbr(LMIs)); 
 cobj(1)=1; 
 [cost,xopt]=mincx(LMIs,cobj);  
 gopt=dec2mat(LMIs,xopt,1)
 R=dec2mat(LMIs,xopt,2); 
 S=dec2mat(LMIs,xopt,3); 
 ak=dec2mat(LMIs,xopt,4); 
 bk=dec2mat(LMIs,xopt,5); 
 ck=dec2mat(LMIs,xopt,6); 
 dk=dec2mat(LMIs,xopt,7); 
 [u,sd,v]=svd(eye(size(A,1))-R*S); 
 sd=diag(sqrt(1./diag(sd))); 
 Ni=sd*v'; Mti=u*sd; 
 AK=Ni*(ak-S*(A-B2*dk*C2)*R-bk*C2*R-S*B2*ck)*Mti; 
 BK=Ni*(bk-S*B2*dk); 
 CK=(ck-dk*C2*R)*Mti; 
 DK=dk; 
 K=[AK BK;CK DK];
%-----
 pl=eig(A)
 ACL=[A+B2*DK*C2 B2*CK;
      BK*C2 AK];
 plCL=eig(ACL)
 figure(1)
 dregion(alpha,0,r,th,r*[-1,1,-1,1])  
 plot(real(pl),imag(pl),'x',real(plCL),imag(plCL),'*')
%sim("SPIN_of_hinf")
 sim("SPIN_of_hinf_2015a") 
%-----
function LMIs=of_synlmi6(A,B1,B2,C1,C2,D11,D12,D21,D22,alpha,r,th)
 [n,m]=size(B2);  [p,n]=size(C2);
 setlmis([]); 
 gam=lmivar(1,[1 0]);  
 [R,xxx,Rdec]=lmivar(1,[n 1]); 
 [S,xxx,Sdec]=lmivar(1,[n 1]); 
 Ak=lmivar(2,[n n]); 
 Bk=lmivar(2,[n p]); 
 Ck=lmivar(2,[m n]); 
 Dk=lmivar(2,[m p]); 
% 
 lmiRS=newlmi;
 lmiterm([lmiRS 1 1 R],A,1,'s');       %#1:R*A'+AR 
 lmiterm([lmiRS 1 1 Ck],B2,1,'s');     %#1:Ck'*B2'+B2*Ck 
 lmiterm([lmiRS 2 1 0],A');            %#1:A' 
 lmiterm([lmiRS 2 1 Ak],1,1);          %#1:Ak 
 lmiterm([lmiRS 2 1 -Dk],C2',B2');     %#1:C2'*Dk'*B2' 
 lmiterm([lmiRS 2 2 S],1,A,'s');       %#1:A'*S+S*A 
 lmiterm([lmiRS 2 2 Bk],1,C2,'s');     %#1:C2'*Bk'+Bk*C2 
 lmiterm([lmiRS 1 3 0],B1);            %#1:B1 
 lmiterm([lmiRS 1 3 Dk],B2,D21);       %#1:B2*Dk*D21 
 lmiterm([lmiRS 2 3 S],1,B1);          %#1:S*B1 
 lmiterm([lmiRS 2 3 Bk],1,D21);        %#1:Bk*D21 
 lmiterm([lmiRS 3 3 gam],-1,1);        %#1:-gam 
 lmiterm([lmiRS 4 1 R],C1,1);          %#1:C1*R 
 lmiterm([lmiRS 4 1 Ck],D12,1);        %#1:D12*Ck 
 lmiterm([lmiRS 4 2 0],C1);            %#1:C1 
 lmiterm([lmiRS 4 2 Dk],D12,C2);       %#1:D12*Dk*C2 
 lmiterm([lmiRS 4 3 0],D11);           %#1:D11 
 lmiterm([lmiRS 4 3 Dk],D12,D21);      %#1:D12*Dk*D21 
 lmiterm([lmiRS 4 4 gam],-1,1);        %#1:-gam 
%-----
 lmiPL1=newlmi; 
 lmiterm([lmiPL1 1 1 R],A,1,'s');      %#2:R*A'+A*R 
 lmiterm([lmiPL1 1 1 Ck],B2,1,'s');    %#2:Ck'*B2'+B2*Ck 
 lmiterm([lmiPL1 2 1 Ak],1,1);         %#2:Ak 
 lmiterm([lmiPL1 1 2 0],A);            %#2:A 
 lmiterm([lmiPL1 1 2 Dk],B2,C2);       %#2:B2*Dk*C2 
 lmiterm([lmiPL1 2 2 S],1,A,'s');      %#2:A'*S+S*A 
 lmiterm([lmiPL1 2 2 Bk],1,C2,'s');    %#2:C2'*Bk'+Bk*C2 
% 
 lmiterm([lmiPL1 1 1 R],2*alpha,1);    %#2:2*alpha*R
 lmiterm([lmiPL1 2 1 0],2*alpha);      %#2:2*alpha*I 
 lmiterm([lmiPL1 2 2 S],2*alpha,1);    %#2:2*alpha*S 
%-----
 lmiPL2=newlmi; 
 lmiterm([lmiPL2 1 1 R],-r,1);         %#3:-r*R 
 lmiterm([lmiPL2 2 1 0],-r);           %#3:-r*I 
 lmiterm([lmiPL2 2 2 S],-r,1);         %#3:-r*S 
% 
 lmiterm([lmiPL2 1 3 R],A,1);          %#3:A*R
 lmiterm([lmiPL2 1 3 Ck],B2,1);        %#3:B2*Ck 
 lmiterm([lmiPL2 2 3 Ak],1,1);         %#3:Ak 
 lmiterm([lmiPL2 1 4 0],A);            %#3:A 
 lmiterm([lmiPL2 1 4 Dk],B2,C2);       %#3:B2*Dk*C2 
 lmiterm([lmiPL2 2 4 S],1,A);          %#3:S*A 
 lmiterm([lmiPL2 2 4 Bk],1,C2);        %#3:Bk*C2 
% 
 lmiterm([lmiPL2 3 3 R],-r,1);         %#3:-r*R
 lmiterm([lmiPL2 4 3 0],-r);           %#3:-r*I 
 lmiterm([lmiPL2 4 4 S],-r,1);         %#3:-r*S 
%-----
 sth=sin(th); cth=cos(th);
 lmiPL3=newlmi; 
 lmiterm([lmiPL3 1 1 R],sth*A,1,'s');  %#4:sth*(R*A'+A*R) 
 lmiterm([lmiPL3 1 1 Ck],sth*B2,1,'s');%#4:sth*(Ck'*B2'+B2*Ck) 
 lmiterm([lmiPL3 2 1 Ak],sth,1);       %#4:sth*(Ak) 
 lmiterm([lmiPL3 1 2 0],sth*A);        %#4:sth*(A) 
 lmiterm([lmiPL3 1 2 Dk],sth*B2,C2);   %#4:sth*(B2*Dk*C2) 
 lmiterm([lmiPL3 2 2 S],1,sth*A,'s');  %#4:sth*(A'*S+S*A) 
 lmiterm([lmiPL3 2 2 Bk],1,sth*C2,'s');%#4:sth*(C2'*Bk'+Bk*C2) 
% 
%  lmiterm([lmiPL3 1 3 R],1,cth*A');     %#4:cth*(R*A')
%  lmiterm([lmiPL3 1 3 R],-cth*A,1);     %#4:cth*(-A*R) 
%  lmiterm([lmiPL3 1 3 -Ck],cth*B2',1);  %#4:cth*(Ck'*B2') 
%  lmiterm([lmiPL3 1 3 Ck],-cth*B2,1);   %#4:cth*(-B2*Ck) 
 lmiterm([lmiPL3 1 3 R],cth*A,1);      %#1:cth*(A*R) 
 lmiterm([lmiPL3 1 3 R],1,-cth*A');    %#1:cth*(-R*A')
 lmiterm([lmiPL3 1 3 Ck],cth*B2,1);     %#1:cth*(B*Ck) 
 lmiterm([lmiPL3 1 3 -Ck],-cth*B2',1);  %#1:cth*(-Ck'*B') 
 lmiterm([lmiPL3 2 3 Ak],cth,1);       %#4:cth*(Ak) 
 lmiterm([lmiPL3 1 4 -Ak],-cth,1);     %#4:cth*(-Ak') 
 lmiterm([lmiPL3 1 4 0],A);            %#4:cth*(A) 
 lmiterm([lmiPL3 2 3 0],-A');          %#4:cth*(-A') 
 lmiterm([lmiPL3 1 4 Dk],cth*B2,C2);   %#4:cth*(B2*Dk*C2) 
 lmiterm([lmiPL3 2 3 -Dk],-cth*C2',B2');%#4:cth*(-C2'*Dk'*B2') 
 lmiterm([lmiPL3 2 4 S],1,cth*A);      %#4:cth*(S*A) 
 lmiterm([lmiPL3 2 4 S],-cth*A',1);    %#4:cth*(-A'*S) 
 lmiterm([lmiPL3 2 4 Bk],1,cth*C2);    %#4:cth*(Bk*C2) 
 lmiterm([lmiPL3 2 4 -Bk],-cth*C2',1); %#4:cth*(-C2'*Bk') 
% 
 lmiterm([lmiPL3 3 3 R],sth*A,1,'s');  %#4:sth*(R*A'+A*R)
 lmiterm([lmiPL3 3 3 Ck],sth*B2,1,'s');%#4:sth*(Ck'*B2'+B2*Ck) 
 lmiterm([lmiPL3 4 3 Ak],sth,1);       %#4:sth*(Ak) 
 lmiterm([lmiPL3 3 4 0],sth*A);        %#4:sth*(A) 
 lmiterm([lmiPL3 3 4 Dk],sth*B2,C2);   %#4:sth*(B2*Dk*C2) 
 lmiterm([lmiPL3 4 4 S],1,sth*A,'s');  %#4:sth*(A'*S+S*A) 
 lmiterm([lmiPL3 4 4 Bk],1,sth*C2,'s');%#4:sth*(C2'*Bk'+Bk*C2) 
%-----
 posX=-newlmi;
 lmiterm([posX 1 1 R],1,1);            %#5:R 
 lmiterm([posX 2 1 0],1);              %#5:I 
 lmiterm([posX 2 2 S],1,1);            %#5:S 
%-----
 lmiDk=-newlmi;                        
 lmiterm([lmiDk 1 1 0],1e2);           %#6:1e2 
 lmiterm([lmiDk 2 2 0],1e2);           %#6:1e2 
 lmiterm([lmiDk 2 1 Dk],1,1);          %#6:Dk 
%-----
 lmig=newlmi;                          
 lmiterm([lmig,1,1,gam],1,1);          %#7:gam 
 lmiterm([lmig,1,1,0],-1e3);           %#7:1e3 
 LMIs=getlmis;
end
%-----
%eof


図3 回転体のH_\infty制御

3^\circ 1^\circのLPV制御において、次のようにスケジューリングを止めた場合、これを実行し1^\circ2^\circと比較せよ。

Note B52 閉ループ系の時変系としての安定性

●次の時変自由系の漸近安定性を考えます。

\displaystyle{(1)\quad \dot{x}(t)=A(t)x(t) }

平衡状態x=0の近傍{\cal X}において、リャプノフ関数とよばれる

\displaystyle{(2)\quad \left\{\begin{array}{ll} V(x)>0 & (x\in{\cal X}, x\ne0) \\ V(x)=0 & (x=0) \end{array}\right. }

を構成して

\displaystyle{(3)\quad \frac{d}{dt}V(x(t))<0 }

を示すことができれば、平衡状態は漸近安定となることが知られています。

●LPVモデル

\displaystyle{(4)\quad \underbrace{\left[\begin{array}{c} \dot{x}(t) \\ \dot{x}_K(t) \end{array}\right]}_{\dot{\bar x}(t)} =\underbrace{(p_1(\Omega(t))A_{CL1} +p_2(\Omega(t))A_{CL2} )}_{A_{CL}(\Omega(t))} \underbrace{\left[\begin{array}{c} x(t) \\ x_K(t) \end{array}\right]}_{\bar{x}(t)} }

において、A_{CL1}A_{CL2}を個別に安定行列としたとすると

\displaystyle{(5)\quad \exists X_1>0:X_1A_{CL1}+A_{CL1}^TX_1<0 }
\displaystyle{(6)\quad \exists X_2>0:X_2A_{CL2}+A_{CL2}^TX_2<0 }

から、個別にリャプノフ関数の候補

\displaystyle{(7)\quad V_1(\bar{x}(t))=\bar{x}^T(t)X_1\bar{x}(t)}
\displaystyle{(8)\quad V_2(\bar{x}(t))=\bar{x}^T(t)X_2\bar{x}(t)}

が得られますが、(4)のリャプノフ関数を構成したことにはなりません。一方

\displaystyle{(9)\quad \exists X>0: \begin{array}{l} XA_{CL1}+A_{CL1}^TX<0\\ XA_{CL2}+A_{CL2}^TX<0 \end{array} }

となる共通のX>0を見つけることができれば

\displaystyle{(10)\quad V(\bar{x}(t))=\bar{x}^T(t)X\bar{x}(t) }

に対して

\displaystyle{(11)\quad \begin{array}{l} \frac{d}{dt}V(\bar{x}(t))=\bar{x}^T(t)(A_{CL}^T(\Omega(t))X+XA_{CL}(\Omega(t)))\bar{x}(t)\\\ =\bar{x}^T(t)( ( ( p_1(\Omega(t))A_{CL1}+p_2(\Omega(t))A_{CL2} )^TX\\ +X( p_1(\Omega(t))A_{CL1}+p_2(\Omega(t))A_{CL2} ) )\bar{x}(t)\\ =p_1(\Omega(t)) \underbrace{\bar{x}^T(t)(A_{CL1}^TX+XA_{CL1})\bar{x}(t)}_{<0}\\ +p_2(\Omega(t)) \underbrace{\bar{x}^T(t)(A_{CL2}^TX+XA_{CL2})\bar{x}(t)}_{<0}<0 \end{array} }

となって、リャプノフ関数を構成したことになります。

●LPVモデル

\displaystyle{(12)\quad P_{CL}: \left\{\begin{array}{l} \underbrace{\left[\begin{array}{c} \dot{x}(t) \\ \dot{x}_K(t) \end{array}\right]}_{\dot{\bar x}(t)} =\underbrace{(p_1(\Omega(t))A_{CL1} +p_2(\Omega(t))A_{CL2} )}_{A_{CL}(\Omega(t))} \underbrace{\left[\begin{array}{c} x(t) \\ x_K(t) \end{array}\right]}_{\bar{x}(t)}\\ + \underbrace{ \left[\begin{array}{ccc} B_1 \\ 0 \end{array}\right] }_{B_{CL}} u_1(t)\\ y_1(t) = \underbrace{ \left[\begin{array}{ccc} C_1+D_{12}D_KC_2 & D_{12}C_K \end{array}\right] }_{C_{CL}} \underbrace{\left[\begin{array}{c} x(t) \\ x_K(t) \end{array}\right]}_{\bar{x}(t)} \end{array}\right. }

に対して、各端点モデルの閉ループ系において、H_\inftyノルムは\gammaより小であるとすると

\displaystyle{(13)\quad \exists X_1>0:\ \left[\begin{array}{ccc} A_{CL1}^TX_1+X_1A_{CL1} & X_1B_{CL} & C_{CL}^T \\ B_{CL}^TX_1 & -\gamma I & D_{CL}^T \\ C_{CL} & D_{CL} & -\gamma I \end{array}\right]<0 }
\displaystyle{(14)\quad \exists X_2>0:\ \left[\begin{array}{ccc} A_{CL2}^TX_2+X_2A_{CL2} & X_2B_{CL} & C_{CL}^T \\ B_{CL}^TX_2 & -\gamma I & D_{CL}^T \\ C_{CL} & D_{CL} & -\gamma I \end{array}\right]<0 }

が成り立ちます。いま、共通解X_1=X_2=X>0が求まっているとしますと

\displaystyle{(15)\quad \left[\begin{array}{ccc} A_{CL1}^TX+XA_{CL1} & XB_{CL} & C_{CL}^T \\ B_{CL}^TX & -\gamma^2 I & D_{CL}^T \\ C_{CL} & D_{CL} &-I \end{array}\right]<0 }
\displaystyle{ \Leftrightarrow \left[\begin{array}{cc} A_{CL1}^TX+XA_{CL1} & XB_{CL} \\ B_{CL}^TX & 0 \end{array}\right] < \left[\begin{array}{cc} C_{CL}^T & 0 \\ D_{CL}^T & I \end{array}\right] \left[\begin{array}{cc} -I & 0 \\ 0 & \gamma^2 I \end{array}\right] \left[\begin{array}{cc} C_{CL} & D_{CL} \\ 0 & I \end{array}\right] }
\displaystyle{(16)\quad \left[\begin{array}{ccc} A_{CL1}^TX+XA_{CL1} & XB & C_{CL}^T \\ B_{CL}^TX & -\gamma^2 I & D_{CL}^T \\ C_{CL} & D_{CL} &-I \end{array}\right]<0 }
\displaystyle{ \Leftrightarrow \left[\begin{array}{cc} A_{CL2}^TX+XA_{CL2} & XB_{CL} \\ B_{CL}^TX & 0 \end{array}\right] < \left[\begin{array}{cc} C_{CL}^T & 0 \\ D_{CL}^T & I \end{array}\right] \left[\begin{array}{cc} -I & 0 \\ 0 & \gamma^2 I \end{array}\right] \left[\begin{array}{cc} C_{CL} & D_{CL} \\ 0 & I \end{array}\right] }

に注意して

\displaystyle{(17)\quad \dot{V}(\bar{x}(t))=\frac{d}{dt}(\bar{x}^T(t)X\bar{x}(t))= }
\displaystyle{ \left[\begin{array}{c} \bar{x}(t) \\ u_1(t) \end{array}\right]^T \left[\begin{array}{cc} \begin{array}{c} ( p_1(\Omega(t))A_{CL1}+p_2(\Omega(t))A_{CL2} )^TX\\ +X( p_1(\Omega(t))A_{CL1}+p_2(\Omega(t))A_{CL2} ) \end{array} & XB_{CL} \\ B_{CL}^TX & 0 \end{array}\right] \left[\begin{array}{c} \bar{x}(t) \\ u_1(t) \end{array}\right] }
\displaystyle{ =p_1(\Omega(t)) \left[\begin{array}{c} \bar{x}(t) \\ u_1(t) \end{array}\right]^T \left[\begin{array}{cc} A_{CL1}^TX+XA_{CL1} & XB_{CL} \\ B_{CL}^TX & 0 \end{array}\right] \left[\begin{array}{c} \bar{x}(t) \\ u_1(t) \end{array}\right] }
\displaystyle{ +p_2(\Omega(t)) \left[\begin{array}{c} \bar{x}(t) \\ u_1(t) \end{array}\right]^T \left[\begin{array}{cc} A_{CL2}^TX+XA_{CL2} & XB_{CL} \\ B_{CL}^TX & 0 \end{array}\right] \left[\begin{array}{c} \bar{x}(t) \\ u_1(t) \end{array}\right] }
\displaystyle{ < \underbrace{(p_1(\Omega(t))+p_2(\Omega(t)))}_1 \left[\begin{array}{c} \bar{x}(t) \\ u_1(t) \end{array}\right]^T \left[\begin{array}{cc} C_{CL} & D_{CL} \\ 0 & I \end{array}\right]^T \left[\begin{array}{cc} - I & 0 \\ 0 & \gamma^2 I \end{array}\right] \left[\begin{array}{cc} C_{CL} & D_{CL} \\ 0 & I \end{array}\right] \left[\begin{array}{c} \bar{x}(t) \\ u_1(t) \end{array}\right] }
\displaystyle{ =\gamma^2 u_1^T(t)u_1(t)-y_1^T(t)y_1(t) }

を得ます。すなわち時変系としての閉ループ系において

\displaystyle{(18)\quad \underbrace{\frac{d}{dt}(\bar{x}^TX\bar{x})}_{\dot{V}(\bar{x})} <\underbrace{\gamma^2 u_1^Tu_1-y_1^Ty_1}_{s(u,y)} }

が成り立ち

\displaystyle{(19)\quad \sup_{u\in{\cal L}_2}\frac{||y_1(t)||_2}{||u_1(t)||_2}<\gamma }

が成り立ちます。これは時不変系の場合にはH_\inftyノルムですが、時変系の場合は{\cal L}_2ゲインとよびます。