【问题标题】:How to perform polynomial addition and multiplication using python 3.x?如何使用 python 3.x 执行多项式加法和乘法?
【发布时间】:2017-07-15 14:33:05
【问题描述】:

例如,3x^4 - 17x^2 - 3x + 5。多项式的每一项都可以表示为一对整数(系数、指数)。即[(3,4),(-17,2), (-3,1), (5,0)]

我们有以下约束来保证每个多项式都有唯一的表示:

  • 项按指数降序排列
  • 没有一个词的系数为零
  • 没有两个项具有相同的指数
  • 指数总是非负的

为以下操作编写 Python 函数:

addpoly(p1,p2)
multpoly(p1,p2)

一些例子:

>>> addpoly( [(4,3),(3,0)], [(-4,3),(2,1)] )
[(2, 1),(3, 0)]

解释:(4x^3 + 3) + (-4x^3 + 2x) = 2x + 3

>>> addpoly( [(2,1)], [(-2,1)] )
[]

解释:2x + (-2x) = 0

>>> multpoly( [(1,1),(-1,0)], [(1,2),(1,1),(1,0)] )
[(1, 3),(-1, 0)]

解释:(x - 1) * (x^2 + x + 1) = x^3 - 1

【问题讨论】:

  • 如果你被允许使用库,只需使用 sympy。无需重新发明轮子
  • @user2341726:OP 被要求提供一个实现:“为addpoly, multpoly 编写 Python 函数”

标签: python list python-3.x tuples polynomial-math


【解决方案1】:

你想定义一个函数,它接受任意数量的参数,形式为

[(4,3),(3,0)], [(-4,3),(2,1)]

addpoly 可以通过collections.defaultdict 轻松完成:

from collections import defaultdict

def addpoly(*polynoms):
    result = defaultdict(int)
    for polynom in polynoms:
        for factor, exponent in polynom:
            result[exponent] += factor
    return [(coeff, exponent) for exponent, coeff in result.items() if coeff]
In [68]: addpoly([(4,3),(3,0)],[(-4,3),(2,1)])
Out[68]: [(3, 0), (2, 1)]

【讨论】:

  • 我只使用了浮点数,因为从技术上讲,指数可能是浮点数。如果我的回答回答了您的问题,请采纳。
  • 此代码甚至会打印那些度数为零的元素。相反,我们需要一个空白列表。编译器显示:当输入为 addpoly([(4,3),(3,0)],[(-4,3),(2,1)]) 预期输出:[(2, 1), (3 , 0)] 实际输出 [(0, 3), (1, 2), (3, 0)] 和另一种情况:当输入为 addpoly([(2,1)],[(-2,1) ]) 预期输出 [] 实际输出 [(1, 0)]
  • 我对我的频繁编辑感到非常抱歉。我是新来的 :) 感谢您的支持!
  • 我知道该怎么做……但找不到方法。你能看看第二条评论,看看我们如何解决输出问题......
  • 如果我的回答回答了您的问题,请接受。
猜你喜欢
  • 2019-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多