862 const std::array<Number2, n_entries> &x,
863 const unsigned int n_derivatives,
864 std::array<Number2, n_entries> * values)
const
867 if (in_lagrange_product_form ==
true)
872 const unsigned int n_supp = lagrange_support_points.size();
873 const number weight = lagrange_weight;
874 switch (n_derivatives)
877 for (
unsigned int e = 0; e < n_entries; ++e)
878 values[0][e] = weight;
879 for (
unsigned int k = 1; k <= n_derivatives; ++k)
880 for (
unsigned int e = 0; e < n_entries; ++e)
882 for (
unsigned int i = 0; i < n_supp; ++i)
884 std::array<Number2, n_entries> v = x;
885 for (
unsigned int e = 0; e < n_entries; ++e)
886 v[e] -= lagrange_support_points[i];
894 for (
unsigned int k = n_derivatives; k > 0; --k)
895 for (
unsigned int e = 0; e < n_entries; ++e)
896 values[k][e] = (values[k][e] * v[e] + values[k - 1][e]);
897 for (
unsigned int e = 0; e < n_entries; ++e)
898 values[0][e] *= v[e];
903 number k_factorial = 2;
904 for (
unsigned int k = 2; k <= n_derivatives; ++k)
906 for (
unsigned int e = 0; e < n_entries; ++e)
907 values[k][e] *= k_factorial;
908 k_factorial *=
static_cast<number
>(k + 1);
920 std::array<Number2, n_entries> value;
921 for (
unsigned int e = 0; e < n_entries; ++e)
923 for (
unsigned int i = 0; i < n_supp; ++i)
924 for (
unsigned int e = 0; e < n_entries; ++e)
925 value[e] *= (x[e] - lagrange_support_points[i]);
927 for (
unsigned int e = 0; e < n_entries; ++e)
928 values[0][e] = value[e];
934 std::array<Number2, n_entries> value, derivative = {};
935 for (
unsigned int e = 0; e < n_entries; ++e)
937 for (
unsigned int i = 0; i < n_supp; ++i)
938 for (
unsigned int e = 0; e < n_entries; ++e)
940 const Number2 v = x[e] - lagrange_support_points[i];
941 derivative[e] = derivative[e] * v + value[e];
945 for (
unsigned int e = 0; e < n_entries; ++e)
947 values[0][e] = value[e];
948 values[1][e] = derivative[e];
955 std::array<Number2, n_entries> value, derivative = {},
957 for (
unsigned int e = 0; e < n_entries; ++e)
959 for (
unsigned int i = 0; i < n_supp; ++i)
960 for (
unsigned int e = 0; e < n_entries; ++e)
962 const Number2 v = x[e] - lagrange_support_points[i];
964 derivative[e] = derivative[e] * v + value[e];
968 for (
unsigned int e = 0; e < n_entries; ++e)
970 values[0][e] = value[e];
971 values[1][e] = derivative[e];
972 values[2][e] =
static_cast<number
>(2) *
second[e];
984 const unsigned int m = coefficients.size();
985 std::vector<std::array<Number2, n_entries>> a(coefficients.size());
986 for (
unsigned int i = 0; i < coefficients.size(); ++i)
987 for (
unsigned int e = 0; e < n_entries; ++e)
988 a[i][e] = coefficients[i];
990 unsigned int j_factorial = 1;
995 const unsigned int min_valuessize_m =
std::min(n_derivatives + 1, m);
996 for (
unsigned int j = 0; j < min_valuessize_m; ++j)
998 for (
int k = m - 2; k >=
static_cast<int>(j); --k)
999 for (
unsigned int e = 0; e < n_entries; ++e)
1000 a[k][e] += x[e] * a[k + 1][e];
1001 for (
unsigned int e = 0; e < n_entries; ++e)
1002 values[j][e] =
static_cast<number
>(j_factorial) * a[j][e];
1004 j_factorial *= j + 1;
1008 for (
unsigned int j = min_valuessize_m; j <= n_derivatives; ++j)
1009 for (
unsigned int e = 0; e < n_entries; ++e)