我使用sympy来生成矩阵中的行列式:
from sympy import *
X1, Y1 = symbols ("X1 Y1")
x1, x2, x3, y1, y2, y3 = symbols ("x1 x2 x3 y1 y2 y3")
th12, th13 = symbols ("theta_{12} theta_{13}")
X2 = cos(th12)*X1-sin(th12)*Y1+x2-y1*cos(th12)-y1*sin(th12)
Y2 = sin(th12)*X1+cos(th12)*Y1+y2-x1*sin(th12)-y1*cos(th12)
X3 = cos(th13)*X1-sin(th13)*Y1+x3-y1*cos(th13)-y1*sin(th13)
Y3 = sin(th13)*X1+cos(th13)*Y1+y3-x1*sin(th13)-y1*cos(th13)
M=Matrix([[X1,Y1,1],[X2,Y2,1],[X3,Y3,1]])
Det=M.det()
print Det
如果您运行代码,您会注意到它会产生一个非常长的"表达。我想得到一个表达式:
X1 ** 2 + Y1 ** 2 + A * X1 + B * Y1 + C = 0(圆周方程)
所以我希望Python能够生成系数A,B和C.基本上我想将所有共享X1 ** 2的热量组合在一起,所有的热量分享Y1 ** 2等等。
如果我插入x1,x2,x3,y1,y2,y3,th12,th13的数值,我可以得到我需要的形式的表达式,但我想得到系数A,B和C
编辑:修正Xi和Yi公式,增加了更多信息。
答案 0 :(得分:4)
collect是正确的工具:
以上链接中的示例:
>>> collect(a*x**2 + b*x**2 + a*x - b*x + c, x)
c + x**2*(a + b) + x*(a - b)
在你的情况下(这里的系数没有标准化):
col = collect(Det, [X1, Y1], evaluate=False)
A = col[X1]
B = col[Y1]
C = col[S.One]
使用evaluate=False
,您将获得有关因素的字典。否则,你得到完整的表达。