1

我正在使用 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 的所有 therms、共享 Y1**2 的所有 therms 等进行分组。

如果我为 x1、x2、x3、y1、y2、y3、th12、th13 插入数值,我可以得到我需要的形式的表达式,但我也想得到系数 A、B 和 C。

编辑:修正 Xi 和 Yi 公式,添加更多信息。

4

1 回答 1

4

收集是正确的工具:

来自上述链接的示例:

>>> 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,您将获得包含因子的字典。否则,您将获得完整的表达式。

于 2014-05-03T11:13:38.967 回答