使用 Python 列表计算多项式的乘积

Calculating the product of polynomials using Python lists

我正在尝试在 Python 中编写一个函数 polyprod(a,b),它接受两个列表的输入,然后输出一个列表。

该列表是一个多项式,列表中的条目对应于与该位置关联的 x 次幂的系数。因此,例如,这些列表将表示多项式如下:

[1,1,1] = 1 + x + x2, [0,2,6] = 2x + 6x2.

我希望我的函数采用任意两个这样的列表,并输出一个表示产品的列表,因此对于我们的示例,我们将得到:

polyprod([1,1,1], [0,2,6]) = [0,2,8,8,6], 因为 (1+x+x2)(2x+6x2) = 2x + 8x2 + 8x3 + 6x4.

我知道 Numpy 中的卷积函数,我试图用以下代码模拟它的作用(但没有成功)。我是 Python 的新手,我知道这可能是错误的。

def polyprod(a,v):
    prodav = [0]*(len(a)+len(v)-1)

    if len(v) > len(a):
        for n in range(len(a)):
            for m in range(n+1):
                prodav[n] += v[m]*a[n-m]

    for n in range(len(v)):
        for m in range(n+1):
            prodav[n] += a[m]*v[n-m]

这段代码有什么问题?我怎样才能只使用标准库得到正确的结果?

查看您的代码,您可以立即看到目标列表最右侧的索引在这些循环中永远不会获得值,因为索引 n 只会向上迭代到任一输入列表的长度。

要添加产品的索引由输入列表中的索引总和决定:

def polyprod(a,v):
    prodav = [0]*(len(a)+len(v)-1)

    for n in range(len(a)):
        for m in range(len(v)):
            prodav[n+m] += v[m]*a[n]

    return prodav

print(polyprod([1,1,1], [0,2,6])) # [0, 2, 8, 8, 6]