1

我已经在这个问题上工作了几个小时,但我不知道从哪里开始或做任何事情。我了解它背后的数学/逻辑,但我不知道将它很好地放入代码中。

这就是问题:

  1. 编写并测试一个函数multiply(self, other)返回两个多项式的乘积。使用一个循环(for 或 while);其中从上一个问题中调用 *multiply_by_one_term*。

这是我一开始设置的,我不记得它叫什么了:

class Polynomial:
    def __init__(self, coeffs=[0]):
        self.coeffs = coeffs

这是我所做的测试:

def multiply(self, other):
    """
      >>> p1 = Polynomial([1, 2])
      >>> p2 = Polynomial([3, 4])
      >>> p1.multiply(p2).coeffs
      [3, 10, 8]
    """

这是我需要调用的函数:

def multiply_by_one_term(self, a, exp):
    """       
      >>> p = Polynomial([2, 1, 3])
      >>> p.multiply_by_one_term(3, 2).coeffs
      [6, 3, 9, 0, 0]
      >>> p = Polynomial([2, 1, 3])
      >>> p.multiply_by_one_term(3, 0).coeffs
      [6, 3, 9]
    """

    return Polynomial([a*i for i in self.coeffs] + [0]*exp)

如果有人可以帮助我,我将不胜感激。在编程方面,我仍然是菜鸟,而且我不太了解。

4

3 回答 3

6

在数学上,我们最终将拥有的系数数量(或幂)应该是第一个多项式的幂加上第二个多项式的幂,因此我们生成了一个包含那么多零的列表。现在我们遍历第一个多项式的系数。在这里,我使用 enumerate 来跟踪我们当前所在的索引。这当然是假设每个数字是系数的幂与其指数相同。所以第 2 项中的数字将在 x^2 之前。

对于多项式一的每个系数,我们循环遍历多项式二的所有系数(多项式二的每个系数都需要与多项式一的每个系数相乘)。由此产生的力量将是指数的相加,这由final_coeffs[ind1 + ind2] += coef1 * coef2. 然后剩下的就是返回新的多项式对象。

意识到这里 p1 和 p2 是两个多项式对象。

def multiply(p1, p2):
    final_coeffs = [0] * (len(p2.coeffs)+len(p1.coeffs)-1)
    for ind1, coef1 in enumerate(p1.coeffs):
        for ind2, coef2 in enumerate(p2.coeffs):
            final_coeffs[ind1 + ind2] += coef1 * coef2
    return Polynomial(final_coeffs)
于 2013-08-08T01:14:59.097 回答
1

由于特定的限制,我假设这是一项任务。

我学到的乘法方法是这样的求和:

12*34 = 12*30+12*4

对于多项式,我们将其转换为:

(x+2)(3x+4) = (x+2)(3x)+(x+2)4

这很容易转化为添加所有结果

p1.multiply_by_one_term(p2.coeffs[i], len(p2.coeffs[i])-i-1)

这意味着你需要这样的东西:

# WARNING: This is not very idiomatic Python, but I can't think of a way to do it without indexes.
def multiply(self, other):
    subproducts = []
    for i in len(other.coeffs):
        subproducts.append(self.multiply_by_one_term(other.coeffs[i], len(other.coeffs)-i-1))
    add_subproducts_together(subproducts)

也应该有一些简单的方法可以将子产品添加在一起。如果没有,您可以通过添加每个类似的术语来编写它(记住您需要从右侧对齐)。

于 2013-08-08T01:19:13.340 回答
0

所以这就是我所做的:

def multiple_polynoms(a,b):
len_a=len(a)
len_b=len(b)
mult=[]
mult_dict={}
mult_len= len_a+len_b-1
for i in range(mult_len):
    mult.append(0.0)
for i in range(len_a):
    for c in range(len_b):
        multi=a[i]*b[c]
        place=i+c
        if place in mult_dict:
            mult_dict[place]+=multi
        else:
            mult_dict[place]=multi
for t in mult_dict:
    mult[t]= mult_dict[t]
return mult
于 2019-10-06T10:18:01.933 回答