libFN.h itpp/itbase.h libBM.h work/git/mixpp/bdm/estim/arx.h work/git/mixpp/bdm/estim/libKF.h work/git/mixpp/bdm/stat/libFN.cpp work/git/mixpp/pmsm/pmsm.h work/git/mixpp/pmsm/pmsm_mix.cpp work/git/mixpp/pmsm/pmsm_sim.cpp work/git/mixpp/pmsm/pmsm_sim2.cpp work/git/mixpp/pmsm/pmsm_sim3.cpp work/git/mixpp/pmsm/pmsm_unkQ.cpp work/git/mixpp/pmsm/pmsm_unkQpf.cpp work/git/mixpp/pmsm/sim_var.cpp constfn linfn diffbifn bilinfn // //C++Interface:itpp_ext // //Description: // // //Author:smidl<smidl@utia.cas.cz>,(C)2008 // //Copyright:SeeCOPYINGfilethatcomeswiththisdistribution // // #ifndefFN_H #defineFN_H #include<itpp/itbase.h> #include"libBM.h" usingnamespaceitpp; classconstfn:publicfnc { vecval; public: //veceval(){returnval;}; veceval(constvec&cond){returnval;}; constfn(constvec&val0):fnc(val0.length()),val(val0){}; }; classlinfn:publicfnc { RVrv; matA; vecB; public: veceval(constvec&cond){it_assert_debug(cond.length()==rv.count(),"linfn::evalWrongcond.");returnA*cond+B;}; //linfnevalsome(ivec&rvind); linfn(constRV&rv0):fnc(rv0.count()),rv(rv0),A(eye(rv0.count())),B(zeros(rv0.count())){}; voidset_parameters(constmat&A0,constvec&B0){A=A0;B=B0;}; }; classdiffbifn:publicfnc { protected: RVrvx; RVrvu; intdimx; intdimu; public: veceval(constvec&cond) { it_assert_debug(cond.length()==(dimx+dimu),"linfn::evalWrongcond."); returneval(cond(0,dimx-1),cond(dimx,dimx+dimu));//-1=end(inmatlab) }; virtualveceval(constvec&x0,constvec&u0){returnzeros(dimy);}; virtualvoiddfdx_cond(constvec&x0,constvec&u0,mat&A,boolfull=true){}; virtualvoiddfdu_cond(constvec&x0,constvec&u0,mat&A,boolfull=true){}; diffbifn(intdimy,constRVrvx0,constRVrvu0):fnc(dimy),rvx(rvx0),rvu(rvu0){dimx=rvx.count();dimu=rvu.count();}; int_dimx()const{returndimx;} int_dimu()const{returndimu;} }; //TODOcanbegeneralizedintomultilinearform! classbilinfn:publicdiffbifn { matA; matB; public: veceval(constvec&x0,constvec&u0); bilinfn(constRV&rvx0,constRV&rvu0):diffbifn(dimx,rvx0,rvu0),A(eye(dimx)),B(zeros(dimx,dimu)){}; bilinfn(constRV&rvx0,constRV&rvu0,constmat&A0,constmat&B0); voiddfdx_cond(constvec&x0,constvec&u0,mat&F,boolfull) { it_assert_debug((F.cols()==A.cols())&(F.rows()==A.rows()),"AllocatedFisnotcompatible."); if(full)F=A;//else:nothinghaschangednoneedtoregenerate } voiddfdu_cond(constvec&x0,constvec&u0,mat&F,boolfull=true) { it_assert_debug((F.cols()==B.cols())&(F.rows()==B.rows()),"AllocatedFisnotcompatible."); if(full)F=B;//else:nothinghaschangednoneedtoregenerate } }; #endif//FN_H