linefit.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]); intihi=mxArray2int(input[2]); //------------------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)=10.0; vecrgr(npsi); doublenu0=npsi+2; //fittingalinearpart=>thirdcoefis"1" rgr(2)=1.0; //ARmodel ARXAr(thr,V0,nu0); //startati0 boolgohi=true;boolgolow=true; //certainperiod for(inti=ilow;i<ihi;i++){ rgr.set_subvector(0,Data.get_col(i)); Ar.bayes(rgr); } doubletll=Ar._tll(); //gohi do{ rgr.set_subvector(0,Data.get_col(++ihi)); Ar.bayes(rgr); if(Ar._tll()>tll)tll=Ar._tll(); elsegohi=false; }while(gohi); //golow do{ rgr.set_subvector(0,Data.get_col(--ilow)); Ar.bayes(rgr); if(Ar._tll()>tll)tll=Ar._tll(); elsegolow=false; }while(golow); vecth=Ar._epdf().mean(); //------------------Endofroutine----------------------------- //Createoutputvectors output[0]=mxCreateDoubleMatrix(1,th.length(),mxREAL); //ConverttheIT++formattoMatlabformatforoutput vec2mxArray(th,output[0]); if(n_output>1){ output[1]=mxCreateDoubleMatrix(1,1,mxREAL); double2mxArray(ilow,output[1]); } if(n_output>1){ output[2]=mxCreateDoubleMatrix(1,1,mxREAL); double2mxArray(ihi,output[2]); } }