root/library/bdm/mex/mex_BM.h @ 996

Revision 944, 1.9 kB (checked in by smidl, 14 years ago)

Doc + new examples

  • Property svn:eol-style set to native
Line 
1#include <mex/mex_parser.h>
2#include <mex/mex_pdf.h>
3class mexBM: public BM{
4        protected:
5                mxArray *data;
6                mexEpdf est;
7        public:
8                mexBM() {};
9                void from_setting(const Setting &S)  {
10                        Setting &So=S["object"];
11                        data = (mxArray*)long(So);
12                } 
13                void validate() {
14                        mxArray *tmp;
15                        mexCallMATLAB(1, &tmp, 1, &data,  "validate");
16                        // new object is in tmp
17                        data = tmp;
18                       
19                        mexCallMATLAB(1, &tmp, 1, &data, "dimensions");
20                        vec v=mxArray2vec(tmp);
21                        if (v.length()<3) {bdm_error("Three dimensions are expected in mexBM.dimensions");}
22                        set_dim(v(0));
23                        dimy = v(1);
24                        dimc = v(2);
25                       
26                        mexCallMATLAB(1, &tmp, 1, &data, "get_rv");
27                        UImxArray rvtmp(tmp);
28                        shared_ptr<RV> r = UI::build<RV>(rvtmp);
29                        set_rv(*r);
30                       
31                        mexCallMATLAB(1, &tmp, 1, &data, "get_rvc");
32                        UImxArray rvtmpc(tmp);
33                        shared_ptr<RV> rc = UI::build<RV>(rvtmpc);
34                        rvtmpc.writeFile("tmpc.cfg");
35                        rvc=*rc;
36                       
37                        mexCallMATLAB(1, &tmp, 1, &data, "get_rvy");
38                        UImxArray rvtmpy(tmp);
39                        rvtmpy.writeFile("tmpy.cfg");
40                        shared_ptr<RV> ry = UI::build<RV>(rvtmpy);
41                        yrv = *ry;
42                       
43                }
44                void bayes(const vec &dt, const vec &cond) {
45                        mxArray *tmp;
46                        mxArray *in[3];
47                        in[0]=data;
48                        in[1]=mxCreateDoubleMatrix(dt.length(),1,mxREAL);
49                        vec2mxArray(dt,in[1]);
50                        in[2]=mxCreateDoubleMatrix(cond.length(),1,mxREAL);
51                        vec2mxArray(cond,in[2]);
52                       
53                        mexCallMATLAB(1, &tmp, 3, in, "bayes");
54                        data = tmp;
55                }
56                epdf* predictor(const vec &cond) const {
57                        mxArray *tmp;
58                        mxArray *in[3];
59                        in[0]=data;
60                        in[1]=mxCreateDoubleMatrix(cond.length(),1,mxREAL);
61                        vec2mxArray(cond,in[1]);
62                       
63                        mexCallMATLAB(1, &tmp, 3, in, "predictor");
64                       
65                        UImxArray uitmp(tmp);
66                        shared_ptr<epdf> pred = UI::build<epdf>(uitmp);
67                        return pred.get();
68                        //
69                }
70                const epdf& posterior() const {
71                        mxArray *tmp;
72                        mexCallMATLAB(1, &tmp, 1,(mxArray **) &data,  "posterior");
73                        const_cast<mexEpdf*>(&est)->set_data(tmp);
74                        return est;
75                }
76};
77UIREGISTER(mexBM);
Note: See TracBrowser for help on using the browser.