linefit2.cpp itpp/itmex.h ../../bdm/estim/arx.h void void mexFunction (int n_output, mxArray *output[], int n_input, const mxArray *input[]) mexFunction int n_output mxArray * output [] int n_input const mxArray * input [] #include<itpp/itmex.h> #include"../../bdm/estim/arx.h" usingnamespaceitpp; voidmexFunction(intn_output,mxArray*output[],intn_input,constmxArray*input[]){ //Checkthenumberofinputsandoutputarguments if(n_output<1)mexErrMsgTxt("Wrongnumberofoutputvariables!"); if(n_input!=3)mexErrMsgTxt("Wrongnumberofinputvariables!"); //ConvertinputvariablestoIT++format matData=mxArray2mat(input[0]); if(Data.rows()!=2) {if(Data.cols()==2)Data=Data.T();elsemexErrMsgTxt("Dataarenot2D!");} intilow=mxArray2int(input[1])-1; intihi=mxArray2int(input[2])-1;//coreectionfordifferentindeces //------------------Startofroutine--------------------------- //------------------Startofroutine--------------------------- intndat=Data.cols(); intnpsi=Data.rows()+1;//addaconstant RVthr("1","{theta_r}",vec_1(npsi),vec_1(0)); matV0=1e-8*eye(npsi);V0(0,0)=1e-4; vecrgr(npsi); doublenu0=0.1; //fittingalinearpart=>thirdcoefis"1" rgr(2)=1.0; //RESULTS matTlls=zeros(ihi+1,ihi+1); //ARmodel ARXAr(thr,V0,nu0); //Initialize for(inti=ilow+2;i<ihi-2;i++){ rgr.set_subvector(0,Data.get_col(i)); Ar.bayes(rgr); } //FLATTEN /*Ar.get_parameters(V0,nu0); V0*=1.0/nu0/10000.;//sameflatteningfactorasfornu0 nu0=1./10000.;*/ Ar.set_parameters(V0,nu0); for(inti=ilow;i<=ihi;i++){ Ar.set_parameters(V0,nu0); for(intt=i;t<=ihi;t++){ rgr.set_subvector(0,Data.get_col(t)); Ar.bayes(rgr); Tlls(i,t)=Ar._tll(); } } max_index(Tlls,ilow,ihi); //------------------Endofroutine----------------------------- output[0]=mxCreateDoubleMatrix(2,1,mxREAL); ivec2mxArray(vec_2(ilow+1,ihi+1),output[0]); if(n_output>1){ //Createoutputvectors output[1]=mxCreateDoubleMatrix(Tlls.rows(),Tlls.cols(),mxREAL); //ConverttheIT++formattoMatlabformatforoutput mat2mxArray(Tlls,output[1]); } if(n_output>2){ Ar.set_parameters(V0,nu0); //RedoArforgivenpoints for(inti=ilow;i<=ihi;i++){ rgr.set_subvector(0,Data.get_col(i)); Ar.bayes(rgr); } //Createoutputvectors output[2]=mxCreateDoubleMatrix(3,1,mxREAL); //ConverttheIT++formattoMatlabformatforoutput //mat2mxArray(Ar._epdf().mean(),output[2]); mat2mxArray(Ar._epdf().mean(),output[2]); } }