24 #ifndef _PARAMETRIZEDFUNCTION_HPP_
25 #define _PARAMETRIZEDFUNCTION_HPP_
32 #include "boost/numeric/ublas/vector.hpp"
33 #include "boost/numeric/ublas/matrix.hpp"
34 #include "boost/numeric/ublas/io.hpp"
35 #include "boost/numeric/ublas/matrix_proxy.hpp"
36 namespace ublas = boost::numeric::ublas;
46 template<
typename value_type>
51 virtual value_type
operator()(
double x,
const ublas::vector<double>& p)
const = 0;
52 virtual ublas::vector<value_type>
dp(
double x,
const ublas::vector<double>& p)
const = 0;
53 virtual ublas::matrix<value_type>
dp2(
double x,
const ublas::vector<double>& p)
const = 0;
60 template<
typename value_type>
66 typedef std::vector<Datum>
Data;
77 for (
typename Data::const_iterator it=
data_.begin(); it!=
data_.end(); ++it)
78 result +=
norm(std::complex<double>(f_(it->x,p) - it->y));
82 ublas::vector<double>
dp(
const ublas::vector<double>& p)
const
86 for (
typename Data::const_iterator it=
data_.begin(); it!=
data_.end(); ++it)
88 std::complex<double> diffconj =
conj(std::complex<double>(f_(it->x,p) - it->y));
89 result += 2 * real(diffconj*f_.dp(it->x,p));
94 ublas::matrix<double>
dp2(
const ublas::vector<double>& p)
const
98 for (
typename Data::const_iterator it=
data_.begin(); it!=
data_.end(); ++it)
100 std::complex<double> diffconj =
conj(std::complex<double>(f_(it->x, p) - it->y));
101 ublas::vector<value_type>
dp = f_.dp(it->x,p);
102 ublas::matrix<value_type>
dp2 = f_.dp2(it->x,p);
103 result += 2 * real(diffconj*dp2 + outer_prod(
conj(dp),dp));
118 #endif // _PARAMETRIZEDFUNCTION_HPP_