void ObserverTest::test_Luenberger_ZOH() { init(); SP::ControlZOHSimulation simZOH(new ControlZOHSimulation(_t0, _T, _h)); simZOH->addDynamicalSystem(_DS); simZOH->addSensor(_sensor, _h); simZOH->addActuator(_pid, _h); SP::Observer luenberger(new LuenbergerObserver(_sensor, *_xHat0, _C, _L)); simZOH->addObserver(luenberger, _h); simZOH->initialize(); simZOH->run(); SimpleMatrix& data = *simZOH->data(); ioMatrix::write("Luenberger_ZOH.dat", "ascii", data, "noDim"); double error =0.0; bool test = !((error=ioMatrix::compareRefFile(data, "Luenberger.ref", _tol)) >= 0.0 && error > _tol); std::cout << "------- Integration done -------" << test <<std::endl; CPPUNIT_ASSERT_EQUAL_MESSAGE("test_Luenberger_ZOH : ", test , true); }
void ObserverTest::test_Luenberger_Lsodar() { init(); SP::ControlLsodarSimulation simLsodar(new ControlLsodarSimulation(_t0, _T, _h)); simLsodar->addDynamicalSystem(_DS); simLsodar->addSensor(_sensor, _h); simLsodar->addActuator(_pid, _h); SP::Observer luenberger(new LuenbergerObserver(_sensor, *_xHat0, _C, _L)); simLsodar->addObserver(luenberger, _h); simLsodar->initialize(); simLsodar->run(); SimpleMatrix& data = *simLsodar->data(); ioMatrix::write("Luenberger_Lsodar.dat", "ascii", data, "noDim"); // Reference Matrix SimpleMatrix dataRef(data); dataRef.zero(); ioMatrix::read("Luenberger.ref", "ascii", dataRef); std::cout << "------- Integration done, error = " << (data - dataRef).normInf() << " -------" <<std::endl; CPPUNIT_ASSERT_EQUAL_MESSAGE("test_Luenberger_Lsodar : ", (data - dataRef).normInf() < _tol, true); }