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

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

SCILABによる制御系設計 その2

2017-03-11 20:18:07 | Weblog
2 動的解析のために

さて、尾形先生の参考書に沿ってすすめよう。
2章では、動的システム解析の準備として、部分分数展開を取り上げている。読者は、古典制御の知識があるものとしているのであるが、本ブログでは少々それについて説明をしていこうと思う。

線形システム つまり 重ねあわせができるシステムにおいては伝達関数は、部分分数によって表すことができる。
勉強であるから、以後は線形システムをまず扱う。

入力があって出力(応答)がある。
例えば、筆者の専門から言えば、地震動がある。
建物に、地震動が入力すると、出力としては 建物の揺れが起きる。これが建物の応答である。建物というシステムが、線形であれば、おなじような地震動を入力するといつも同じ応答が起こる。

これを表すのに伝達関数というのを使う。つまり、入力から伝達されて応答になるというところを関数として表すのである。
sをラプラス演算子として
部分分数表現は



といった形をとる。

例えばMATLABだと
伝達関数はnum=[2 5 3 6],den=[1 6 11 6]として、伝達関数を表すが、scilabでは
直接書く。

-->s=poly(0,'s');

-->H=[(2*s^3+5*s^2+3*s+6)/(s^3+6*s^2+11*s+6)]
H =

2 3
6 + 3s + 5s + 2s
----------------
2 3
6 + 11s + 6s + s

そして 部分分数展開は

-->pfss(H)
ans =


ans(1)

- 6
-----
3 + s

ans(2)

3
-----
1 + s

ans(3)

- 4
-----
2 + s

ans(4)

2.

でこれが直達項
となる。

さて、伝達関数表現と状態空間表現とはお互いに等価である。というか、表現を変えただけであるということでお互いに変換が可能である。

状態空間表現とは



のマトリクス表現であり

これの伝達関数は 

となる。

さて、やってみよう。

-->H=[(10*s+10)/(s^3+6*s^2+5*s+10)]
H =

10 + 10s
----------------
  2 3
10 + 5s + 6s + s

これを状態空間表現にすると、各マトリクスは
以下のようになる

-->tf2des(H)
ans =


ans(1)

!des A B C D E !

ans(2):これがA

0.8 3.6 1.277D-15
- 1.8444444 - 5.6765432 1.1042311
- 1.4037538 2.3340685 - 1.1234568

ans(3):これがB


0.
- 4.4444444
0.4969040

ans(4):これがC

- 0.625 - 1.388D-17 - 1.943D-16

ans(5):これがD

0.

ans(6):これがE(通常いらないが) E dx/dt=Ax+Bu のEというマトリクス 通常は単位行列

1. 0. 0.
0. 1. 0.
0. 0. 1.

として求まった。もう少し本当は綺麗な数になるのだが。。。

SCILABによる制御系設計 その1

2017-03-11 17:40:13 | 工学
MATLABにより制御系設計をすることは、非常に強力に可能であるが、あえて
SCILABによりどこまで出来るか、試してみたい。

その1はMATLABとSCILABの違いについて、簡単に紹介したい。

参照書は 尾形先生のこれです。非常に、丁寧にかかれており、海外でロングセラーとなっているもので、ぜひ一度手にとってください。オススメです。


制御のためのMATLAB
クリエーター情報なし
東京電機大学出版局


SCILABによる制御系設計を考える

1 基本操作

1.1 四則演算、関数
matlabとの違いについて、知っておいた方がよいものは、関数であろう。
四則演算は、行列のそれを含め同じである。
関数では特に、固有値がまず最初に違いを感じるものであろう。
Matlabではeigであるが、scilabではspecとなる。ここらへんは、下図のヘルプブラウザを使えば、使い方は問題なく使えると思う。




1.2 グラフ
 制御系などの設計に限らず、計算結果やシミュレーションをグラフに示すことは必須であろう。この機能はどうなっているのであろうか。
plotにてグラフは書けるが
例えば、gridという目盛線を入れるコマンドはscilabにはない。
これは、下図のようにヘルプを使ってみると、matlab commandとscilabの比較をしてくれる。

t=0:0.01*%pi:2*%pi;
->alpha=3;

-->y=sin(alpha*t);

-->plot(t,y)

-->grid
!--error 4
変数は定義されていません: grid


-->title('This is sin');

-->xlabel('t(sec)');

-->ylabel('sin');

ここまでやると こんなグラフが書ける。ちなみにmatlabではπはpiであったが、scilabでは%piとなる。

set(gca(),"grid",[1 1])
をすれば下図のようにgridが描かれる。