예제 #1
0
    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")
예제 #2
0
    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)
예제 #3
0
    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")
예제 #4
0
    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)
예제 #5
0
    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)
예제 #6
0
    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)
예제 #7
0
    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)
예제 #8
0
    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()
예제 #9
0
    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()
예제 #10
0
# 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
예제 #11
0
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):
예제 #12
0
    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")
예제 #13
0
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, \
예제 #14
0
    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))
예제 #15
0
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()