-from sage.all import *
-product = prod
-
+r"""
+Elementary interpolation methods. This only needs Sage to support
+symbolic constants like ``pi``, and the lazy use of symbolic
+expressions like ``x**2`` to represent the function that squares its
+one argument.
+"""
def lagrange_denominator(k, xs):
"""
The product of all xs[j] with j != k.
"""
- return product( xs[k] - xs[j] for j in range(len(xs)) if j != k )
+ from sage.misc.all import prod # math.prod doesn't work on symbolics!
+ return prod( xs[k] - xs[j] for j in range(len(xs)) if j != k )
def lagrange_coefficient(k, x, xs):
True
"""
- ls = [ lagrange_coefficient(k, x, xs) for k in range(len(xs)) ]
- return sum( ys[k] * ls[k] for k in range(len(xs)) )
+ from math import sumprod
+ ls = ( lagrange_coefficient(k, x, xs) for k in range(len(xs)) )
+ return sumprod(ys, ls)
f(x1)/(x1 - x2) - f(x2)/(x1 - x2)
"""
+ from math import sumprod
coeffs = divided_difference_coefficients(xs)
- v_cs = vector(coeffs)
- v_ys = vector(ys)
- return v_cs.dot_product(v_ys)
+ return sumprod(coeffs,ys)
def newton_polynomial(x, xs, ys):
A symbolic expression in one variable, `x`.
"""
-
- return product( (x - xj) for xj in xs )
+ from sage.misc.all import prod # math.prod doesn't work on symbolics!
+ return prod( (x - xj) for xj in xs )