00001
00014 #include "libKF.h"
00015 #include <uibuilder.h>
00016
00017 class UIEKF: public UIbuilder {
00018 public:
00019 UIEKF():UIbuilder("EKF"){};
00020 bdmroot* build ( Setting &S ) const {
00021 diffbifn* IM; UIbuild(S["IM"],IM);
00022 diffbifn* OM; UIbuild(S["OM"],OM);
00023
00024
00025 EKFCh* E; E=new EKFCh;
00026 E->set_parameters(IM, OM, diag(getvec(S["dQ"])), diag(getvec(S["dR"])));
00027
00028
00029 int dim=IM->dimension();
00030 vec mu0;
00031 mat P0;
00032 if (S.exists("mu0")){mu0=getvec(S["mu0"]);}else{mu0=zeros(dim);};
00033 if (S.exists("P0")){mu0=getmat(S["P0"],dim);}else{P0=eye(dim);};
00034 E->set_statistics(mu0,P0);
00035
00036
00037 RV* drv; UIbuild(S["drv"],drv);
00038 E->set_drv(*drv);
00039 RV* rv; UIbuild(S["rv"],rv);
00040 E->set_rv(*rv);
00041 return E;
00042 }
00043 };
00044 UIREGISTER ( UIEKF );
00045
00046