首页 文章

如何在线性方程组中找到唯一的非简并方程

提问于
浏览
2

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

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

我试过一个系统如下:

  • 创建一个空矩阵 .

  • 迭代每个等式 . 对于每个等式,将其转换为矩阵的行,并通过添加新行来检查矩阵的等级是否增加 .

  • 如果等级增加,则将行追加到空矩阵

  • 打印生成的矩阵 .

如果正确完成,这应该给出所有独特的方程式 . 但是,numpy.linalg.matrix_rank()不适用于sympy符号 . 不幸的是,我有大约20个由sympy符号表示的常量 .

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

  • 获得非简并方程的显式解

  • 一种用于评估其中具有交感符号的矩阵的等级的方法 .
    _009_或者,sympy是否具有内置功能,用于确定sympy方程是否是其他sympy方程的线性组合?

1 回答

  • 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
    

    我不知道实现,它可能会很慢 . 所以你可能想要改进你的算法,例如: G . 通过保持矩阵减少到行梯队形式 .

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

相关问题