24 #ifndef _PARAMETRIZEDFUNCTION_HPP_
25 #define _PARAMETRIZEDFUNCTION_HPP_
32 #include "boost/numeric/ublas/vector.hpp"
33 #if (BOOST_VERSION/100) >= 1064
34 #include "boost/serialization/array_wrapper.hpp"
36 #include "boost/numeric/ublas/matrix.hpp"
37 #include "boost/numeric/ublas/io.hpp"
38 #include "boost/numeric/ublas/matrix_proxy.hpp"
39 namespace ublas = boost::numeric::ublas;
49 template<
typename value_type>
54 virtual value_type
operator()(
double x,
const ublas::vector<double>& p)
const = 0;
55 virtual ublas::vector<value_type>
dp(
double x,
const ublas::vector<double>& p)
const = 0;
56 virtual ublas::matrix<value_type>
dp2(
double x,
const ublas::vector<double>& p)
const = 0;
63 template<
typename value_type>
69 typedef std::vector<Datum>
Data;
80 for (
typename Data::const_iterator it=
data_.begin(); it!=
data_.end(); ++it)
81 result +=
norm(std::complex<double>(f_(it->x,p) - it->y));
85 ublas::vector<double>
dp(
const ublas::vector<double>& p)
const
89 for (
typename Data::const_iterator it=
data_.begin(); it!=
data_.end(); ++it)
91 std::complex<double> diffconj =
conj(std::complex<double>(f_(it->x,p) - it->y));
92 result += 2 * real(diffconj*f_.dp(it->x,p));
97 ublas::matrix<double>
dp2(
const ublas::vector<double>& p)
const
101 for (
typename Data::const_iterator it=
data_.begin(); it!=
data_.end(); ++it)
103 std::complex<double> diffconj =
conj(std::complex<double>(f_(it->x, p) - it->y));
104 ublas::vector<value_type>
dp = f_.dp(it->x,p);
105 ublas::matrix<value_type>
dp2 = f_.dp2(it->x,p);
106 result += 2 * real(diffconj*
dp2 + outer_prod(
conj(
dp),
dp));
121 #endif // _PARAMETRIZEDFUNCTION_HPP_