877 const std::array<Number2, n_entries> &x,
878 const unsigned int n_derivatives,
879 std::array<Number2, n_entries> *values)
const
882 if (in_lagrange_product_form ==
true)
887 const unsigned int n_supp = lagrange_support_points.size();
888 const number weight = lagrange_weight;
889 switch (n_derivatives)
892 for (
unsigned int e = 0; e < n_entries; ++e)
893 values[0][e] = weight;
894 for (
unsigned int k = 1; k <= n_derivatives; ++k)
895 for (
unsigned int e = 0; e < n_entries; ++e)
897 for (
unsigned int i = 0; i < n_supp; ++i)
899 std::array<Number2, n_entries> v = x;
900 for (
unsigned int e = 0; e < n_entries; ++e)
901 v[e] -= lagrange_support_points[i];
909 for (
unsigned int k = n_derivatives; k > 0; --k)
910 for (
unsigned int e = 0; e < n_entries; ++e)
911 values[k][e] = (values[k][e] * v[e] + values[k - 1][e]);
912 for (
unsigned int e = 0; e < n_entries; ++e)
913 values[0][e] *= v[e];
918 number k_factorial = 2;
919 for (
unsigned int k = 2; k <= n_derivatives; ++k)
921 for (
unsigned int e = 0; e < n_entries; ++e)
922 values[k][e] *= k_factorial;
923 k_factorial *=
static_cast<number
>(k + 1);
935 std::array<Number2, n_entries> value;
936 for (
unsigned int e = 0; e < n_entries; ++e)
938 for (
unsigned int i = 0; i < n_supp; ++i)
939 for (
unsigned int e = 0; e < n_entries; ++e)
940 value[e] *= (x[e] - lagrange_support_points[i]);
942 for (
unsigned int e = 0; e < n_entries; ++e)
943 values[0][e] = value[e];
949 std::array<Number2, n_entries> value, derivative = {};
950 for (
unsigned int e = 0; e < n_entries; ++e)
952 for (
unsigned int i = 0; i < n_supp; ++i)
953 for (
unsigned int e = 0; e < n_entries; ++e)
955 const Number2 v = x[e] - lagrange_support_points[i];
956 derivative[e] = derivative[e] * v + value[e];
960 for (
unsigned int e = 0; e < n_entries; ++e)
962 values[0][e] = value[e];
963 values[1][e] = derivative[e];
970 std::array<Number2, n_entries> value, derivative = {},
972 for (
unsigned int e = 0; e < n_entries; ++e)
974 for (
unsigned int i = 0; i < n_supp; ++i)
975 for (
unsigned int e = 0; e < n_entries; ++e)
977 const Number2 v = x[e] - lagrange_support_points[i];
979 derivative[e] = derivative[e] * v + value[e];
983 for (
unsigned int e = 0; e < n_entries; ++e)
985 values[0][e] = value[e];
986 values[1][e] = derivative[e];
987 values[2][e] =
static_cast<number
>(2) *
second[e];
999 const unsigned int m = coefficients.size();
1000 std::vector<std::array<Number2, n_entries>> a(coefficients.size());
1001 for (
unsigned int i = 0; i < coefficients.size(); ++i)
1002 for (
unsigned int e = 0; e < n_entries; ++e)
1003 a[i][e] = coefficients[i];
1005 unsigned int j_factorial = 1;
1010 const unsigned int min_valuessize_m =
std::min(n_derivatives + 1, m);
1011 for (
unsigned int j = 0; j < min_valuessize_m; ++j)
1013 for (
int k = m - 2; k >=
static_cast<int>(j); --k)
1014 for (
unsigned int e = 0; e < n_entries; ++e)
1015 a[k][e] += x[e] * a[k + 1][e];
1016 for (
unsigned int e = 0; e < n_entries; ++e)
1017 values[j][e] =
static_cast<number
>(j_factorial) * a[j][e];
1019 j_factorial *= j + 1;
1023 for (
unsigned int j = min_valuessize_m; j <= n_derivatives; ++j)
1024 for (
unsigned int e = 0; e < n_entries; ++e)