Func void main() { Integer i, ii; Real dt, t, t1, t2; Matrix x, u, controller(); Array X, U; void plant(); t1 = 0.0; // 初期時刻 t2 = 5.0; // 終端時刻 dt = 0.01; // きざみ ii = Integer((t2 - t1) / dt); x = [1 1 1]'; // 初期状態 u = [0]; X = Z(1, ii, x); U = Z(1, ii, u); t = t1; X(0, 0, x) = x; for (i = 1; i < ii; i++) { u = controller(t, x); x = rngkut4(t, x, plant, u, dt); U(0, i-1, u) = u; X(0, i, x) = x; t = t + dt; } u = controller(t, x); U(0, ii-1, u) = u; print [[X][U]] >> "cont.mat"; }
Func void plant(dx, t, x, u) Real t; Matrix x, dx, u; { Matrix A, b; A = [[ 0 1 0] // システム行列 [ 0 0 1] [-2, -3, -4]]; b = [0 0 1]'; // 入力行列 dx = A*x + b*u; // 状態方程式 } Func Matrix controller(t, x) Real t; Matrix x; { Matrix f, u; f = [-1, -1, -1]; // 状態フィードバック則 u = f*x; return u; }