コード例 #1
0
 def test_siso_ynext_derivatives(self):
     mdl = Linear(N=2, M=2)
     dy, du, dparams = mdl.derivatives(y=[1, 2],
                                       u=[2, 3],
                                       params=[10, 20, 30, 40])
     assert_array_almost_equal(dy, [[[10], [20]]])
     assert_array_almost_equal(du, [[[30], [40]]])
     assert_array_almost_equal(dparams, [[1, 2, 2, 3]])
コード例 #2
0
    def test_fir_model_derivatives(self):
        mdl = Linear(N=0, M=2, Ny=1, Nu=1)
        y = []
        u = [2, 1]
        params = [1, 2]

        dy, du, dparams = mdl.derivatives(y, u, params)

        assert_array_almost_equal(du, [[[1], [2]]])
        assert_array_almost_equal(dy, np.reshape([], (1, 0, 1)))
        assert_array_almost_equal(dparams, [[2, 1]])
コード例 #3
0
    def test_ar_model_derivatives(self):
        mdl = Linear(N=3, M=0, Ny=1, Nu=0)
        y = [1, 2, 3]
        u = []
        params = [1, 2, 3]

        dy, du, dparams = mdl.derivatives(y, u, params)

        assert_array_almost_equal(dy, [[[1], [2], [3]]])
        assert_array_almost_equal(du, np.reshape([], (1, 0, 0)))
        assert_array_almost_equal(dparams, [[1, 2, 3]])
コード例 #4
0
 def test_tito_ynext_derivatives(self):
     mdl = Linear(N=2, M=2, Ny=2, Nu=2)
     y = [[1, 2], [2, 3]]
     u = [[2, 3], [3, 4]]
     dy, du, dparams = mdl.derivatives(
         y=y,
         u=u,
         params=[10, 20, 0, 0, 0, 0, 50, 60, 30, 40, 0, 0, 0, 0, 70, 80])
     assert_array_almost_equal(dy, [[[10, 20], [0, 0]], [[0, 0], [50, 60]]])
     assert_array_almost_equal(du, [[[30, 40], [0, 0]], [[0, 0], [70, 80]]])
     assert_array_almost_equal(
         dparams, [[1, 2, 2, 3, 0, 0, 0, 0, 2, 3, 3, 4, 0, 0, 0, 0],
                   [0, 0, 0, 0, 1, 2, 2, 3, 0, 0, 0, 0, 2, 3, 3, 4]])
コード例 #5
0
    def test_fir_model_numerical_derivatives(self):
        mdl = Linear(N=0, M=2, Ny=1, Nu=1)
        y = []
        u = [2, 1]
        params = [1, 2]

        dy, du, dparams = mdl.derivatives(y, u, params)

        dy_numeric, du_numeric, \
            dparams_numeric = mdl._numeric_derivatives(y, u, params)

        assert_array_almost_equal(dy, dy_numeric)
        assert_array_almost_equal(du, du_numeric)
        assert_array_almost_equal(dparams, dparams_numeric)
コード例 #6
0
    def test_siso_numerical_approx(self):
        # Define model
        N = 2
        M = 2
        Ny = 1
        Nu = 1
        mdl = Linear(N, M)
        Nparams = mdl.Nparams

        # Define ynext and derivatives
        y = np.array([1.23, 2.41])
        u = np.array([2.54, 23])
        params = [1, 5.46, 3.23, 4]
        dy, du, dparams = mdl.derivatives(y, u, params)

        # Compute the same derivatives numerically
        dy_numeric, du_numeric, \
            dparams_numeric = mdl._numeric_derivatives(y, u,
                                                       params)

        # Check
        assert_array_almost_equal(dy, dy_numeric)
        assert_array_almost_equal(du, du_numeric)
        assert_array_almost_equal(dparams, dparams_numeric)
コード例 #7
0
    def test_mimo_numerical_approx_twoinputs_threeoutputs(self):
        # Define model
        N = 3
        M = 2
        Ny = 2
        Nu = 3
        mdl = Linear(N, M, Ny, Nu)
        Nparams = mdl.Nparams

        # Define ynext and derivatives
        y = np.array([[12, 2.41], [3, 1.23], [2.41, 5]])
        u = np.array([[4.5, 6.4, 10], [2.23, 2.41, 521]])
        params = np.arange(Nparams)
        dy, du, dparams = mdl.derivatives(y, u, params)

        # Compute the same derivatives numerically
        dy_numeric, du_numeric, \
            dparams_numeric = mdl._numeric_derivatives(y, u,
                                                       params)

        # Check
        assert_array_almost_equal(dy, dy_numeric)
        assert_array_almost_equal(du, du_numeric)
        assert_array_almost_equal(dparams, dparams_numeric)