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)}; // 実部と虚部
}