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]])
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]])
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]])
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]])
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)
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)
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)