python - 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
.
解决方案
我在这里写了一个可以做这种事情的函数: 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 上而不是在这里)。
推荐阅读
- java - 使用 Java Stream API 比较 2 个集合和修改元素
- css - 如何将 list-disc 应用于 Markdownit 呈现的 ul?
- javascript - 将文本框值分配给 HTML Body 中的变量并传递给多个函数
- python - 使用另一个容器连接到 MongoDB docker 容器的问题
- c# - 反序列化 JsonValue 以在 System.Json 中建模
- python-3.x - 为什么dict在python中不改变?
- java - 在java中写入当前目录中的文件
- java - 带有默认内置字体的系统字体,用于不支持的字符
- python - TypeError:只能将str(不是“int”)连接到str,但是当尝试将var更改为str时,我得到一个不同的错误
- flutter - 如何在颤振应用中添加谷歌标签管理器?