Я написал небольшой класс, инициализатор которого принимает в качестве аргумента словарь. Следующий словарь {2:3, 4:5, 6:7}
переводит на многочлен 3x^2 + 5x^4 + 7x^6
, поэтому ключи моего словаря являются показателями и его значениями являются коэффициенты.Умножая полиномы на Python с использованием словарей
Мне удалось реализовать сравнение двух полиномов в моем классе с использованием метода eq, и я могу их добавить. Вот мой код:
class Polynomial(object):
def __init__(self, polynom = {}):
self.polynom = polynom
self.poly_string = self.nicePolynom(polynom) #just a method that will make my output look nice
def __str__(self):
return self.poly_string # for debugging purposes
def coefficient(self, exponent):
"""
A small function that returns the coefficient of the corresponding exponent
i.e. if our Polynomial is P = 3x^9 then p.coefficient(9) return 3
"""
try:
return self.polynom[exponent]
except KeyError:
pass
def __add__(self,other):
"""
Overloading the + operator
Not the most elegant solution but easily understandable.
We check first if our exponent is present in both polynomials
then if its only present in one and the symmetric case, adding the result
to the dictionary add
"""
add = {}
for exponent in self.polynom:
if exponent in other.polynom:
add[exponent] = self.polynom[exponent] + other.polynom[exponent]
for exponent in self.polynom:
if exponent not in other.polynom:
add[exponent] = self.polynom[exponent]
for exponent in other.polynom:
if exponent not in self.polynom:
add[exponent] = other.polynom[exponent]
return add
def __mul__(self, other):
mult = {}
for exponent1 in self.polynom:
for exponent2 in other.polynom:
mult[exponent1 + exponent2] = self.coefficient(exponent1) * other.coefficient(exponent2)
return mult
Решающий шаг, и моя основная проблема заключается в том, что при размножении я хочу, чтобы использовать дополнение. Но я совершенно новичок в ООП, и я не вижу, как я могу инициализировать объект Polynom, на котором я могу выполнить арифметику добавления.
Если я умножаю многочлен сам по себе в тот момент, когда я получаю правильные показатели, но помимо начального и конечного членов все коэффициенты удаляются.
Коэффициенты отключены, потому что более одного термина в вашем расширении вносит один и тот же ответ в ответ, и вы переписываете запись «mult» с одним и тем же ключом экспонирования в этом случае ... например. что происходит, когда 'exponent1, exponent2 = 1,3', а затем позже,' exponent1, exponent2 = 2,2'? – xnx
Я согласен с этим @xnx, но я не вижу, как это исправить, есть ли простой способ предотвратить это с аргументом if/else? – Spaced
Если это учебное упражнение, то, во что бы то ни стало, пойти на это. Но если вы хотите использовать это для чего-то серьезного, мой совет заключается не в том, чтобы изобретать колесо, а просто для того, чтобы посмотреть на [sympy] (http://docs.sympy.org/latest/tutorial/intro.html), который очень хорошо разбирается в полиномах (между прочим). –