制御工学でのシミュレーションとして、ベクトル軌跡を描くときにはMATLABを使うのが一般的ですが、コストがかかるため趣味程度で遊ぶには敷居が高いです
ScilabはMATLABに似た機能を持つソフトで、無料で使用することができるので気安く使えます
今回はScilabでベクトル軌跡を描く方法について説明していきます
シンプルなベクトル軌跡の描き方
伝達関数\(G(s)\)を以下のようにします
$$G(s) = \frac{1}{s^2 + s + 1}$$
最もシンプルに描く方法は以下の通りになります
1 2 3 4 | s = %s;//変数sの定義 Gs = 1/(s^2 + s + 1);//伝達関数の定義 sys = syslin('c', Gs);//連続時間線形システムへ伝達関数Gsを登録 nyquist(sys, 0, 100000, %f)//ベクトル軌跡の描画 |
nyquist()関数は、ナイキスト線図を描くときの関数です
ここで、ナイキスト線図とベクトル線図を比較してみると
・ナイキスト線図は、角周波数\(\omega\)を\(-\infty \rightarrow \infty\)まで変化させるときの周波数伝達関数の軌跡
・ベクトル軌跡は、角周波数\(\omega\)を\(0 \rightarrow \infty\)まで変化させるときの周波数伝達関数の軌跡
であるから、角周波数の最少値を変更する必要があります
nyquist()関数の第2,3引数に角周波数の最小値と最大値を設定し、さらに第4引数に関して
実はnyquist()関数,symmetry引数というものを取ることができ,これはグラフの対称性を指定する引数になっています.デフォルト(値を指定しない)では,%tとなっており,上下対称のグラフを描く仕様になっています.(この%tはtrueのt)なので,周波数が正の範囲だけを描画させたいときはsymmetry引数をfalseにしてあげる必要があります
とのことなので、以下のように記述すれば、\(\omega\)の範囲を\(0 \rightarrow 10^{5}\)までに設定できます
1 | nyquist(sys, 0, 100000, %f) |
分母がsの多項式でない場合
比例要素、微分要素、一次進み要素の伝達関数\(G_{1}(s)~,~G_{2}(s)~,~G_{3}(s)\)はそれぞれ
$$\begin{align*}
G_{1}(s) &= K\\
G_{2}(s) &= s\\
G_{3}(s) &= 1+Ts
\end{align*}$$
であり、分母は1になっています
そのままGsに代入してしまうと、エラーになってしまいます
そのようなときは、分母に\(s^{0}\)を付けて以下のように記述します
1 | Gs = (1+Ts)/s^0; |
複数のベクトル軌跡を重ね合わせて描く
複数のベクトル軌跡を重ね合わせて描く場合には、以下のように記述します
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | s = %s; z1 = 0.1; z2 = 0.3; z3 = 0.6; z4 = 0.9; Gs1 = 1 / (s^2 + 2*(z1)*wn*s + wn^2); Gs2 = 1 / (s^2 + 2*(z2)*wn*s + wn^2); Gs3 = 1 / (s^2 + 2*(z3)*wn*s + wn^2); Gs4 = 1 / (s^2 + 2*(z4)*wn*s + wn^2); sys1 = syslin('c', Gs1); sys2 = syslin('c', Gs2); sys3 = syslin('c', Gs3); sys4 = syslin('c', Gs4); nyquist([sys1;sys2;sys3;sys4], 0, 100000, %f) |
色分けはソフトが行ってくれます
まとめ
今回は、Scilabでのベクトル軌跡の描き方について簡単に説明しました
Scilabはネット上に日本語の情報が少ないですが、制御シミュレーションで遊ぶにはこのソフトはおすすめです
ぜひ使ってみてください
Scilabでのボード線図の描き方についての記事はこちらになります
Scilabでボード線図を描いてみる
続きを見る