void SMCTest::test_itw_Lsodar() { initTwisting(); SP::ControlLsodarSimulation simLsodar(new ControlLsodarSimulation(_t0, _T, _h)); simLsodar->setSaveOnlyMainSimulation(true); simLsodar->addDynamicalSystem(_DS); simLsodar->addSensor(_sensor, _h); simLsodar->addActuator(_itw, _h); simLsodar->initialize(); simLsodar->run(); SimpleMatrix& data = *simLsodar->data(); ioMatrix::write("itw_Lsodar.dat", "ascii", data, "noDim"); // Reference Matrix SimpleMatrix dataRef(data); dataRef.zero(); ioMatrix::read("itw.ref", "ascii", dataRef); // it is a bad idea to compare solutions to an AVI that does not admit a unique solution SiconosVector lambda1 = SiconosVector(data.size(0)); SiconosVector lambda2 = SiconosVector(data.size(0)); data.getCol(3, lambda1); data.getCol(4, lambda2); axpy(_beta, lambda2, lambda1); SiconosVector lambda1Ref = SiconosVector(data.size(0)); SiconosVector lambda2Ref = SiconosVector(data.size(0)); dataRef.getCol(3, lambda1Ref); dataRef.getCol(4, lambda2Ref); axpy(_beta, lambda2Ref, lambda1Ref); data.setCol(3, lambda1); dataRef.setCol(3, lambda1Ref); data.resize(data.size(0), 4); dataRef.resize(data.size(0), 4); std::cout << "------- Integration done, error = " << (data - dataRef).normInf() << " -------" <<std::endl; CPPUNIT_ASSERT_EQUAL_MESSAGE("test_itw_Lsodar : ", (data - dataRef).normInf() < _tol, true); }
void PIDTest::testPIDLsodar() { init(); SP::ControlLsodarSimulation simLsodar(new ControlLsodarSimulation(_t0, _T, _h)); simLsodar->addDynamicalSystem(_DS); simLsodar->addSensor(_sensor, _h); simLsodar->addActuator(_PIDcontroller, _h); simLsodar->initialize(); simLsodar->run(); SimpleMatrix& data = *simLsodar->data(); ioMatrix::write("PIDLsodar.dat", "ascii", data, "noDim"); // Reference Matrix SimpleMatrix dataRef(data); dataRef.zero(); ioMatrix::read("PID.ref", "ascii", dataRef); std::cout << "------- Integration done, error = " << (data - dataRef).normInf() << " -------" <<std::endl; CPPUNIT_ASSERT_EQUAL_MESSAGE("testPIDLsodar : ", (data - dataRef).normInf() < _tol, true); }
void ObserverTest::test_SMO_Lsodar() { init(); SP::ControlLsodarSimulation simLsodar(new ControlLsodarSimulation(_t0, _T, _h)); simLsodar->addDynamicalSystem(_DS); simLsodar->addSensor(_sensor, _h); simLsodar->addActuator(_pid, _h); SP::Observer smo(new SlidingReducedOrderObserver(_sensor, *_xHat0, _C, _L)); simLsodar->addObserver(smo, _h); simLsodar->initialize(); simLsodar->run(); SimpleMatrix& data = *simLsodar->data(); ioMatrix::write("SMO_Lsodar.dat", "ascii", data, "noDim"); double error =0.0; bool test = !((error=ioMatrix::compareRefFile(data, "SMO.ref", _tol)) >= 0.0 && error > _tol); std::cout << "------- Integration done -------" << test <<std::endl; CPPUNIT_ASSERT_EQUAL_MESSAGE("test_SMO_Lsodar : ", test, true); }
void ObserverTest::test_SMO_Lsodar() { init(); SP::ControlLsodarSimulation simLsodar(new ControlLsodarSimulation(_t0, _T, _h)); simLsodar->addDynamicalSystem(_DS); simLsodar->addSensor(_sensor, _h); simLsodar->addActuator(_pid, _h); SP::Observer smo(new SlidingReducedOrderObserver(_sensor, *_xHat0, _C, _L)); simLsodar->addObserver(smo, _h); simLsodar->initialize(); simLsodar->run(); SimpleMatrix& data = *simLsodar->data(); ioMatrix::write("SMO_Lsodar.dat", "ascii", data, "noDim"); // Reference Matrix SimpleMatrix dataRef(data); dataRef.zero(); ioMatrix::read("SMO.ref", "ascii", dataRef); std::cout << "------- Integration done, error = " << (data - dataRef).normInf() << " -------" <<std::endl; CPPUNIT_ASSERT_EQUAL_MESSAGE("test_SMO_Lsodar : ", (data - dataRef).normInf() < _tol, true); }