講義07 システムの応答~状態方程式の解~
一応、システムを定めれば解析的には解ける
が、現実はそんなに甘くないので、制御が必要
状態方程式の解
の解を求める
両辺に左から をかけて変形していく
に変換して、 (0からまで積分)すると
第1項は、自由応答と同じ
第2項は、入力(操作量)を積分したものになる
2x2の具体例
下記のシステムについて
講義06から
入力を考えると
積分すると
自由応答の第1項と合わせると解は
グラフにすると下図になる
fig = plt.figure(figsize=(6, 4)) ax = fig.add_subplot(111) t = np.arange(0, 10, 0.001) x1_arr = 1/6 + (5/2) * np.exp(-2 * t) - (5/3) * np.exp(-3 * t) x2_arr = -5 * np.exp(-2 * t) + 5 * np.exp(-3 * t) ax.plot(t, x1_arr, '-', label='x1') ax.plot(t, x2_arr, '--', label='x2') ax.grid() ax.legend() ax.set_xlim(0, 10) ax.set_ylim(-1.0, 1.0) fig.tight_layout()
Pythonによる数値シミュレーション
実際に、状態方程式を逐次計算した場合をシミュレーションしてみる
x1_arr = [1.0] x2_arr = [0.0] t = [0.0] dt = 0.001 for i in range(10000): x1_arr += [x1_arr[-1] + (0 * x1_arr[-1] + 1 * x2_arr[-1] + 0.0 * 1.0) * dt] x2_arr += [x2_arr[-1] + (-6 * x1_arr[-1] + -5 * x2_arr[-1] + 1.0 * 1.0) * dt] t += [t[-1] + dt]
fig = plt.figure(figsize=(6, 4)) ax = fig.add_subplot(111) ax.plot(t, x1_arr, '-', label='x1') ax.plot(t, x2_arr, '--', label='x2') ax.grid() ax.legend() ax.set_xlim(0, 10) ax.set_ylim(-1.0, 1.0) fig.tight_layout()
解析結果と同じになる
参考文献
この記事は以下の書籍を参考にしましたが、
私の拙い知識で書いておりますので、誤り等ありましたらご指摘ください