永井 忠一 2021.2.6
定義\[ X(s) = \mathcal{L}\left[ x(t) \right] = \int_0^\infty x(t)e^{-st} dt \](\( s \) をラプラス演算子(Laplace operator)と言う)
(Maxima によるラプラス変換の計算)例
| Maxima | |
|---|---|
| 単位インパルス関数(ディラックのデルタ関数) (unit impulse function)\[ \mathcal{L}\left[ \delta(t) \right] \] |
\[ 1 \] |
| 単位ステップ関数(unit step function)\[ \mathcal{L}\left[ 1 \right] \] | \[ {{1}\over{s}} \] |
| 単位ランプ関数(unit ramp function)\[ \mathcal{L}\left[ t \right] \] | \[ {{1}\over{s^2}} \] |
| 指数関数\[ \mathcal{L}\left[ e^{-at} \right] \] | \[ {{1}\over{s+a}} \] |
| 微分\[ \mathcal{L}\left[ \frac{d}{dt} x(t) \right] \] | \[ s\,\mathcal{L}\left(x\left(t\right) , t , s\right)-x\left(0\right) \] |
| 積分\[ \mathcal{L}\left[ \int_0^t x(\tau) d\tau \right] \] | \[ {{\mathcal{L}\left(x\left(t\right) , t , s\right)}\over{s}} \] |
(Maxima の tex() 関数で計算結果を TEX の式に変換)
性質
| 線形性 | \[ \mathcal L[af(t) + bg(t)] = aF(s) + bG(s) \] |
|---|---|
| 合成積、畳み込み積分(convolution)\[ \left( f(t)*g(t) = \int_{-\infty}^\infty f(\tau)g(t - \tau)d\tau \right) \] | \[ \mathcal L\left[ \int_0^t f(t - \tau)g(\tau) d\tau \right] = F(s)G(s) \]\[ \mathcal L\left[ f(t)*g(t) \right] = F(s)G(s) \] |
| 微分 (\( x^{(n)} \) は \( n \) 階導関数) | \[ \mathcal L\left[f^{(n)}(t)\right] = s^nF(s) - s^{n - 1}f(0) - s^{n -2}f'(0) - \cdots - sf^{(n - 2)}(0) - f^{(n - 1)}(0) \] |
| (\( s \) 領域での)移動定理 | \[ \mathcal L[f(t)e^{at}] = F(s - a) \] |
| (\( t \) 領域での)移動定理 | \[ \mathcal L[f(t - \tau)] = e^{-\tau s}F(s) \] |
| 最終値の定理 | \[ \lim_{t\to\infty} f(t) = \lim_{s\to 0} sF(s) \] |
\( Y(s) = G(s)U(s) \) のブロック線図
![]() |
|
入力 \( U(s) \) と出力 \( Y(s) \) の比が伝達関数\[ G(s) = \frac{ Y(s) }{ U(s) } \]
等価変換
| Octave | Scilab | |
|---|---|---|
| 直列接続(series connection)\[ G(s) = G_2(s)G_1(s) \] | | |
| 並列接続(parallel connection)\[ G(s) = G_1(s) + G_2(s) \] | | |
| フィードバック接続(feedback connection)\[ W(s) = \frac{ G(s)H(s) }{ 1 + G(s)H(s) } \] | | |
(Scilab では、「%s」は多項式の変数。「/.」はフィードバック演算子)
Octave の control パッケージのインストール(私の環境では Linux apt)
| Linux apt |
|---|
|
直結フィードバックシステム
![]() |
|
(フィードバック経路に伝達関数が存在しない \( \left( H = 1 \right) \))
偏差 \( E(s) \) は \( R(s) - Y(s)\)(ネガティブ・フィードバック(negative feedback))
ブロック線図の基本要素:矢印は信号の流れを表し、黒丸 • の引き出し点(branch point)で信号の分岐を表し、白丸 ○ の加算点(summing point)で信号の和を表す(加減算を入ってくる矢印の符号 ± で表す。注意としては、加算点に入ってくる信号は単位が等しくなければならない)
フィードバックシステムの伝達関数を Octave と Scilab で求める
| Octave | Scilab |
|---|---|
| |
以下の力学システムを考える
![]() |
|
運動方程式\[ m\frac{ dv(t) }{ dt } + dv(t) = f(t) \] 運動方程式をラプラス変換する\[ m\left( sV(s) - v(0) \right) + dV(s) = F(s) \] 初期値を \( v(0) = 0 \) とすると\[ (ms + d)v(s) = f(s) \] 伝達関数とブロック線図

一次遅れ系となる
出力 \( V(s) \) を積分すれば位置 \( X(s) \)。積分は \( \boxed{ \frac{1}{s} } \)

伝達関数をまとめると\[ F(s)\longrightarrow\boxed{ \frac{ 1 }{ ms^2 + ds } }\longrightarrow X(s) \]となる
もう一つの例。次に、以下の MSD システム(mass-spring-damper system)を考える
![]() |
|
\( u(t) \) はシステムへの入力で、力 \( f \)。位置(変位)\( x(t) \) が、システムの出力となる
運動方程式\[ m\ddot x + d\dot x + kx = f \]
運動方程式をラプラス変換する\[ m\left\{ s^2X(s) - sx(0) - \dot x(0) \right\} + d\left\{ sX(s) -x(0) \right\} + kX(s) = F(s) \]位置の初期値 \( x(0) = 0 \)、速度の初期を \( \dot x(0) = 0 \) とすると\[ \left( ms^2 + ds + k \right)X(s) = F(s) \]
伝達関数\[ P(s) = \frac{1}{ms^2 + ds + k} = \frac{ X(s) }{ F(s) } \]2次遅れ系となる
ブロック線図

Maxima を使って、運動方程式をラプラス変換して伝達関数を求める
| Maxima |
|---|
\[ m\,\left(-\left.{{d}\over{d\,t}}\,x\left(t\right)\right|_{t=0}+s^2
\,\mathcal{L}\left(x\left(t\right) , t , s\right)-x\left(0\right)\,s
\right)+d\,\left(s\,\mathcal{L}\left(x\left(t\right) , t , s\right)-
x\left(0\right)\right)+k\,\mathcal{L}\left(x\left(t\right) , t , s
\right)=\mathcal{L}\left(f\left(t\right) , t , s\right) \] |
\[ m\,s^2\,\mathcal{L}\left(x\left(t\right) , t , s\right)+d\,s\,
\mathcal{L}\left(x\left(t\right) , t , s\right)+k\,\mathcal{L}\left(
x\left(t\right) , t , s\right)=\mathcal{L}\left(f\left(t\right) , t
, s\right) \]\[ \left[ {{\mathcal{L}\left(x\left(t\right) , t , s\right)}\over{
\mathcal{L}\left(f\left(t\right) , t , s\right)}}={{1}\over{m\,s^2+d
\,s+k}} \right] \] |
atvalue() 関数で、初期位置と初期速度の初期条件 \( 0 \) を与える
(RLC 回路の例など)《積み残し》
上記の MSD システムの例\[ m\ddot x(t) + d\dot x(t) + kx(t) = f(t) \xrightarrow{\mathcal L} (ms^2 + ds + k)X(s) = F(s) \]を考える。伝達関数とブロック線図\[ U(s) \longrightarrow \boxed{G(s) = \frac{1}{ms^2 + ds + k}} \longrightarrow Y(s) \]
係数を適当にとり(物理的なイメージは無し)、伝達関数が\[ G(s) = \frac{4}{s^2 + 3s + 2} \]と具体的に与えられた場合、このシステムの応答を計算する
入力が単位インパルス関数。\( U(s) = \mathcal L\left[ \delta(t) \right] = 1 \)\[ \begin{aligned} Y(s) &= G(s)U(s) \\ &= G(s)\cdot 1 \\ &= G(s) \\ &= \frac{4}{s^2 + 3s + 2} \end{aligned} \]
(教科書によっては、ステップ応答はインディシャル応答とも言う)
入力が単位ステップ関数。\( U(s) = \mathcal L[1] = \frac{1}{s} \)\[ Y(s) = G(s)U(s) = \frac{4}{s^2 + 3s + 2}\cdot\frac{1}{s} \]
(ラプラス逆変換とも)\[ x(t) = \mathcal L^{-1}\left[ X(s) \right] \]
※計算せず、ラプラス変換表を参照してラプラス変換対を調べる
(部分分数分解とも)
※手計算する場合には、「Heaviside の展開定理」を使うと(係数比較法よりも)簡単に係数が求められる
例)\( Y(s) = \frac{4}{s^2 + 3s + 2} \)
| Maxima | Octave |
|---|---|
\[ {{4}\over{s+1}}-{{4}\over{s+2}} \] |
|
留数(residue)。residue() 関数の戻り値の意味:\( \frac{r_1}{s - p_1} + \frac{r_2}{s-p_2} + \cdots + \frac{r_n}{s-p_n} + k(s) \)
答え\[ y(t) = 4e^{-t} - 4e^{-2t} \xleftarrow{\mathcal L^{-1}} Y(s) = {{4}\over{s+1}}-{{4}\over{s+2}} = \frac{4}{s^2 + 3s + 2} \]
Maxima による逆ラプラス変換
| Maxima |
|---|
\[ 4\,e^ {- t }-4\,e^ {- 2\,t } \] |
例)\( Y(s) = \frac{4}{s^2 + 3s + 2}\frac{1}{s} \)
| Maxima | Octave |
|---|---|
\[ {{2}\over{s+2}}-{{4}\over{s+1}}+{{2}\over{s}} \] |
|
答え\[ y(t) = 2e^{-2t} - 4e^{-t} + 2 \xleftarrow{\mathcal L^{-1}} Y(s) = {{2}\over{s+2}}-{{4}\over{s+1}}+{{2}\over{s}} = \frac{4}{s^2 + 3s + 2}\frac{1}{s} \]
Maxima による逆ラプラス変換
| Maxima |
|---|
\[ -4\,e^ {- t }+2\,e^ {- 2\,t }+2 \] |
与えられている伝達関数\[ G(s) = \frac{12}{s^2 + 5s + 6} \]に対し、インパルス応答とステップ応答を求める
インパルス応答
| Octave | Scilab |
|---|---|
|
|
実行結果
![]() |
![]() |
ステップ応答
| Octave(つづき) | Scilab(つづき) |
|---|---|
|
|
実行結果
![]() |
![]() |
解析的に求めた結果との比較
| Maxima |
|---|
\[ 12\,e^ {- 2\,t }-12\,e^ {- 3\,t } \]\[ -6\,e^ {- 2\,t }+4\,e^ {- 3\,t }+2 \] |
(Maxima の fortran() 関数で計算結果をプログラミング言語の式に変換。「%」は、直前のコマンドの実行結果を表す)
グラフツールによるプロット
| gnuplot |
|---|
|
実行結果
![]() |
![]() |
Xcos では、伝達関数をそのまま扱うことができる
考えているシステムのブロック線図\[ u = 1 \longrightarrow \boxed{ \frac{12}{s^2 + 5s + 6} } \longrightarrow y \]
Xcos プログラム

各パレットの設定
![]() | ![]() |
|---|---|
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
シミュレーションの設定
![]() |
シミュレーション結果

| 1次遅れ要素 (first order lag element) |
1階線形微分方程式で表現される\[ T\frac{dy(t)}{dt} + y(t) = Ku(t) \]
伝達関数\[ G(s) = \frac{Y(s)}{U(s)} = \frac{K}{Ts + 1} \] ステップ応答\[ Y(s) = \frac{K}{s(Ts + 1)} = \frac{K}{s} - \frac{KT}{Ts + 1} \xrightarrow{\mathcal L^{-1}} y(t) = K(1 - e^{-t/T}) \] |
||||||
|---|---|---|---|---|---|---|---|
| 積分要素 (integral process) |
伝達関数\[ G(s) = \frac{K}{s} \] ステップ応答\[ Y(s) = \frac{K}{s^2} \xrightarrow{\mathcal L^{-1}} y(t) = Kt \] |
||||||
| 2次遅れ要素 (second order lag element) |
2階線形微分方程式で表現される\[ \tau^2\frac{d^2y(t)}{dt^2} + 2\zeta\tau\frac{dy(t)}{dt} + y(t) = Ku(t) \]
伝達関数\[ G(s) = \frac{Y(s)}{U(s)} = \frac{K}{\tau^2s^2 + 2\zeta\tau s + 1} \] 伝達関数の分母多項式 \( = 0 \) として得られる方程式\[ \tau^2 s^2 + 2\zeta\tau s + 1 = 0 \]を特性方程式(characteristic equation)と呼ぶ。特性方程式の根(特性根(characteristic root)と呼ぶ)\[ p_1 = \frac{-\zeta + \sqrt{\zeta^2 - 1}}{\tau},\ p_2 = \frac{-\zeta - \sqrt{\zeta^2 - 1}}{\tau} \]を極(pole)と呼ぶ。(以下、教科書の式より)
(\( \zeta = 0 \) のとき:持続振動) |
||||||
| むだ時間要素 (delay process/dead time process) |
次式のような時間的な遅れを持つプロセス\[ c_o(t) = c_i(t - L) \]
伝達関数\[ G(s) = \frac{C_o(s)}{C_i(s)} = e^{-Ls} \] ステップ応答\[ y(t) = u(t - L) \] (「伝達関数 \( e^{-Ls} \) は時間を \( L \) だけ遅らせる演算子である」と考える) |
||||||
| 1次遅れ+むだ時間要素 (first order plus time delay; FOPTD) |
ブロック線図\[ U \longrightarrow \boxed{\frac{K}{Ts + 1}} \longrightarrow \boxed{e^{-Ls}} \longrightarrow Y \] 伝達関数\[ P(s) = \frac{K}{Ts + 1}e^{-Ls} \] ステップ応答\[ y(t) = Ku^*(1 - e^{-(t - L)/T}) \] |
(逆応答(inverse response)について)《積み残し》
Xcos プログラム

パレットの設定
![]() | ![]() |
|---|
シミュレーション結果

むだ時間要素 \( e^{-Ls}\) を有理関数で近似(むだ時間 1.0 [s] 、次数4の例)
| Octave |
|---|
|
実行結果

(※高次遅れ要素とむだ時間要素を区別することは難しい)
プログラム
| Scilab |
|---|
|
実行結果
![]() |
時刻 \( t = T \)(時定数)で出力が目標値の(およそ)63.2%(\( = 100(1 - e^{-1})\))に達する
\( T \)、\( 2T \)、\( 3T \) の時点を計算。プログラムと実行結果
| Octave |
|---|
|
|
固有周波数(natural frequency) \( \omega_n \) を用いた伝達関数の一般形\[ G(s) = \frac{\omega_n^2}{s^2 + 2\zeta\omega_n s + \omega_n^2} \](\( \omega_n \) : 固有周波数(固有角周波数)、\( \zeta \) : 減衰係数)
ステップ応答の計算プログラム(\( \omega_n = 1 \))
| Octave |
|---|
|
実行結果

複素平面上(\( s \) 領域)で極(pole)の位置を確認
| Octave(つづき) |
|---|
|
実行結果

極は、以下で与えられる
| Maxima |
|---|
\[ \left[ s=-\sqrt{{\it \zeta}^2\,{\it \omega}_{n}^2-{\it \omega}_{n}}
-{\it \zeta}\,{\it \omega}_{n} , s=\sqrt{{\it \zeta}^2\,{\it \omega}
_{n}^2-{\it \omega}_{n}}-{\it \zeta}\,{\it \omega}_{n} \right] \] |
ステップ応答は\[ f(t) = \mathcal L^{-1}\left[ \frac{\omega_n^2}{s^2 + 2\zeta\omega_n s + \omega_n^2} \frac{1}{s} \right] \]で求められる
減衰係数 \( \zeta \) の値で場合分け
| Maxima | |
|---|---|
| 過制動、過減衰 \( \zeta > 1\) (overdamping) | \[ e^ {- {\it \zeta}\,t }\,\left(-{{{\it \zeta}\,\sinh \left(\sqrt{
{\it \zeta}^2-1}\,t\right)}\over{\sqrt{{\it \zeta}^2-1}}}-\cosh
\left(\sqrt{{\it \zeta}^2-1}\,t\right)\right)+1 \] |
| 臨界制動、臨界減衰 \( \zeta = 1\) (critical damping) | \[ \left(-{\it \zeta}\,t-1\right)\,e^ {- {\it \zeta}\,t }+1 \] |
| 不足制動 \( 0 < \zeta < 1\) (underdamping) | \[ e^ {- {\it \zeta}\,t }\,\left(-{{{\it \zeta}\,\sin \left(\sqrt{1-
{\it \zeta}^2}\,t\right)}\over{\sqrt{1-{\it \zeta}^2}}}-\cos \left(
\sqrt{1-{\it \zeta}^2}\,t\right)\right)+1 \] |
\( \zeta \) の値が \( 0 < \zeta < 1\) の範囲において、得られた逆ラプラス変換の式に三角関数が含まれていることから、ステップ応答が振動的な挙動となること分かる(減衰振動)
得られた(Maxima による記号計算で求めた)一般解の式に対して、\( \zeta \) に具体的な値を代入して応答のグラフを描画
| Maxima |
|---|
|
実行結果

(上記、Octave の step() 関数を利用した結果と一致している)
(※手計算の方法は教科書などを参照)《省略》
特性方程式\[ s^4 + 2s^3 + 3s^2 + 4s + 5 = 0 \]をもつシステムの安定性を調べる(例には、物理的なイメージ無し)
ラウス表(Routh table)を作成する
| Scilab |
|---|
|
ラウス表(の第1列)のラウス数列(Routh series)に着目する
| Scilab |
|---|
|
システムが安定であるための必要十分条件は、ラウス数列の要素がすべて同符号であること。この例では、符号が「1 → -6」と「-6 → 5」の2回変化している(システムは不安定)
不安定根の数は、ラウス数列における正負の符号変化の数に等しい
| Octave |
|---|
|
(Octave では、変数「ans」に直前の実行結果が格納される)
確認結果(複素平面の右半平面にある2つの根が不安定根)

(BIBO 安定(bounded input, bounded output stability)について)《積み残し》
(根軌跡法、根軌跡解析)
一巡伝達関数が\[ L(s) = \frac{K}{s(s + 1)(s + 2)} \]であるフィードバック制御系
![]() |
|
(比例制御システム)を考える
閉ループ伝達関数(closed-loop transfer function)
| Maxima |
|---|
|
特性方程式\[ s^3 + 3s^2 + 2s + K = 0 \]
根軌跡(ゲイン \( K \) を \( 0 \) から \( \infty \) まで変化させたときの特性根の軌跡)を描く(ゲインのみが異なるシステムの根軌跡は同じになる)
Scilab の evans() 関数を利用
| Scilab |
|---|
|
Scilab で根軌跡を描画

表示範囲を調整

また、Scilab では、kpure() 関数で「安定限界ゲイン」を求めることもできる
同じシステムについて、Octave の rlocus() 関数を利用して根軌跡を描画
| Octave |
|---|
|
Octave で描画した根軌跡

(詳細はメカトロニクスの教科書などを参照)
DC motor の等価回路
![]() |
(motor に流れる電流 \( i_a \)(電機子電流)に比例(\( K_\tau i_a \))したトルク \(\tau\) が発生する )
(motor が回転すると角速度に比例(\( K_e\omega \))した逆起電力 \( v_b \) が発生する) |
入力を電圧 \( v_a\)、出力を角速度 \( \omega \) として伝達関数を求める
DC motor のブロック線図(導出は教科書など)

(出力 \( \omega \) をさらに積分 \( \boxed{\frac{1}{s}} \) すれば角度 \( \theta \) となる)
各定数の値は適当。インダクタンスは小さいとする。\( K_\tau \) と \( K_e \) は、同じ値になる(フレミングの左手の法則と右手の法則)
| Scilab |
|---|
|
(Xcos のプログラムはこちら)

シミュレーション結果
| \( \omega \) |
|---|
![]() |
電流フィードバック制御、トルク制御(PI 制御)
| Scilab |
|---|
|
(Xcos のプログラムはこちら)

シミュレーション結果
| \( \tau^*,\ \tau \) | \( \omega \) |
|---|---|
![]() |
![]() |
速度制御(PI 制御)
| Scilab |
|---|
|
(Xcos のプログラムはこちら)
![]() |
シミュレーション結果
| \( \omega,\ \tau \) |
|---|
![]() |
(制御パラメタの \( K_p \)、\( K_i \) は試行錯誤で決定)
角度制御(PID 制御)
| Scilab |
|---|
|
(Xcos のプログラムはこちら)
![]() |
シミュレーション結果
| \( \theta,\ \tau \) |
|---|
![]() |
(制御パラメタの \( K_p \)、\( K_i \)、\( K_d \) は試行錯誤で決定)
(最終値の定理と初期値の定理)《省略》
(カスケード制御(cascade control)について)《省略》
(プロパー(proper)、厳密にプロパー(strictly proper)、インプロパー(improper)についてと近似微分)《省略》
→ 現代制御理論
《積み残し》
(限界感度法、ステップ応答法、IMC 法(内部モデル制御(internal model control; IMC))など)《積み残し》
正弦波入力に対する応答の比較(伝達関数は \( \frac{1}{Ts + 1}\)(1次遅れ系)、\( T \) は \( 1 \))
Xcos によるシミュレーション

シミュレーション結果の応答波形(グラフ上段が入力波形、下段が出力波形)
| \( \omega = 10^{-1} \) | ![]() |
|---|---|
| \( \omega = 10^0 \) | ![]() |
| \( \omega = 10^1 \) | ![]() |
| \( \omega = 10^2 \) | ![]() |
(Xcos のプログラムはこちら)
同じシステムについて Bode 線図(Bode diagram)を描画
| Octave |
|---|
|
実行結果

(Bode 線図の手書きなどによる折れ線近似の方法については教科書などを参照)《省略》
電圧や電流などの比を表す場合には、電力 \( P \) の比と相違ないようにする
電力は\[ P = \frac{V^2}{R} = I^2 R \]であるから\[ \begin{aligned} 10\log_{10} \frac{P_1}{P_2} &= 10\log \frac{V_1^2/R}{V_2^2/R} = 10\log \frac{V_1^2}{V_2^2} = 10\log \left(\frac{V_1}{V_2}\right)^2 = 20\log\frac{V_1}{V_2} \\ &= 10\log\frac{I_1^2 R}{I_2^2 R} = 10\log\frac{I_1^2}{I_2^2} = 10\log\left(\frac{I_1}{I_2}\right)^2 = 20\log\frac{I_1}{I_2} \end{aligned} \]となる(\( V_1,\ I_1 \) は測定値、\( V_2,\ I_2 \) は基準値)
よく使われるデシベル値
| dB | 電圧・電流比(ゲインなど) |
|---|---|
| -60 | \( 0.001 \) |
| -40 | \( 0.01 \) |
| -30 | \( 1/\sqrt{10^3} \approx 0.0316 \) |
| -20 | \( 1/10 = 0.1 \) |
| -10 | \( 1/\sqrt{10} \approx 0.316 \)(約x0.3) |
| -6 | \( \approx 1/2 = 0.5 \) |
| -3 | \( \approx 1/\sqrt 2 \approx 0.7 \) |
| 0 | \( 1 \) |
| 3 | \( \approx \sqrt 2 \approx 1.4 \) |
| 6 | \( \approx 2 \) |
| 10 | \( \sqrt{10} \approx 3.16 \) (約x3) |
| 20 | \( 10 \) |
| 30 | \( \sqrt{10^3} \approx 31.6 \) |
| 40 | \( 100 \) |
| 60 | \( 1000 \) |
(正負の dB 値は「逆数」の関係)
(ナイキスト線図は、ベクトル軌跡(vector locus)とも)
伝達関数 \( G(s) = \omega_n^2/(s^2 + 2\zeta\omega_n s + \omega_n^2) \)
| Octave |
|---|
|
描画結果
![]() |
![]() |
同じ伝達関数を Scilab の nyquist() 関数を使って描画
| Scilab |
|---|
|
描画結果

(ゲイン余裕(gain margin)と位相余裕(phase margin)について)《省略》
(ナイキストの安定判別法)《省略》
《積み残し》
© 2021 Tadakazu Nagai