/** @note Because of the virtual public inheritance, we create the Pdf baseclass ourselves */ CondGausAddNoise::CondGausAddNoise(const Gaussian& additiveNoise, int num_conditional_arguments) : AnalyticConditionalGaussian(additiveNoise.DimensionGet(), num_conditional_arguments) , _additiveNoise_Mu (additiveNoise.ExpectedValueGet()) , _additiveNoise_Sigma(additiveNoise.CovarianceGet()) {}
// constructor NonLinearAnalyticConditionalGaussian_Ginac::NonLinearAnalyticConditionalGaussian_Ginac (const GiNaC::matrix& func, const vector<GiNaC::symbol>& u, const vector<GiNaC::symbol>& x, const Gaussian& additiveNoise, const vector<GiNaC::symbol>& cond ) :AnalyticConditionalGaussianAdditiveNoise(additiveNoise,3), func_sym (func), cond_sym (cond), u_sym (u), x_sym (x), cond_size (cond_sym.size()), u_size (u_sym.size()), x_size (x_sym.size()), func_size (func_sym.rows()), dfunc_dcond (cond_size), dfunc_dx (x_size) { // test for consistent input assert (func_sym.cols() == 1); assert (additiveNoise.DimensionGet() == cond_size); // derive func to cond for (unsigned int i=0; i < cond_size; i++) dfunc_dcond[i] = func_sym.diff(cond_sym[i]); // derive func to x for (unsigned int i=0; i < x_size; i++) dfunc_dx[i] = func_sym.diff(x_sym[i]); }