Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 多元多项式的一个系数的最佳分离方法_Python_Sympy_Symbolic Math - Fatal编程技术网

Python 多元多项式的一个系数的最佳分离方法

Python 多元多项式的一个系数的最佳分离方法,python,sympy,symbolic-math,Python,Sympy,Symbolic Math,我有一个多元多项式(在一般情况下是许多变量),它的系数列出了一些我需要读取的数据,但它似乎不是一个很好的方法 collect函数似乎是一个正确的想法,但当您将它与多个变量一起使用时,它实际上并不会给出单个的单项式,而是根据您列出的变量顺序对单项式进行奇怪的分组 有人知道这样做的方法吗?列出了大量处理系数的方法。例如: >>> import sympy >>> x,y,z = sympy.symbols('x,y,z') >>> p = sym

我有一个多元多项式(在一般情况下是许多变量),它的系数列出了一些我需要读取的数据,但它似乎不是一个很好的方法

collect
函数似乎是一个正确的想法,但当您将它与多个变量一起使用时,它实际上并不会给出单个的单项式,而是根据您列出的变量顺序对单项式进行奇怪的分组

有人知道这样做的方法吗?

列出了大量处理系数的方法。例如:

>>> import sympy
>>> x,y,z = sympy.symbols('x,y,z')
>>> p = sympy.poly((x+2*y-z)**3)
>>> p.coeffs()
[1, 6, -3, 12, -12, 3, 8, -12, 6, -1]
这些是按字典顺序排列的非零系数。要按匹配顺序查看单项式,请使用

>>> p.monoms()
[(3, 0, 0), (2, 1, 0), (2, 0, 1), (1, 2, 0), (1, 1, 1), (1, 0, 2), (0, 3, 0), (0, 2, 1), (0, 1, 2), (0, 0, 3)]
要获得特定单项式的系数,请使用

>>> p.coeff_monomial(x**2*y)
6
下面列出了许多处理系数的方法。例如:

>>> import sympy
>>> x,y,z = sympy.symbols('x,y,z')
>>> p = sympy.poly((x+2*y-z)**3)
>>> p.coeffs()
[1, 6, -3, 12, -12, 3, 8, -12, 6, -1]
这些是按字典顺序排列的非零系数。要按匹配顺序查看单项式,请使用

>>> p.monoms()
[(3, 0, 0), (2, 1, 0), (2, 0, 1), (1, 2, 0), (1, 1, 1), (1, 0, 2), (0, 3, 0), (0, 2, 1), (0, 1, 2), (0, 0, 3)]
要获得特定单项式的系数,请使用

>>> p.coeff_monomial(x**2*y)
6

多项式的单项式按生成器出现的顺序列出(该顺序由用户控制):

查询以获取系数时,可以使用单项式元组或表达式:

>>> Poly(x + 3*y**2, x, y).coeff_monomial(y**2)
3
>>> Poly(x + 3*y**2, x, y).coeff_monomial((0, 2))
3
通过将多边形转换为表达式,然后使用
as\u coverties\u dict
方法,可以以单项式表达式形式获得不同单项式的所有系数字典:

>>> p = Poly((x+2*y-z)**3)
>>> p.as_expr().as_coefficients_dict()
defaultdict(<class 'int'>, {
x**3: 1, z**3: -1, y**3: 8, y**2*z: -12, x**2*z: -3,
x*z**2: 3, x**2*y: 6, y*z**2: 6, x*y**2: 12, x*y*z: -12})
这可以转化为defaultdict,对于一个不存在的单项式,它会给出0,并且:

>>> defaultdict(int, _)
defaultdict(<class 'int'>, {(3, 0, 0): 1, (2, 1, 0): 6, (2, 0, 1): -3,
(1, 2, 0): 12, (1, 1, 1): -12, (1, 0, 2): 3, (0, 3, 0): 8, (0, 2, 1): -12,
(0, 1, 2): 6, (0, 0, 3): -1})
>>defaultdict(int,uux)
defaultdict(,{(3,0,0):1,(2,1,0):6,(2,0,1):-3,
(1, 2, 0): 12, (1, 1, 1): -12, (1, 0, 2): 3, (0, 3, 0): 8, (0, 2, 1): -12,
(0, 1, 2): 6, (0, 0, 3): -1})

多项式的单项式按生成器出现的顺序列出(且顺序由用户控制):

查询以获取系数时,可以使用单项式元组或表达式:

>>> Poly(x + 3*y**2, x, y).coeff_monomial(y**2)
3
>>> Poly(x + 3*y**2, x, y).coeff_monomial((0, 2))
3
通过将多边形转换为表达式,然后使用
as\u coverties\u dict
方法,可以以单项式表达式形式获得不同单项式的所有系数字典:

>>> p = Poly((x+2*y-z)**3)
>>> p.as_expr().as_coefficients_dict()
defaultdict(<class 'int'>, {
x**3: 1, z**3: -1, y**3: 8, y**2*z: -12, x**2*z: -3,
x*z**2: 3, x**2*y: 6, y*z**2: 6, x*y**2: 12, x*y*z: -12})
这可以转化为defaultdict,对于一个不存在的单项式,它会给出0,并且:

>>> defaultdict(int, _)
defaultdict(<class 'int'>, {(3, 0, 0): 1, (2, 1, 0): 6, (2, 0, 1): -3,
(1, 2, 0): 12, (1, 1, 1): -12, (1, 0, 2): 3, (0, 3, 0): 8, (0, 2, 1): -12,
(0, 1, 2): 6, (0, 0, 3): -1})
>>defaultdict(int,uux)
defaultdict(,{(3,0,0):1,(2,1,0):6,(2,0,1):-3,
(1, 2, 0): 12, (1, 1, 1): -12, (1, 0, 2): 3, (0, 3, 0): 8, (0, 2, 1): -12,
(0, 1, 2): 6, (0, 0, 3): -1})

无需依赖隐式变量顺序,您可以按所需顺序将变量传递给
poly
,如
poly((x+2*y-z)**3,x,y,z)
。无需依赖隐式变量顺序,您可以按所需顺序将变量传递给
poly
,如
poly((x+2*y-z)**3,x,y,z)