def testBalredMatchDC(self, matarrayin): # controlable canonical realization computed in matlab for the transfer # function: # num = [1 11 45 32], den = [1 15 60 200 60] A = matarrayin( [[-15., -7.5, -6.25, -1.875], [8., 0., 0., 0.], [0., 4., 0., 0.], [0., 0., 1., 0.]]) B = matarrayin([[2.], [0.], [0.], [0.]]) C = matarrayin([[0.5, 0.6875, 0.7031, 0.5]]) D = matarrayin([[0.]]) sys = StateSpace(A, B, C, D) orders = 2 rsys = balred(sys,orders,method='matchdc') Artrue = np.array( [[-4.43094773, -4.55232904], [-4.55232904, -5.36195206]]) Brtrue = np.array([[1.36235673], [1.03114388]]) Crtrue = np.array([[1.36235673, 1.03114388]]) Drtrue = np.array([[-0.08383902]]) np.testing.assert_array_almost_equal(rsys.A, Artrue, decimal=2) np.testing.assert_array_almost_equal(rsys.B, Brtrue, decimal=4) np.testing.assert_array_almost_equal(rsys.C, Crtrue, decimal=4) np.testing.assert_array_almost_equal(rsys.D, Drtrue, decimal=4)
def testBalredTruncate(self, matarrayin): # controlable canonical realization computed in matlab for the transfer # function: # num = [1 11 45 32], den = [1 15 60 200 60] A = matarrayin([[-15., -7.5, -6.25, -1.875], [8., 0., 0., 0.], [0., 4., 0., 0.], [0., 0., 1., 0.]]) B = matarrayin([[2.], [0.], [0.], [0.]]) C = matarrayin([[0.5, 0.6875, 0.7031, 0.5]]) D = matarrayin([[0.]]) sys = StateSpace(A, B, C, D) orders = 2 rsys = balred(sys, orders, method='truncate') Artrue = np.array([[-1.958, -1.194], [-1.194, -0.8344]]) Brtrue = np.array([[0.9057], [0.4068]]) Crtrue = np.array([[0.9057, 0.4068]]) Drtrue = np.array([[0.]]) np.testing.assert_array_almost_equal(rsys.A, Artrue, decimal=2) np.testing.assert_array_almost_equal(rsys.B, Brtrue, decimal=4) np.testing.assert_array_almost_equal(rsys.C, Crtrue, decimal=4) np.testing.assert_array_almost_equal(rsys.D, Drtrue, decimal=4)
plt.close('all') # controllable canonical realization computed in MATLAB for the # transfer function: num = [1 11 45 32], den = [1 15 60 200 60] A = np.array([[-15., -7.5, -6.25, -1.875], [8., 0., 0., 0.], [0., 4., 0., 0.], [0., 0., 1., 0.]]) B = np.array([[2.], [0.], [0.], [0.]]) C = np.array([[0.5, 0.6875, 0.7031, 0.5]]) D = np.array([[0.]]) # The full system fsys = StateSpace(A, B, C, D) # The reduced system, truncating the order by 1 n = 3 rsys = msimp.balred(fsys, n, method='truncate') # Comparison of the step responses of the full and reduced systems plt.figure(1) y, t = mt.step(fsys) yr, tr = mt.step(rsys) plt.plot(t.T, y.T) plt.plot(tr.T, yr.T) # Repeat balanced reduction, now with 100-dimensional random state space sysrand = mt.rss(100, 1, 1) rsysrand = msimp.balred(sysrand, 10, method='truncate') # Comparison of the impulse responses of the full and reduced random systems plt.figure(2) yrand, trand = mt.impulse(sysrand)
#controlable canonical realization computed in matlab for the transfer function: # num = [1 11 45 32], den = [1 15 60 200 60] A = np.matrix('-15., -7.5, -6.25, -1.875; \ 8., 0., 0., 0.; \ 0., 4., 0., 0.; \ 0., 0., 1., 0.') B = np.matrix('2.; 0.; 0.; 0.') C = np.matrix('0.5, 0.6875, 0.7031, 0.5') D = np.matrix('0.') # The full system fsys = StateSpace(A,B,C,D) # The reduced system, truncating the order by 1 ord = 3 rsys = msimp.balred(fsys,ord, method = 'truncate') # Comparison of the step responses of the full and reduced systems plt.figure(1) y, t = mt.step(fsys) yr, tr = mt.step(rsys) plt.plot(t.T, y.T) plt.plot(tr.T, yr.T) # Repeat balanced reduction, now with 100-dimensional random state space sysrand = mt.rss(100, 1, 1) rsysrand = msimp.balred(sysrand,10,method ='truncate') # Comparison of the impulse responses of the full and reduced random systems plt.figure(2) yrand, trand = mt.impulse(sysrand)