def test_scalar_static_gain(self): """Regression: can we create a scalar static gain? make sure StateSpace internals, specifically ABC matrix sizes, are OK for LTI operations """ g1 = StateSpace([], [], [], [2]) g2 = StateSpace([], [], [], [3]) assert g1.dt == None assert g2.dt == None g3 = g1 * g2 assert 6 == g3.D[0, 0] assert g3.dt == None g4 = g1 + g2 assert 5 == g4.D[0, 0] assert g4.dt == None g5 = g1.feedback(g2) np.testing.assert_allclose(2. / 7, g5.D[0, 0]) assert g5.dt == None g6 = g1.append(g2) np.testing.assert_allclose(np.diag([2, 3]), g6.D) assert g6.dt == None
def testMIMOfb(self): sys = StateSpace([[-0.5, 0.0], [0.0, -1.0]], [[1.0, 0.0], [0.0, 1.0]], [[1.0, 0.0], [0.0, 1.0]], [[0.0, 0.0], [0.0, 0.0]]) omega = np.logspace(-1, 2, 10) f1 = FRD(sys, omega).feedback([[0.1, 0.3], [0.0, 1.0]]) f2 = FRD(sys.feedback([[0.1, 0.3], [0.0, 1.0]]), omega) np.testing.assert_array_almost_equal( f1.frequency_response([0.1, 1.0, 10])[0], f2.frequency_response([0.1, 1.0, 10])[0]) np.testing.assert_array_almost_equal( f1.frequency_response([0.1, 1.0, 10])[1], f2.frequency_response([0.1, 1.0, 10])[1])
def testMIMOfb2(self): sys = StateSpace(np.array([[-2.0, 0, 0], [0, -1, 1], [0, 0, -3]]), np.array([[1.0, 0], [0, 0], [0, 1]]), np.eye(3), np.zeros((3, 2))) omega = np.logspace(-1, 2, 10) K = np.array([[1, 0.3, 0], [0.1, 0, 0]]) f1 = FRD(sys, omega).feedback(K) f2 = FRD(sys.feedback(K), omega) np.testing.assert_array_almost_equal( f1.frequency_response([0.1, 1.0, 10])[0], f2.frequency_response([0.1, 1.0, 10])[0]) np.testing.assert_array_almost_equal( f1.frequency_response([0.1, 1.0, 10])[1], f2.frequency_response([0.1, 1.0, 10])[1])
def testMIMOfb2(self): sys = StateSpace(np.matrix('-2.0 0 0; 0 -1 1; 0 0 -3'), np.matrix('1.0 0; 0 0; 0 1'), np.eye(3), np.zeros((3,2))) omega = np.logspace(-1, 2, 10) K = np.matrix('1 0.3 0; 0.1 0 0') f1 = FRD(sys, omega).feedback(K) f2 = FRD(sys.feedback(K), omega) np.testing.assert_array_almost_equal( f1.freqresp([0.1, 1.0, 10])[0], f2.freqresp([0.1, 1.0, 10])[0]) np.testing.assert_array_almost_equal( f1.freqresp([0.1, 1.0, 10])[1], f2.freqresp([0.1, 1.0, 10])[1])
def testMIMOfb(self): sys = StateSpace([[-0.5, 0.0], [0.0, -1.0]], [[1.0, 0.0], [0.0, 1.0]], [[1.0, 0.0], [0.0, 1.0]], [[0.0, 0.0], [0.0, 0.0]]) omega = np.logspace(-1, 2, 10) f1 = FRD(sys, omega).feedback([[0.1, 0.3],[0.0, 1.0]]) f2 = FRD(sys.feedback([[0.1, 0.3],[0.0, 1.0]]), omega) np.testing.assert_array_almost_equal( f1.freqresp([0.1, 1.0, 10])[0], f2.freqresp([0.1, 1.0, 10])[0]) np.testing.assert_array_almost_equal( f1.freqresp([0.1, 1.0, 10])[1], f2.freqresp([0.1, 1.0, 10])[1])
def testMIMOfb2(self): sys = StateSpace(np.matrix('-2.0 0 0; 0 -1 1; 0 0 -3'), np.matrix('1.0 0; 0 0; 0 1'), np.eye(3), np.zeros((3, 2))) omega = np.logspace(-1, 2, 10) K = np.matrix('1 0.3 0; 0.1 0 0') f1 = FRD(sys, omega).feedback(K) f2 = FRD(sys.feedback(K), omega) np.testing.assert_array_almost_equal( f1.freqresp([0.1, 1.0, 10])[0], f2.freqresp([0.1, 1.0, 10])[0]) np.testing.assert_array_almost_equal( f1.freqresp([0.1, 1.0, 10])[1], f2.freqresp([0.1, 1.0, 10])[1])
def test_scalarStaticGain(self): """Regression: can we create a scalar static gain?""" g1=StateSpace([],[],[],[2]) g2=StateSpace([],[],[],[3]) # make sure StateSpace internals, specifically ABC matrix # sizes, are OK for LTI operations g3 = g1*g2 self.assertEqual(6, g3.D[0,0]) g4 = g1+g2 self.assertEqual(5, g4.D[0,0]) g5 = g1.feedback(g2) self.assertAlmostEqual(2./7, g5.D[0,0]) g6 = g1.append(g2) np.testing.assert_array_equal(np.diag([2,3]),g6.D)
def test_matrixStaticGain(self): """Regression: can we create matrix static gains?""" d1 = np.matrix([[1,2,3],[4,5,6]]) d2 = np.matrix([[7,8],[9,10],[11,12]]) g1=StateSpace([],[],[],d1) # _remove_useless_states was making A = [[0]] self.assertEqual((0,0), g1.A.shape) g2=StateSpace([],[],[],d2) g3=StateSpace([],[],[],d2.T) h1 = g1*g2 np.testing.assert_array_equal(d1*d2, h1.D) h2 = g1+g3 np.testing.assert_array_equal(d1+d2.T, h2.D) h3 = g1.feedback(g2) np.testing.assert_array_almost_equal(solve(np.eye(2)+d1*d2,d1), h3.D) h4 = g1.append(g2) np.testing.assert_array_equal(block_diag(d1,d2),h4.D)