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)