図13.7のプロット
#計算とグラフプロットに必要なモジュールの読み込み
import numpy as np
from control import matlab
from matplotlib import pyplot as plt
from scipy import arange
from scipy import signal
#伝達関数の分子・分母多項式を与える
num = [0, 0, 1] #分子多項式
den = [1, 2, 1] #分母多項式
#コントローラのパラメータを与える
K1 = 1.0 #K = 1
K2 = 2.4 #K = 2.4
K3 = 3.0 #K = 3
#コントローラの分子・分母多項式を与える
numc1 = [0, K1] #K=1の場合の分子多項式
numc2 = [0, K2] #K=2.4の場合の分子多項式
numc3 = [0, K3] #K=3の場合の分子多項式
denc = [1, 0.1] #分母多項式
#制御対象のコントローラの伝達関数表現を与える
sys = matlab.tf(num, den) #制御対象の伝達関数表現
c1 = matlab.tf(numc1, denc) #K=1の場合の開ループ伝達関数
c2 = matlab.tf(numc2, denc) #K=2.4の場合の開ループ伝達関数
c3 = matlab.tf(numc3, denc) #K=3の場合の開ループ伝達関数
#制御対象とコントローラのフィードバック結合を求める
sysc1 = matlab.feedback(c1*sys,1,-1) #K=1の場合のフィードバック結合
sysc2 = matlab.feedback(c2*sys,1,-1) #K=2.4の場合のフィードバック結合
sysc3 = matlab.feedback(c3*sys,1,-1) #K=3の場合のフィードバック結合
#時間変数の定義
t = arange(0, 30, 0.01) #0から30まで0.01刻み
#ステップ応答の計算
y1, t1 = matlab.step(sysc1, t) #K = 1の場合のステップ応答
y2, t2 = matlab.step(sysc2, t) #K = 2.4の場合のステップ応答
y3, t3 = matlab.step(sysc3, t) #K = 3の場合のステップ応答
#図13.7(a)のプロット
plt.subplot(1, 3, 1) #3つの図を並べるためのコマンド.1行3列の1列目という意味
plt.plot(t1, y1) #ステップ応答をプロット
plt.xlim([0,30]) #横軸(時間軸)の範囲の指定
plt.ylim([0,2.5]) #縦軸(出力)の範囲の指定
plt.yticks([0,1.0,2]) #縦軸の目盛りの値の設定
plt.grid(color='gray') #罫線を灰色で表示
plt.xlabel("time t[s]") #横軸のラベル表示
plt.ylabel("y(t)") #縦軸のラベル表示
plt.title("K=1") #タイトルの表示
#図13.7(b)のプロット
plt.subplot(1, 3, 2) #3つの図を並べるためのコマンド.1行3列の2列目という意味
plt.plot(t2, y2) #ステップ応答をプロット
plt.xlim([0,30]) #横軸(時間軸)の範囲の指定
plt.ylim([0,2.5]) #縦軸出力の範囲の指定
plt.yticks([0,1.0,2.0]) #縦軸の目盛りの値の設定
plt.grid(color='gray') #罫線を灰色で表示
plt.xlabel("time t[s]") #横軸のラベル表示
#plt.ylabel("y(t)") #縦軸のラベル表示
plt.title("K=2.4") #タイトルの表示
#図13.7(c)のプロット
plt.subplot(1, 3, 3) #3つの図を並べるためのコマンド.1行3列の3列目という意味
plt.plot(t3, y3) #ステップ応答をプロット
plt.xlim([0,30]) #横軸(時間軸)の範囲の指定
plt.ylim([0,2.5]) #縦軸の範囲の指定
plt.yticks([0,1.0,2.0]) #縦軸の目盛りの値の設定
plt.grid(color='gray') #罫線を灰色で表示
plt.xlabel("time t[s]") #横軸のラベル表示
#plt.ylabel("y(t)") #縦軸のラベル表示
plt.title("K=3") #タイトルの表示
plt.show() #グラフの表示
#図13.7を同一グラフにプロット
plt.plot(t1, y1, label = "K = 1") #ステップ応答をプロット
plt.plot(t2, y2, label = "K = 2.4") #ステップ応答をプロット
plt.plot(t3, y3, label = "K = 3") #ステップ応答をプロット
plt.xlim([0,30]) #横軸(時間軸)の範囲の指定
plt.grid(color='gray') #罫線を灰色で表示
plt.xlabel("time t[s]") #横軸のラベル表示
plt.ylabel("y(t)") #縦軸のラベル表示
plt.legend() #凡例の表示
plt.show() #グラフの表示