2016-07-19 15 views
2

私はシンボリック多項式を生成するためにsympyを使用しています。私は約30の変数と約20の定数変数を持っています。私の方程式が到達する最高のパワーは、2乗項です。1次方程式の系で一意の非縮退方程式を見つける方法

これらの方程式のうちの2^13を取って、それらのうちどれがユニークであるか(すなわち、縮退ではなく、お互いの線形結合ではない)を計算する必要があります。そうでなければ、方程式の系によって生成された行列のランクを見つける必要があります。これらの方程式のほとんどは縮退しており、お互いの線形結合です。しかし最終的には、データから一意的な方程式を抽出する必要があります。

次のように私は、システムを試みた:

  1. は空行列を作成します。
  2. 各方程式に反復する。各方程式について、行列の行に変換し、新しい行を追加して行列の階数が増加するかどうかを確認します。
  3. ランクが増加する場合は、空の行列に行を追加します。
  4. 結果の行列を出力します。

これが正しく行われると、すべての固有の式が得られるはずです。ただし、numpy.linalg.matrix_rank()はsympyシンボルでは機能しません。残念ながら、私はsympy記号で表される約20の定数を持っています。

私のユニークな方程式を見つけるにはどうすればよいですか?

  1. 非縮退方程式
  2. にそれでsympyシンボルを持つ行列のランクを評価するための方法を取得するための明示的な解決策:これらのいずれもが、私の問題を解決します。
  3. sympyは、sympy方程式が他のsympy方程式の線形結合であるかどうかを判断するための組み込み関数を持っていますか?

答えて

2

Sympyはrank方法とMatrixクラスがあります。

In [1]: x, y = symbols('x y') 

In [2]: M = Matrix([[x, y], [2*x, 2*y]]) 

In [3]: M 
Out[3]: 
⎡ x y ⎤ 
⎢  ⎥ 
⎣2⋅x 2⋅y⎦ 

In [4]: M.rank() 
Out[4]: 1 

私は実装を知らないが、それは遅いかもしれません。 アルゴリズムを改善したい場合は、e。 g。行列を行方式に縮小したままにしておく。

の入力順に依存しないより体系的なapprochは、多項式が計算してGröbner basisを使用することがあります。

関連する問題