10 vec_basic generate_fdiff_weights_vector(
const vec_basic &grid,
11 const unsigned max_deriv,
12 const RCP<const Basic> around)
30 const unsigned len_g = numeric_cast<unsigned>(grid.size());
31 const unsigned len_w = len_g * (max_deriv + 1);
32 RCP<const Basic> c1, c4, c5;
34 c4 =
sub(grid[0], around);
35 vec_basic weights(len_w);
37 for (
unsigned idx = 1; idx < len_w; ++idx)
39 for (
unsigned i = 1; i < len_g; ++i) {
40 const int mn = (i < max_deriv) ? i : max_deriv;
41 RCP<const Basic> c2 = one;
43 c4 =
sub(grid[i], around);
44 for (
unsigned j = 0; j < i; ++j) {
45 const RCP<const Basic> c3 =
sub(grid[i], grid[j]);
48 for (
int k = mn; k >= 1; --k) {
49 weights[i + k * len_g]
51 weights[i - 1 + (k - 1) * len_g]),
52 mul(c5, weights[i - 1 + k * len_g]))),
56 =
mul(minus_one,
div(
mul(c1,
mul(c5, weights[i - 1])), c2));
58 for (
int k = mn; k >= 1; --k) {
59 weights[j + k * len_g]
60 =
div(
sub(
mul(c4, weights[j + k * len_g]),
61 mul(
integer(k), weights[j + (k - 1) * len_g])),
64 weights[j] =
div(
mul(c4, weights[j]), c3);
Classes and functions relating to the binary operation of addition.
Main namespace for SymEngine package.
std::enable_if< std::is_integral< T >::value, RCP< const Integer > >::type integer(T i)
RCP< const Basic > mul(const RCP< const Basic > &a, const RCP< const Basic > &b)
Multiplication.
RCP< const Basic > sub(const RCP< const Basic > &a, const RCP< const Basic > &b)
Substracts b from a.
RCP< const Basic > div(const RCP< const Basic > &a, const RCP< const Basic > &b)
Division.