00001 // $Id$ 00002 // Copyright (C) 2003 Klaas Gadeyne <first dot last at gmail dot com> 00003 // Wim Meeussen <wim dot meeussen at mech dot kuleuven dot be> 00004 // Tinne De Laet <tinne dot delaet at mech dot kuleuven dot be> 00005 // 00006 // This program is free software; you can redistribute it and/or modify 00007 // it under the terms of the GNU Lesser General Public License as published by 00008 // the Free Software Foundation; either version 2.1 of the License, or 00009 // (at your option) any later version. 00010 // 00011 // This program is distributed in the hope that it will be useful, 00012 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 // GNU Lesser General Public License for more details. 00015 // 00016 // You should have received a copy of the GNU Lesser General Public License 00017 // along with this program; if not, write to the Free Software 00018 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00019 // 00020 00021 #ifndef __LINEAR_SYSTEM_CONDITIONAL_GAUSSIAN__ 00022 #define __LINEAR_SYSTEM_CONDITIONAL_GAUSSIAN__ 00023 00024 #include "analyticconditionalgaussian_additivenoise.h" 00025 00026 namespace BFL 00027 { 00029 00035 class LinearAnalyticConditionalGaussian : public AnalyticConditionalGaussianAdditiveNoise 00036 { 00037 public: 00039 00048 LinearAnalyticConditionalGaussian(const vector<MatrixWrapper::Matrix> & ratio, 00049 const Gaussian& additiveNoise); 00050 00052 00057 LinearAnalyticConditionalGaussian(const MatrixWrapper::Matrix& a, const Gaussian& additiveNoise); 00058 00059 // Default copy constructor will do 00060 00062 virtual ~LinearAnalyticConditionalGaussian(); 00063 00065 virtual LinearAnalyticConditionalGaussian* Clone() const; 00066 00067 // implement virtual functions 00068 virtual MatrixWrapper::ColumnVector ExpectedValueGet() const; 00069 virtual MatrixWrapper::Matrix dfGet(unsigned int i) const; 00070 00072 00078 virtual void NumConditionalArgumentsSet(unsigned int numconditionalarguments); 00079 00081 00089 void MatrixSet(unsigned int i, const MatrixWrapper::Matrix& m); 00090 00092 00097 const MatrixWrapper::Matrix& MatrixGet(unsigned int i) const; 00098 00099 private: 00100 00101 vector<MatrixWrapper::Matrix> _ratio; 00102 // variables to avoid allocation during expectedValueGet call 00103 mutable MatrixWrapper::ColumnVector _mean_temp; 00104 mutable MatrixWrapper::ColumnVector _arg; 00105 00106 }; 00107 00108 } // End namespace BFL 00109 00110 #endif // __LINEAR_SYSTEM_CONDITIONAL_GAUSSIAN__