首页 > 解决方案 > Sympy:如何显示导致被零除的条件?

问题描述

如果你简化类似x/x它的结果1,但如果有办法让它以某种方式说的话会很好1 iff x is not 0

一个更严重的例子:我想在一列中对带有符号的矩阵进行行归约,并查看符号的哪些值使其中一个条目为零。这是我的代码和输出:

g, h, k = symbols('g h k')
A = Matrix([[1,-4,7,g],[0,3,-5,h],[-2,5,-9,k]])
A.rref()

这导致| Matrix | (((1 0 1/3 0) (0 1 -5/3 0) (0 0 0 1))) | (0 1 3) |1右下角的条目实际上是简化的结果(2g+h+k)/(2g+h+k),我只知道这是因为我是手工完成的。我希望它以某种方式告诉我,这仅在(2g+h+k) is not zero.

标签: pythonsympy

解决方案


我在这里写了一个可以做这种事情的函数: https ://github.com/sympy/sympy/issues/16861

不幸的是,我还没有把它整合到 sympy 中,并且围绕它应该返回的确切内容以及可以在 sympy 中使用的位置存在一些问题需要解决。

无论如何,您都可以这样做:

In [5]: eqs = list(A * Matrix([x, y, z, -1]))

In [6]: eqs
Out[6]: [-g + x - 4⋅y + 7⋅z, -h + 3⋅y - 5⋅z, -k - 2⋅x + 5⋅y - 9⋅z]

In [7]: linsolve_cond(eqs, [x, y, z])
Out[7]: 
⎧⎧⎛    4⋅h   τ₀  h   5⋅τ₀    ⎞         ⎫                         
⎪⎨⎜g + ─── - ──, ─ + ────, τ₀⎟ | τ₀ ∊ ℂ⎬  for 6⋅g + 3⋅h + 3⋅k = 0
⎨⎩⎝     3    3   3    3      ⎠         ⎭                         
⎪                                                                
⎩                   ∅                            otherwise 

欢迎任何关于它工作情况的反馈(最好在 github 上而不是在这里)。


推荐阅读