制御工学に関するPythonプログラム

Murray先生によるPythonControlを使います. Murray先生のホームページ PythonControlのマニュアル Anacondaでのインストールは,Anaconda Prompt で

conda install -c conda-forge control slycot


ゲイン余裕と位相余裕


import os
import math
import matplotlib.pyplot as plt 
import numpy as np
import control as ct

sys1 = ct.tf(1, [1, math.sqrt(3), 0])
sys2 = ct.tf(4, [1, math.sqrt(3)])
sys = ct.series(sys1,sys2)
gm, pm, sm, wpc, wgc, wms = ct.stability_margins(sys)
print(f"Gain margin: {gm:5.5} at omega = {wpc:2.8} rad/sec")
gmdb=20*np.log10(gm)
print(f"Gain margin[dB]: {gmdb:5.5} at omega = {wpc:2.8} rad/sec")
print(f"Phase margin: {pm:2.8} at omega = {wgc:2.2} rad/sec")
b=4/(math.sqrt(3)*6)
c=1/b
print(c)
a=-20*np.log10(b)
print(a)
a=20*np.log10(1/b)
print(a)

ゲイン余裕は通常 $-20\log_{10}|G(j\omega)K(j\omega)|$ [dB]で定義されますが, PythonControl では $1/|G(j\omega)K(j\omega)|$ で定義されています. PythonControl で計算された gm の $20\log_{10}$ をとると通常の[dB]の値になります.