図7.4, 7.5

In [1]:
import numpy as np
from control import matlab
from matplotlib import pyplot as plt
from scipy import arange 
In [2]:
#システムパラメータを与える
A = np.array([[0.0, 1.0], [-5.0,-2.0]]) #A行列
b = np.array([[0.0], [1.0]]) #bベクトル
c = np.array([[1.0, 0.0],[0.0,1.0]]) #x_{1}とx_{2}をプロットするためにcを単位行列にする
d = np.array([[0.0],[0.0]]) #Cに合わせてDは零ベクトルとする

#システムの状態空間表現を与える
sysP = matlab.ss(A, b, c, d) #状態空間表現
In [3]:
#システム行列Aの固有値を求める
eig, eig_vec = np.linalg.eig(A)
print("pole = ",eig)
pole =  [-1.+2.j -1.-2.j]
In [4]:
#時間変数の定義
t = np.arange(0, 10, 0.01) #0から10まで0.01刻み

#初期値を与える
x0 = np.array([[1.0],[0.0]]) #x(0) = [1,0]^{T}の場合
x00 = np.array([[0.0],[0.0]]) #x(0) = [0,0]^{T}の場合

#ステップ応答の計算
y1, t = matlab.step(sysP, t, x0) #x(0) = [1,0]^{T}の場合ステップ応答
y2, t = matlab.step(sysP, t, x00) #x(0) = [0,0]^{T}の場合ステップ応答
In [5]:
# 図7.4のプロット
plt.plot(t, y1[:,0], label = "x_1(t)")#x_{1}を抽出してplotする
plt.plot(t, y1[:,1], label = "x_2(t)")#x_{2}を抽出してplotする
plt.xlim([0,10]) #横軸(時間軸)の範囲の指定
plt.ylim([-1.5,1.0]) #縦軸の範囲の指定
plt.grid(color='gray') #罫線の表示
plt.grid(color='gray') #罫線を表示
plt.xlabel("time   t[s]") #横軸のラベル表示
plt.ylabel("output") #縦軸のラベル表示
plt.legend() #凡例の表示
plt.show() #グラフの表示
In [6]:
# 図7.5のプロット
plt.plot(t, y2[:,0], label = "x_1(t)")#x_{1}を抽出してplotする
plt.plot(t, y2[:,1], label = "x_2(t)")#x_{2}を抽出してplotする
plt.xlim([0,10]) #横軸(時間軸)の範囲の指定
plt.ylim([-1.5,1.0]) #縦軸の範囲の指定
plt.grid(color='gray') #罫線の表示
plt.grid(color='gray') #罫線を表示
plt.xlabel("time   t[s]") #横軸のラベル表示
plt.ylabel("output") #縦軸のラベル表示
plt.legend() #凡例の表示
plt.show() #グラフの表示