Remove itermediate list. Expand docstring. (GH-102862)

This commit is contained in:
Raymond Hettinger 2023-03-20 20:40:04 -05:00 committed by GitHub
parent ef000eb3e2
commit 4075fe1d8d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 8 additions and 4 deletions

View File

@ -867,13 +867,17 @@ which incur interpreter overhead.
yield math.sumprod(kernel, window) yield math.sumprod(kernel, window)
def polynomial_eval(coefficients, x): def polynomial_eval(coefficients, x):
"Evaluate a polynomial at a specific value." """Evaluate a polynomial at a specific value.
# polynomial_eval([1, -4, -17, 60], x=2.5) --> 8.125 x³ -4x² -17x + 60
Computes with better numeric stability than Horner's method.
"""
# Evaluate x³ -4x² -17x + 60 at x = 2.5
# polynomial_eval([1, -4, -17, 60], x=2.5) --> 8.125
n = len(coefficients) n = len(coefficients)
if n == 0: if n == 0:
return x * 0 # coerce zero to the type of x return x * 0 # coerce zero to the type of x
powers = list(accumulate(repeat(x, n - 1), operator.mul, initial=1)) powers = accumulate(repeat(x, n - 1), operator.mul, initial=1)
return math.sumprod(coefficients, reversed(powers)) return math.sumprod(reversed(coefficients), powers)
def polynomial_from_roots(roots): def polynomial_from_roots(roots):
"""Compute a polynomial's coefficients from its roots. """Compute a polynomial's coefficients from its roots.