当前位置: 首页 > 知识库问答 >
问题:

如何计算两个多项式的和?

通宾白
2023-03-14

例如3x^4-17x^2-3x+5。多项式的每个项可以表示为一对整数(系数、指数)。然后,多项式本身是这样的对的列表,如
[(3,4),(-17,2),(-3,1),(5,0)]所示。

零多项式0表示为空列表[],因为它没有具有非零系数的项。

我想写两个函数,用元组(系数、指数)的相同表示形式对两个输入多项式进行相加和相乘:

    null

>

  • addpoly([(4,3),(3,0)],[(-4,3),(2,1)])
    应该给出[2,1),(3,0)]

    addpoly([(2,1)],[(-2,1)])
    应该给出[]

    multpoly([(1,1),(-1,0)],[(1,2),(1,1),(1,0)])
    应该给出[(1,3),(-1,0)]

    这里有一些东西,我开始了,但完全被打动了!

    def addpoly(p1, p2):
        (coeff1, exp1) = p1
        (coeff2, exp2) = p2
        if exp1 == exp2:
            coeff3 = coeff1 + coeff2
    
  • 共有1个答案

    通啸
    2023-03-14

    正如评论中所建议的那样,把多项式表示成指数的多组要简单得多。

    在Python中,最接近多集的是计数器数据结构。使用将指数映射到系数的计数器(甚至只是一个普通字典)将自动合并具有相同指数的条目,就像您在编写简化多项式时所期望的那样。

    您可以使用计数器执行操作,然后在使用如下函数完成后转换回对列表表示形式:

    def counter_to_poly(c):
        p = [(coeff, exp) for exp, coeff in c.items() if coeff != 0]
        # sort by exponents in descending order
        p.sort(key = lambda pair: pair[1], reverse = True)
        return p
    
    def addpoly(p, q):
        r = collections.Counter()
    
        for coeff, exp in (p + q):
            r[exp] += coeff
    
        return counter_to_poly(r)
    
    def mulpoly(p, q):
        r = collections.Counter()
    
        for (c1, e1), (c2, e2) in itertools.product(p, q):
            r[e1 + e2] += c1 * c2
    
        return counter_to_poly(r)
    
     类似资料:
    • 问题内容: 说,有两个哈希集,如何计算它们的交集? 问题答案: 使用以下方法: 如果要保留集合,请创建一个新集合以保存交集: 该的的说,这正是你想要的: 仅保留此集合中包含在指定集合中的元素(可选操作)。换句话说,从该集合中删除所有未包含在指定集合中的元素。如果指定的集合也是一个集合,则此操作将有效地修改此集合,以使其值为两个集合的交集。

    • 我正在开发一个修改过的Mastermind游戏,我需要比较猜测和代码数组,并计算正确位数的数量。 它会一直工作,直到代码数组中有重复的数字。我知道这与第二个for循环和从正确的数字中减去有关。有没有办法只用循环和基本知识来修复它?

    • 本文向大家介绍python不使用for计算两组、多个矩形两两间的iou方式,包括了python不使用for计算两组、多个矩形两两间的iou方式的使用技巧和注意事项,需要的朋友参考一下 解决问题: 不使用for计算两组、多个矩形两两间的iou 使用numpy广播的方法,在python程序中并不建议使用for语句,python中的for语句耗时较多,如果使用numpy广播的思想将会提速不少。 代码:

    • 我正在尝试使用一个函数从pandas数据帧中的多个列计算多个列。该函数接受三个参数-a-、-b-和-c-,并返回三个计算值-sum-、-prod-和-quot-。在我的pandas数据框架中,我有三个列-a-、-b-和-c-我想从中计算列-sum-、-prod-和-quot-。 我所做的映射只有在正好有三行时才起作用。我不知道出了什么问题,尽管我认为这与选择正确的轴有关。有人能解释一下发生了什么,

    • 问题内容: 如何在Java中计算两个角度量度(以度为单位)的差,使结果在[0°,180°]范围内? 例如: 问题答案: /* * Shortest distance (angular) between two angles. * It will be in range [0, 180]. / public static int distance(int alpha, int beta) { int