Go to the documentation of this file.00001
00002 #ifndef vpdfl_gaussian_h
00003 #define vpdfl_gaussian_h
00004 #ifdef VCL_NEEDS_PRAGMA_INTERFACE
00005 #pragma interface
00006 #endif
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include <vpdfl/vpdfl_pdf_base.h>
00018 #include <vnl/vnl_matrix.h>
00019 #include <vnl/vnl_vector.h>
00020 #include <vcl_iosfwd.h>
00021
00022
00023
00024 class vpdfl_gaussian : public vpdfl_pdf_base
00025 {
00026 vnl_matrix<double> evecs_;
00027 vnl_vector<double> evals_;
00028 double log_k_;
00029 void calcLogK();
00030
00031
00032
00033 double dx_sigma_dx(const vnl_vector<double>& x) const;
00034
00035 protected:
00036
00037
00038 mutable vnl_vector<double> dx_;
00039
00040
00041 mutable vnl_vector<double> b_;
00042
00043
00044 public:
00045
00046 vpdfl_gaussian();
00047
00048
00049 virtual ~vpdfl_gaussian();
00050
00051
00052
00053
00054 void set(const vnl_vector<double>& mean,
00055 const vnl_vector<double>& variance,
00056 const vnl_matrix<double>& evecs,
00057 const vnl_vector<double>& evals);
00058
00059
00060
00061
00062
00063
00064
00065
00066 virtual void set(const vnl_vector<double>& mean,
00067 const vnl_matrix<double>& evecs,
00068 const vnl_vector<double>& evals);
00069
00070
00071
00072
00073
00074
00075 void set(const vnl_vector<double>& mean,
00076 const vnl_matrix<double>& covar,
00077 double min_eval = 1e-6);
00078
00079
00080
00081 void set_mean(const vnl_vector<double>& mean);
00082
00083
00084
00085 const vnl_matrix<double>& eigenvecs() const { return evecs_; }
00086
00087
00088
00089 const vnl_vector<double>& eigenvals() const { return evals_; }
00090
00091
00092
00093
00094 vnl_matrix<double> covariance() const;
00095
00096
00097 double log_k() const { return log_k_; }
00098
00099
00100
00101 virtual vpdfl_sampler_base* new_sampler() const;
00102
00103
00104
00105
00106 virtual double log_p(const vnl_vector<double>& x) const;
00107
00108
00109 virtual void gradient(vnl_vector<double>& g,
00110 const vnl_vector<double>& x,
00111 double& p) const;
00112
00113
00114 virtual double log_prob_thresh(double pass_proportion) const;
00115
00116
00117
00118
00119
00120
00121
00122 virtual void nearest_plausible(vnl_vector<double>& x, double log_p_min) const;
00123
00124
00125 short version_no() const;
00126
00127
00128 virtual vcl_string is_a() const;
00129
00130
00131 virtual bool is_class(vcl_string const& s) const;
00132
00133
00134 virtual vpdfl_pdf_base* clone() const;
00135
00136
00137 virtual void print_summary(vcl_ostream& os) const;
00138
00139
00140 virtual void b_write(vsl_b_ostream& bfs) const;
00141
00142
00143
00144 virtual void b_read(vsl_b_istream& bfs);
00145 };
00146
00147 #endif // vpdfl_gaussian_h