00001 #ifndef INDII_ML_FILTER_LINEARMODEL_HPP
00002 #define INDII_ML_FILTER_LINEARMODEL_HPP
00003
00004 #include "../aux/matrix.hpp"
00005 #include "../aux/vector.hpp"
00006
00007 #include "RauchTungStriebelSmootherModel.hpp"
00008 #include "KalmanSmootherModel.hpp"
00009
00010 namespace indii {
00011 namespace ml {
00012 namespace filter {
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 class LinearModel : public RauchTungStriebelSmootherModel<unsigned int>,
00040 public KalmanSmootherModel<unsigned int> {
00041 public:
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051 LinearModel(indii::ml::aux::matrix& A, indii::ml::aux::matrix& G,
00052 indii::ml::aux::symmetric_matrix& Q, indii::ml::aux::matrix& C,
00053 indii::ml::aux::symmetric_matrix& R);
00054
00055
00056
00057
00058 virtual ~LinearModel();
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068 virtual indii::ml::aux::GaussianPdf p_xtnp1_ytn(
00069 const indii::ml::aux::GaussianPdf& p_xtn_ytn, const unsigned int delta);
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086 virtual indii::ml::aux::GaussianPdf p_xtnp1_ytnp1(
00087 const indii::ml::aux::GaussianPdf& p_xtnp1_ytn,
00088 const indii::ml::aux::vector& ytnp1, const unsigned int delta);
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102 virtual indii::ml::aux::GaussianPdf p_y_x(
00103 const indii::ml::aux::GaussianPdf& p_x);
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120 virtual indii::ml::aux::GaussianPdf p_xtn_ytT(
00121 const indii::ml::aux::GaussianPdf& p_xtnp1_ytT,
00122 const indii::ml::aux::GaussianPdf& p_xtnp1_ytn,
00123 const indii::ml::aux::GaussianPdf& p_xtn_ytn,
00124 const unsigned int delta);
00125
00126 virtual indii::ml::aux::GaussianPdf p_xtnm1_ytn(
00127 const indii::ml::aux::GaussianPdf& p_xtn_ytn, const unsigned int delta);
00128
00129 virtual indii::ml::aux::GaussianPdf p_xtnm1_ytnm1(
00130 const indii::ml::aux::GaussianPdf& p_xtnm1_ytn,
00131 const indii::ml::aux::vector& ytnm1, const unsigned int delta);
00132
00133 private:
00134
00135
00136
00137 const unsigned int N;
00138
00139
00140
00141
00142 const unsigned int M;
00143
00144
00145
00146
00147 indii::ml::aux::matrix A;
00148
00149
00150
00151
00152 indii::ml::aux::matrix AT;
00153
00154
00155
00156
00157 indii::ml::aux::matrix G;
00158
00159
00160
00161
00162 indii::ml::aux::matrix GT;
00163
00164
00165
00166
00167 indii::ml::aux::symmetric_matrix Q;
00168
00169
00170
00171
00172 indii::ml::aux::matrix C;
00173
00174
00175
00176
00177 indii::ml::aux::matrix CT;
00178
00179
00180
00181
00182 indii::ml::aux::symmetric_matrix R;
00183
00184
00185
00186
00187 indii::ml::aux::matrix AI;
00188
00189 };
00190
00191 }
00192 }
00193 }
00194
00195 #endif
00196