2016-07-19 21 views
2

我使用sympy來產生符號多項式方程。我有大約30個變量和大約20個常量變量。我的方程式達到的最高功率是一個平方項。如何在線性方程組中找到唯一的非簡併方程

我需要採取這些方程的2^13,並找出它們中有多少是唯一的(即,不是彼此的線性組合,而不是退化)。否則說,我需要找到由方程組產生的矩陣的秩。這些方程中的大多數是簡併的,它們是彼此的線性組合。但是,最終,我需要從數據中提取獨特的方程。

我嘗試了系統如下:

  1. 創建一個空矩陣。
  2. 迭代每個方程。對於每個等式,將其轉化爲矩陣的行,並通過添加新行來檢查矩陣的等級是否增加。
  3. 如果排名增加,則將該行添加到空矩陣中
  4. 打印生成的矩陣。

如果做得正確,這應該給所有獨特的方程。但是,numpy.linalg.matrix_rank()不適用於sympy符號。不幸的是,我有大約20個由sympy符號表示的常量。

如何找到我的獨特方程?所有這些都將解決我的問題:

  1. 一個明確的解決方案,使非退化的方程
  2. 一種用於評估在有sympy符號矩陣的秩的方法。
  3. 或者,sympy是否具有內置功能來確定sympy方程是否是其他sympy方程的線性組合?

回答

2

Sympy有Matrix類與rank方法:

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 

我不知道實現,這可能是緩慢的。 所以你可能想改進你的算法,例如。 G。通過保持矩陣縮減爲梯隊形式。

一個更系統的方法不依賴於多項式的輸入順序 可能會計算和使用一個Gröbner basis