Учитывая символический многомерный полином P
, мне нужно извлечь его коэффициенты и соответствующие одночлены в виде списков:
def poly_decomp(P):
....
return coeffs, monoms
, так что P
является точечным произведениемкоэффициенты и мономы, например, если P(x,y) = ax**2 + bxy + cy**2
, то мы должны получить coeffs = [a, b, c]
и monoms = [x**2, x*y, y**2]
.
Получить коэффициенты легко, поскольку функция встроена в coeffs = P.coeffs()
.Однако у меня проблемы с получением мономов.Здесь встроенная функция возвращает список показателей, например, в приведенном выше примере мы получили бы P.monoms() = [(2,0),(1,1),(0,2)]
.
Очевидно, что идея, при условии списка переменных var=[x,y]
, сделать что-то вроде
powers = P.monoms()
monoms = [sympy.prod(x**k for x,k in zip(var, mon)) for mon in powers ]
Однако класс полиномов, похоже, не предлагает функцию, которая возвращает список переменных.Все, что я мог найти, это методы free_symbols
и free_symbols_in_domain
, которые возвращают множества {a, b, c, x, y}
и {a, b, c}
.Таким образом, взяв их различие, можно получить набор {x, y}
.
Однако тогда мы сталкиваемся с проблемой, что наборы неупорядочены, следовательно, преобразование его в список может испортитьПорядок по-разному в зависимости от количества переменных.
Я в некотором роде в недоумении.Любые советы?