def test_invalid_sim(self): # Run simulation and assure that the results is correct self.lsqpe = pecas.LSq(system = self.odesys, \ tu = self.tu, uN = self.uN, \ pinit = self.pinit, \ xinit = self.xinit, \ yN = self.yN, \ wv = self.wv, weps_e = self.weps_e, weps_u = self.weps_u) # No x0 self.assertRaises(ValueError, self.lsqpe.run_simulation, \ x0 = None, psim = self.phat) # Wrong dimension for x0 self.assertRaises(ValueError, self.lsqpe.run_simulation, \ x0 = self.yN[0, :-1], psim = self.phat) # No psim self.assertRaises(AttributeError, self.lsqpe.run_simulation, \ x0 = self.yN[0, :]) # Wrong dimension for psim self.assertRaises(ValueError, self.lsqpe.run_simulation, \ x0 = self.yN[0, :], psim = self.phat[:-1]) # Unsupported integrator self.assertRaises(RuntimeError, self.lsqpe.run_simulation, \ x0 = self.yN[0, :], psim = self.phat, method = "dummy")
def test_covmat_invalid(self): self.lsqpe = pecas.LSq(system = self.bsys, \ tu = self.tu, uN = self.uN, \ pinit = self.pinit, \ yN = self.yN, wv = self.wv) self.assertRaises(AttributeError, self.lsqpe.compute_covariance_matrix)
def test_pe_invalid_method(self): self.lsqpe = pecas.LSq(system = self.bsys, \ tu = self.tu, uN = self.uN, \ pinit = self.pinit, \ yN = self.yN, wv = self.wv) self.assertRaises(NotImplementedError, \ self.lsqpe.run_parameter_estimation, hessian = "dummy")
def test_sim(self): # There is no simulation for BasicSystem self.lsqpe = pecas.LSq(system = self.bsys, \ tu = self.tu, uN = self.uN, \ pinit = self.pinit, \ yN = self.yN, wv = self.wv) self.assertRaises(NotImplementedError, \ self.lsqpe.run_simulation, x0 = None)
def test_plot_ellipsoid_invalid_call(self): self.lsqpe = pecas.LSq(system = self.odesys, \ tu = self.tu, uN = self.uN, \ pinit = self.pinit, \ xinit = self.xinit, \ yN = self.yN, \ wv = self.wv, weps_e = self.weps_e, weps_u = self.weps_u) self.assertRaises(AttributeError, \ self.lsqpe.plot_confidence_ellipsoids)
def test_valid_sim(self): # Run simulation and assure that the results is correct self.lsqpe = pecas.LSq(system = self.odesys, \ tu = self.tu, uN = self.uN, \ pinit = self.pinit, \ xinit = self.xinit, \ yN = self.yN, \ wv = self.wv, weps_e = self.weps_e, weps_u = self.weps_u) self.lsqpe.run_simulation(x0 = self.yN[0, :], psim = self.phat)
def test_valid_lsq_init(self): # Test valid setup cases pecas.LSq(system = self.bsys, \ tu = self.tu, uN = self.uN, \ pinit = self.pinit, \ yN = self.yN, wv = self.wv) pecas.LSq(system = self.bsys, \ tu = np.atleast_2d(self.tu).T, uN = self.uN, \ pinit = self.pinit, \ yN = self.yN, wv = self.wv) pecas.LSq(system = self.bsys, \ tu = self.tu, uN = self.uN, \ pinit = self.pinit, \ yN = self.yN.T, wv = self.wv) pecas.LSq(system = self.bsys, \ tu = self.tu, uN = self.uN, \ pinit = self.pinit, \ yN = self.yN, wv = self.wv.T)
def lsq_run_gauss_newton(self): # Run parameter estimation and assure that the results is correct self.lsqpe = pecas.LSq(system = self.bsys, \ tu = self.tu, uN = self.uN, \ pinit = self.pinit, \ yN = self.yN, wv = self.wv) self.assertRaises(AttributeError, getattr, self.lsqpe, "phat") self.assertRaises(AttributeError, getattr, self.lsqpe, "Xhat") self.assertRaises(AttributeError, self.lsqpe.show_results) self.lsqpe.run_parameter_estimation(hessian="gauss-newton") phat = self.lsqpe.phat testing.assert_almost_equal(phat, self.phat, decimal=5) self.lsqpe.show_results()
def lsq_run_exact_hessian(self): # Run parameter estimation and assure that the results is correct self.lsqpe = pecas.LSq(system = self.odesys, \ tu = self.tu, uN = self.uN, \ pinit = self.pinit, \ xinit = self.xinit, \ yN = self.yN, \ wv = self.wv, weps_e = self.weps_e, weps_u = self.weps_u) self.assertRaises(AttributeError, getattr, self.lsqpe, "phat") self.assertRaises(AttributeError, getattr, self.lsqpe, "Xhat") self.assertRaises(AttributeError, self.lsqpe.show_results) self.lsqpe.run_parameter_estimation(hessian="exact-hessian") phat = self.lsqpe.phat Xhat = self.lsqpe.Xhat testing.assert_almost_equal(phat, self.phat, decimal=5) self.lsqpe.show_results()
# The weightings for the measurements errors given to PECas are calculated # from the standard deviations of the measurements, so that the least squares # estimator ist the maximum likelihood estimator for the estimation problem. wnu = 1.0 / (pl.ones(tu.size)*sigmanu**2) ww = 1.0 / (pl.ones(tu.size)*sigmaw**2) wv = pl.array([wnu, ww]) # Run parameter estimation and assure that the results is correct lsqpe = pecas.LSq( \ system = odesys, tu = tu, \ uN = uN, \ pinit = 1, \ xinit = yN, # linear_solver = "ma97", \ yN = yN, wv = wv) # lsqpe.run_parameter_estimation(hessian = "gauss-newton") lsqpe.run_parameter_estimation(hessian = "exact-hessian") lsqpe.show_results() lsqpe.compute_covariance_matrix() lsqpe.show_results() lsqpe.run_simulation([numeas[0], wmeas[0]]) nusim = lsqpe.Xsim[0,:].T wsim = lsqpe.Xsim[1,:].T
odesys = pecas.systems.ExplODE( \ x = x, u = u, p = p, f = f, phi = phi) dt = 1.0 / fs tu = pl.linspace(0, N, N + 1) * dt uN = ca.DMatrix(0.1 * pl.random(N)) yN = pl.zeros((x.shape[0], N + 1)) wv = pl.ones(yN.shape) lsqpe_sim = pecas.LSq( \ system = odesys, tu = tu, \ uN = uN, \ pinit = p_guess, \ xinit = yN, # linear_solver = "ma97", \ yN = yN, wv = wv) lsqpe_sim.run_simulation(x0=[0.0, 0.0], psim=p_true / scale) p_test = [] sigma = 0.01 wv = (1. / sigma**2) * pl.ones(yN.shape) repetitions = 100 for k in range(repetitions):
delimiter = ", ", skiprows = 1)) ty = data[100:250, 1] yN = data[100:250, [2, 4, 6, 8]] wv = pl.ones(yN.shape) uN = data[100:249, [9, 10]] pinit = [0.5, 17.06, 12.0, 2.17, 0.1, 0.6] lsqpe = pecas.LSq(system = odesys, \ tu = ty, uN = uN, \ pinit = pinit, \ ty = ty, yN =yN, \ wv = wv, \ xinit = yN, \ linear_solver = "ma97", \ scheme = "radau", \ order = 3) lsqpe.run_parameter_estimation(hessian="exact-hessian") lsqpe.run_simulation(x0=yN[0, :]) xhat = lsqpe.Xsim[0, :].T yhat = lsqpe.Xsim[1, :].T psihat = lsqpe.Xsim[2, :].T vhat = lsqpe.Xsim[3, :].T pl.close("all")
phi = x odesys = pecas.systems.ExplODE( \ x = x, u = u, p = p, f = f, phi = phi) dt = 1.0 / fs ty = pl.linspace(0, N, N + 1) * dt u_data = ca.DMatrix(0.1 * pl.random(N)) y_data_dummy = pl.zeros((x.shape[0], N + 1)) wv_dummy = y_data_dummy lsqpe_dummy = pecas.LSq( \ system = odesys, \ tu = ty, \ uN = u_data, \ yN = y_data_dummy, \ wv = wv_dummy) lsqpe_dummy.run_simulation(x0=[0.0, 0.0], psim=p_true / scale) y_data = lsqpe_dummy.Xsim y_data += 1e-3 * pl.random((x.shape[0], N + 1)) wv = pl.ones(y_data.shape) lsqpe = pecas.LSq( \ system = odesys, \ tu = ty, \ uN = u_data, \ yN = y_data, \
def test_valid_lsq_init(self): # Test valid setup cases pecas.LSq(system = self.odesys, \ tu = self.tu, uN = self.uN, \ pinit = self.pinit, \ xinit = self.xinit, \ yN = self.yN, \ wv = self.wv, weps_e = self.weps_e, weps_u = self.weps_u) pecas.LSq(system = self.odesys, \ tu = np.atleast_2d(self.tu).T, uN = self.uN, \ pinit = self.pinit, \ xinit = self.xinit, \ yN = self.yN, \ wv = self.wv, weps_e = self.weps_e, weps_u = self.weps_u) pecas.LSq(system = self.odesys, \ tu = self.tu, uN = self.uN, \ ty = self.tu, \ pinit = self.pinit, \ xinit = self.xinit, \ yN = self.yN, \ wv = self.wv, weps_e = self.weps_e, weps_u = self.weps_u) pecas.LSq(system = self.odesys, \ tu = self.tu, uN = self.uN, \ ty = np.atleast_2d(self.tu).T, \ pinit = self.pinit, \ xinit = self.xinit, \ yN = self.yN, \ wv = self.wv, weps_e = self.weps_e, weps_u = self.weps_u) pecas.LSq(system = self.odesys, \ tu = self.tu, uN = self.uN, \ pinit = self.pinit, \ xinit = self.xinit, \ yN = self.yN.T, \ wv = self.wv, weps_e = self.weps_e, weps_u = self.weps_u) pecas.LSq(system = self.odesys, \ tu = self.tu, uN = self.uN, \ pinit = self.pinit, \ xinit = self.xinit, \ yN = self.yN, \ wv = self.wv.T, weps_e = self.weps_e, weps_u = self.weps_u) pecas.LSq(system = self.odesys, \ tu = self.tu, uN = self.uN, \ pinit = self.pinit, \ xinit = self.xinit, \ yN = self.yN, \ wv = self.wv, weps_e = [self.weps_e], weps_u = self.weps_u) pecas.LSq(system = self.odesys, \ tu = self.tu, uN = self.uN, \ pinit = self.pinit, \ xinit = self.xinit, \ yN = self.yN, \ wv = self.wv, weps_e = np.atleast_1d(self.weps_e), \ weps_u = self.weps_u) pecas.LSq(system = self.odesys, \ tu = self.tu, uN = self.uN, \ pinit = self.pinit, \ xinit = self.xinit, \ yN = self.yN, \ wv = self.wv, weps_e = self.weps_e, weps_u = [self.weps_u]) pecas.LSq(system = self.odesys, \ tu = self.tu, uN = self.uN, \ pinit = self.pinit, \ xinit = self.xinit, \ yN = self.yN, \ wv = self.wv, weps_e = self.weps_e, \ weps_u = np.atleast_1d(self.weps_u))
odesys = pecas.systems.ExplODE(x=x, p=p, f=f, phi=phi) odesys.show_system_information(showEquations=True) # The weightings for the measurements errors given to PECas are calculated # from the standard deviations of the measurements, so that the least squares # estimator ist the maximum likelihood estimator for the estimation problem. wv = pl.zeros((2, yN.shape[1])) wv[0, :] = (1.0 / sigma_x1**2) wv[1, :] = (1.0 / sigma_x2**2) lsqpe = pecas.LSq(system = odesys, \ tu = T, \ pinit = [0.5, 1.0], \ xinit = yN, \ yN = yN, \ # linear_solver = "ma97", \ wv = wv) lsqpe.run_parameter_estimation(hessian="gauss-newton") # lsqpe.run_parameter_estimation(hessian = "exact-hessian") lsqpe.show_results() lsqpe.compute_covariance_matrix() lsqpe.show_results() t = pl.linspace(0, 10, 1000) lsqpe.run_simulation(x0=yN[:, 0], tsim=t) pl.figure()