如何在线性方程组

时间:2016-07-19 18:39:21

标签: python numpy sympy

我使用sympy来产生符号多项式方程。我有大约30个变量和大约20个常量变量。我的方程达到的最高功率是平方项。

我需要取这些方程中的2 ^ 13并计算出它们中有多少是唯一的(即,不是彼此的线性组合,不是退化)。否则说,我需要找到由方程组产生的矩阵的秩。这些方程中的大多数是简并的,它们是彼此的线性组合。然而,最终,我需要从数据中提取独特的方程式。

我尝试了如下系统:

  1. 创建一个空矩阵。
  2. 迭代每个等式。对于每个等式,将其转换为矩阵的行,并通过添加新行来检查矩阵的等级是否增加。
  3. 如果等级增加,请将行追加到空矩阵
  4. 打印生成的矩阵。
  5. 如果正确完成,这应该给出所有独特的方程式。但是,numpy.linalg.matrix_rank()不适用于sympy符号。不幸的是,我有大约20个由sympy符号表示的常量。

    如何找到我独特的方程式?其中任何一个都可以解决我的问题:

    1. 获得非退化方程的显式解决方案
    2. 用于评估其中具有交感符号的矩阵的秩的方法。
    3. 或者,sympy是否具有内置功能,用于确定sympy方程是否是其他sympy方程的线性组合?

1 个答案:

答案 0 :(得分: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。通过将矩阵简化为行梯形式。

更系统的approch,它不依赖于输入顺序 多项式可能会计算并使用Gröbner basis