技術士(総合技術監理・機械部門)のブログ

技術士がお届けする,技術,工学,技術者倫理などの話題

制御系設計論のレビュー

2021-12-28 13:35:47 | 工学

南先生、石川先生著、制御系設計論という書籍が出版された。

丁度制御系の勉強をしているところでしたので

モニター応募したら当選して、早速読ませていただきました。

モニター当選の代償はレビュー投稿ということで

僭越ながらレビューを書かせていただきました(異論はあると思いますが 感想なのでご容赦ください)

 

ーーー 以下がレビューの概略です

本書は、対象のシステムとしての、表現(2章 動的システムの表現)、特性(3章 線形システムの特性)、構造(4章 線形システムの構造)を示していき、安定性について解説(5章 安定性)をしたのち、制御系の設計仕様を時間領域と周波数領域での指標と、目標の特性についての一般論を述べている。そして7章から14章にて古典制御(PID)から現代制御理論(状態フィードバック、最適制御、状態推定)、さらにロバスト制御、離散系の考え方を解説をしている。

読者は、初学者でも教科書としてなら問題ないが、場合によって参考文献に挙げられている図書を併用するのが早道かもしれない。付録を入れて224ページの図書であり、ページ数に対しての内容は盛りだくさんの感があるので、現代制御、ロバスト制御などは別途専門解説の図書の助けがあった方が良い。← (やはり現代制御は本書で良いかもしれませんが、ロバスト制御と離散系のシステムは別に専門書があったほうが理解が進むと思われます。参考文献には良書が挙げられています。)

 教科書的な使い方ではなく、「設計論」として考えると、設計者は、制御系は対象システムの特性が明確になって、その表現をどうするのか、あいまいなパラメータがないのか、安定性が補償されるのか、非線形性はどうか などを議論し、それに応じた適切な制御系を設計していくのであるが、対象の特性と制御系の相性といった視点では本書は構成されていない。例えば古典制御と現代制御の得失を示すような解説があっても良かったのではないかと思う。←(いらないかもしれませんが ふと設計論ということで設計する際には参考になると思いました

 ただ、たぶんそのような観点で踏み込んで考える人や、Z世代の人たちの助けとなるのはサポートページである。python、matlabのコードが、演習問題、例題について公開されている。対象のシステムが表現されていれば、簡単に制御性能を試すことが可能であり、さらに実際に設計する立場や、論文を書く段階になる学生などには重宝すると思われる。もちろん教科書としての使い方で、演習問題を実習させていく際にはサポートページが非常に役に立つことは言うまでもない。

↑ (サポートページを見ながら勉強するだけでも大変良いと思います。 しかし、色々な制御ツールがあり良い時代になりました


pythonで制御系設計2

2021-11-13 17:31:34 | 工学

さて

第二回は「制御のためのMATLAB」2章 MATLABによる動的システム解析のための準備

2−2 動的システムの数学モデルの変換

MATLABでは 

1 伝達関数表現から状態空間表現へ tf2ss

2 状態空間表現から伝達関数表現へ ss2tf

が主に使うような気がする。

pythonではこれらはscipyにて実現されている。

1 tf2ss 教科書69ページ 例題2−8をpythonでやってみると

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sat Nov 13 17:29:29 2021

@author: muranokenichi
"""

from scipy.signal import tf2ss


num = [25.04, 5.008] # 分母
den = [1, 5.03247, 25.1026,5.008] # 分子

# 伝達関数 → 状態方程式
A, B, C, D = tf2ss(num, den)print(' A=', A)
print(' B=', B)
print(' C=', C)
print(' D=', D)

--------実行結果は

A= [[ -5.03247 -25.1026   -5.008  ]
 [  1.        0.        0.     ]
 [  0.        1.        0.     ]]
B= [[1.]
 [0.]
 [0.]]
C= [[ 0.    25.04   5.008]]
D= [[0.]]

正解!

2 ss2tf 例題2−9

from scipy.signal import ss2tf

A= [[ 0.      ,1.    ,    0.  ],
 [  0.     ,   0.   ,     1.     ],
 [ -5.008 ,  -25.1026 ,  -5.03247 ]]
C= [[1.,0.,0.]]
B= [[ 0. ] , [ 25.04] ,  [-121.005]]
D= [[0.]]


# 状態方程式 → 伝達関数G
G= ss2tf(A, B ,C, D)


print('G(s)=', G)

で実行結果はーーー

G(s)= (array([[ 0.00000000e+00, -1.77635684e-15,  2.50400000e+01,
         5.00804880e+00]]), array([ 1.     ,  5.03247, 25.1026 ,  5.008  ]))

となり正解!

pythonでもいけましたね


pythonによる異常検知って

2021-10-04 19:17:32 | 工学

タイトルの参考書を前に買っていて

なんで買ったのかというとタイトルがpythonと

仕事で使えそうな異常検知だから

という何とも単純な理由からですが

これが中々良い本であった。

 

異常検知とはデータの中から異常なものを見つけ出すことに相違ない。

昔から、統計としてやってきたものと昨今の機械学習

実は 本質では同じ(語弊がありますが 内容的には同じもの)だということです。

そこらへんがよくわかっただけでもこの本、よかったと思います。

おいおい内容について紹介していきたいと思いますが、

サンプルプログラム spiderで走らせると、不具合発生

jupyterに乗り換えるかな。。。同じかな 悩み中


pythonで制御系設計1

2021-10-02 20:19:10 | 工学

なんだかんだで 一応開始。ただし教科書は

もう一度おさらいでの

 

にします。

今回は2章から

伝達関数の分母分子の多項式を部分分数展開する方法です。

例題2−1では以下pythonでの記述ですが

num=np.array([2,5,3,6]):matlab:num=[2 5 3 6]

den=np.array([1,6,11,6]):matlab:den=[1 611 6]

すなわち伝達関数

B(s)=2s^3+5s^2+3s+6

ーー  ーーーーーーーーーーーー

A(s)=s^3+6s^2+11s+6

という形を部分分数展開するもので

pythonではfrom control.matlab import *

を使いmatlabのコマンドするのではなく(というかここには無い)

scipyにあるのでした。

scipy.signal.residue

from control.matlab import * <これにはなし
import matplotlib.pyplot as plt <使ってない
import numpy as np
import scipy as sp   <これ

num=np.array([2,5,3,6])
den=np.array([1,6,11,6])
[r,p,k]=sp.signal.residue(num,den)
print(r)
print(p)
print(k)

まわりくどいプログラムですが

結果は

[ 3. -4. -6.]
[-1. -2. -3.]
[2.]

と出ました。

-6       -4           3                  

---- + ----  +  ----           +2

s+3    s+2       s+1

ということです。

control.matlabだけでなくscipyも駆使していくことになりそうです。