多项式嵌套乘法¶

也叫秦九韶算法

$$2x^4+3x^3-3x^2+5x-1$$

使用嵌套乘法

$$ x(x(x(x2+3)-3)+5)-1 $$

In [1]:
from IPython.display import display, Math


def show_math(polynomial_str):

    latex_polynomial = convert_to_latex(polynomial_str)
    display(Math(latex_polynomial))

def convert_to_latex(poly_str):
    latex_str = poly_str.replace("x^0", "").replace("x^1", "x")
    latex_str = latex_str.replace(" + -", " - ").replace(" + ", " + ")
    return latex_str.strip()
In [2]:
def nested_multi(a: list[float], x: float):

    n = len(a)

    polynomial_terms = []
    for i in range(n):
        polynomial_terms.append(f"{a[i]}x^{n - i - 1}")

    polynomial_str = " + ".join(polynomial_terms)
    show_math(polynomial_str)

    res = 0
    for i in range(n):
        res = res * x + a[i]

    return res

nested_multi([2, 3, -3, 5, -1], 2)
$\displaystyle 2x^4 + 3x^3 - 3x^2 + 5x - 1$
Out[2]:
53