28 #include <gsl/gsl_sf_pow_int.h>
35 namespace interpolation {
41 std::vector< std::vector<double> > positions,
42 std::vector< std::vector<double> > deriv_positions,
43 std::vector< std::vector<int> >& deriv_indices)
56 std::vector< std::vector<double> > positions,
57 std::vector< std::vector<double> > deriv_positions,
58 std::vector< std::vector<int> >& deriv_indices) {
59 int nCoeffs = positions.size();
61 for (
int i = 0; i < nCoeffs; ++i) {
64 h_inv_(i+1, j+1) = poly_vec[j];
67 for (
size_t i = 0; i < deriv_positions.size(); ++i) {
71 h_inv_(i+1+nCoeffs, j+1) = deriv_vec[j];
81 for (
size_t j = 0; j < point.size(); ++j)
82 square_vector[i] *= gsl_sf_pow_int(x[j], point[j]);
91 for (
int i = 0; i < square_deriv_nearby_points_size; ++i) {
92 for (
int j = 0; j < dim; ++j) {
99 deriv_vec[i] *= gsl_sf_pow_int(positions[j], power);
111 const std::vector< std::vector<double> >& values,
112 const std::vector< std::vector<double> >& deriv_values) {
130 int nCoeffs = values.size();
131 int nDerivs = deriv_values.size();
132 if (values.size()+deriv_values.size() != size_t(
n_poly_coeffs_)) {
134 "SolveFactory::PolynomialSolve",
135 "Values and derivatives over or under constrained"
139 if (values.size() != 0) {
140 valueDim = values[0].size();
141 }
else if (deriv_values.size() != 0) {
142 valueDim = deriv_values[0].size();
146 for (
size_t y_index = 0; y_index < values[0].size(); ++y_index) {
150 G(i+1) = values[i][y_index];
153 for (
int i = 0; i < nDerivs; ++i) {
154 G(i+nCoeffs+1) = deriv_values[i][y_index];
158 A(y_index+1, j+1) = A_vec(j+1);
SolveFactory(int polynomial_order, int smoothing_order, int point_dim, int value_dim, std::vector< std::vector< double > > positions, std::vector< std::vector< double > > deriv_positions, std::vector< std::vector< int > > &deriv_indices)
std::vector< double > MakeSquareVector(std::vector< double > position)
SquarePolynomialVector * PolynomialSolve(const std::vector< std::vector< double > > &values, const std::vector< std::vector< double > > &deriv_values)
void SetCoefficients(int pointDim, MMatrix< double > coeff)
std::vector< std::vector< int > > square_deriv_nearby_points_
SquarePolynomialVector describes a vector of multivariate polynomials.
std::vector< double > MakeSquareDerivVector(std::vector< double > position, std::vector< int > derivIndices)
std::vector< std::vector< int > > square_points_
SquarePolynomialVector square_temp_
void BuildHInvMatrix(std::vector< std::vector< double > > positions, std::vector< std::vector< double > > deriv_positions, std::vector< std::vector< int > > &deriv_indices)
static std::vector< std::vector< int > > getNearbyPointsSquares(int pointDim, int polyOrderLower, int polyOrderUpper)
void invert()
turns this matrix into its inverse
static unsigned int NumberOfPolynomialCoefficients(int pointDimension, int order)