首页 > 解决方案 > 无法将 SymPy 变量约束为实数

问题描述

SymPy 给了我复杂的解决方案,即使我将变量限制为真实的,就像在这个答案中一样。

这是一个找到单位球体与平面 X=1 的交点的示例。应该有 1 个真正的解决方案,(1,0,0)。

>>> import sympy
>>> x,y,z = sympy.symbols('x,y,z', real=True)
>>> list(sympy.solve([x**2 + y**2 + z**2 - 1, x - 1], [x,y,z]))
[(1, -I*z, z), (1, I*z, z)]

这些是正确的,但不是真实的。

我不能使用solveset(…, domain=S.Reals),因为solvset似乎不支持方程组。

标签: pythonsympy

解决方案


这似乎是 sympy 和已知问题的公开问题: https ://github.com/sympy/sympy/issues/9973

您可能会破解一个函数,该函数使用启发式检查是否存在真正的解决方案 - 对于每个复杂部分,它将求解将复杂部分设置为 0 的方程)。如果解决方案不简单,这可能会导致分支和大量工作。


推荐阅读