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 を共有するすべてのサーム、Y1**2 を共有するすべてのサームなどをグループ化したいと考えています。

x1、x2、x3、y1、y2、y3、th12、th13 の数値を挿入すると、必要な形式で式を取得できますが、係数 A、B、C も取得したいと考えています。

編集: Xi と Yi 式の修正、詳細情報を追加。

4

1 に答える 1

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すると、要因を含む口述が得られます。それ以外の場合は、完全な式が得られます。

于 2014-05-03T11:13:38.967 に答える