chmat.cpp itpp/itbase.h chmat.h #include<itpp/itbase.h> #include"chmat.h" usingnamespaceitpp; //usingstd::endl; voidchmat::opupdt(constvec&v,doublew){ //TODOseecholupdtinlhotse matZ; matR; matV(1,v.length()); V.set_row(0,v*w); Z=concat_vertical(Ch,V); qr(Z,R); Ch=R(0,Ch.rows()-1,0,Ch.cols()-1); }; matchmat::to_mat(){matF=Ch.T()*Ch;returnF;}; voidchmat::mult_sym(constmat&C){ it_error("notimplemented"); }; voidchmat::mult_sym(constmat&C,chmat&U)const{ it_error("notimplemented"); }; voidchmat::mult_sym_t(constmat&C){ it_error("notimplemented"); }; voidchmat::mult_sym_t(constmat&C,chmat&U)const{ it_error("notimplemented"); }; doublechmat::logdet()const{ doubleldet=0.0;inti; //sumoflogsof(possiblynegative!)diagonalentries for(i=0;i<Ch.rows();i++){ldet+=log(std::fabs(Ch(i,i)));} return2*ldet;//compensateforChbeingsqrt() }; //TODOcanbedonemoreefficientlyusingBLAS,seetriangularmatrices vecchmat::sqrt_mult(constvec&v)const{vecpom;pom=Ch*v;returnpom;}; doublechmat::qform(constvec&v)const{vecpom;pom=Ch*v;returnpom*pom;}; doublechmat::invqform(constvec&v)const{ vecpom(v.length()); forward_substitution(Ch.T(),v,pom); returnpom*pom; }; voidchmat::clear(){Ch.clear();};