00001 #include <estim/arx.h>
00002 #include <itpp/itmex.h>
00003 #include <mex/config2mxstruct.h>
00004 #include "mex_parser.h"
00005
00006 namespace bdm {
00015 using namespace bdm;
00016
00018 class mexEpdf: public epdf{
00019 protected:
00021 string name;
00023 mxArray *data;
00024 public:
00025 mexEpdf() {};
00026 void from_setting(const Setting &S) {
00027 name = (const char *) S["name"];
00028 UImxConfig conf(S);
00029 data = mxDuplicateArray(conf.mxconfig);
00030
00031
00032
00033
00034
00035 }
00036 vec mean() const {
00037 mxArray *tmp;
00038 string fname = name+"_mean";
00039 mexCallMATLAB(1, &tmp, 1, (mxArray **) &data, fname.c_str());
00040 return mxArray2vec(tmp);
00041 }
00042 };
00043 UIREGISTER(mexEpdf);
00044
00046 class mexBM: public BM{
00047 protected :
00049 string name;
00051 mexEpdf est;
00053 mxArray *data;
00054 public:
00055 mexBM() {}
00056
00058 mxArray *get_data() {
00059
00060 return mxDuplicateArray(data);
00061 }
00062
00063 void from_setting(const Setting &S) {
00064 BM::from_setting(S);
00065 name = (const char *) S["name"];
00066 UImxConfig conf(S);
00067 data = mxDuplicateArray(conf.mxconfig);
00068
00069
00070
00071
00072
00073
00074 Setting &posterior = S["posterior"];
00075 est.from_setting(posterior);
00076 }
00077 void bayes(const vec &dt) {
00078
00079 mxArray *tmp, *old;
00080 mxArray *in[2];
00081 in[0] = data;
00082 in[1] = mxCreateDoubleMatrix(dt.size(), 1, mxREAL);
00083 vec2mxArray(dt, in[1]);
00084 mexCallMATLAB(1, &tmp, 2, in, (name+"_bayes").c_str());
00085 old = data;
00086 data = mxDuplicateArray(tmp);
00087 if (old) mxDestroyArray(old);
00088 if (tmp) mxDestroyArray(tmp);
00089
00090 }
00092 const mexEpdf& posterior() const {
00093 return est;
00094 }
00095 };
00096 UIREGISTER(mexBM);
00097
00098 }