Func void main() { Polynomial s; Rational G; 05: Array w, ga, ph, re, im; List Bode(...), Nyquist(...); s = $; // 多項式変数 G = (s^2 + 3*s + 4)/(s^3 + 5*s^2 + 6*s + 7); 10: // 伝達関数 w = logspace(0.01, 100.0); // 周波数の範囲 {ga, ph} = Bode(G, w); // ゲインと位相 {re, im} = Nyquist(G, w); // 実部と虚部 15: print [[w][re][im]] >> "nyquist.mat"; // データ保存 print [[w][ga][ph]] >> "bode.mat"; // データ保存 } Func List Bode(G, w) 20: Rational G; Array w; { Complex j; Array data, ga, ph; 25: j = (0,1); // 虚数単位 data = eval(G, j*w); // G(j*w) ga = 20.0 * log10(abs(data)); // ゲイン [dB] ph = arg(data) * 180.0 / PI; // 位相 [degree] 30: return {ga, ph}; } Func List Nyquist(G, w) Rational G; 35: Array w; { Complex j; Array data; 40: j = (0,1); // 虚数単位 data = eval(G, j*w); // G(j*w) return {Re(data), Im(data)}; // 実部と虚部 }