从SymPy中的给定多项式中提取系数和相应的单项式

时间:2018-05-28 09:59:39

标签: python python-3.x sympy polynomials

给定符号多元多项式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()中构建的。但是,我在获取单项式时遇到了麻烦。这里的build in函数返回一个指数列表,例如,在上面的例子中我们得到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_symbolsfree_symbols_in_domain,它们会返回集合{a, b, c, x, y}{a, b, c}。因此,通过取得差异,可以获得设置 {x, y}

然而,我们面临的问题是集合是无序的,因此将其转换为列表可能会根据变量的数量以不同的方式搞乱订单。

我在这里有点不知所措。有什么提示吗?

1 个答案:

答案 0 :(得分:1)

属性from sympy import * x, y = symbols('x y') p = Poly(x**3 + 2*x**2 + 3*x*y + 4*y**2 + 5*y**3, x, y) q = Poly(x**3 + 2*x**2 + 3*x*y + 4*y**2 + 5*y**3, y, x) print(p.gens) # (x, y) print(q.gens) # (y, x) generators 的缩写)包含多项式中的变量元组。

[prod(x**k for x, k in zip(p.gens, mon)) for mon in p.monoms()]

所以,

[x**3, x**2, x*y, y**3, y**2]

返回watcher.Path = directory name; watcher.NotifyFilter = NotifyFilters.LastWrite; watcher.Filter = "*.xls"; watcher.Changed += OnDirectoryChange; watcher.Error += OnError; watcher.EnableRaisingEvents = true; // Watch only files not subdirectories. watcher.IncludeSubdirectories = false;