You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加正性约束后SymPy solve返回空集,如何获取正解?

解决SymPy求解正约束方程返回空集的问题

当你为符号设置positive=True后,solve函数处理乘积类方程(如x^2*y^2、x*y)时会返回空集,这是因为符号正性约束下solve的求解逻辑存在限制。你可以通过以下两种方式修改代码以获取正解:

方法一:先求解再过滤正解

先不设置符号的正性约束,获取所有解后再筛选出满足正性要求的解:

from sympy import *
x, y, u = symbols('x y u')
utility = sympify(input())
utility_function = Eq(u, utility)
all_solutions = solve(utility_function, y)
# 筛选正解:利用x、u为正的假设验证解的正负
positive_solutions = []
for sol in all_solutions:
    if refine(sol > 0, And(x > 0, u > 0)):
        positive_solutions.append(sol)
print(positive_solutions)

方法二:使用solveset指定正实数域

solveset比solve更适配带域约束的求解场景,结合符号的positive=True和正实数域限制,可直接得到正解:

from sympy import *
x, y, u = symbols('x y u', positive=True)
utility = sympify(input())
utility_function = Eq(u, utility)
# 限定求解域为正实数集
solutions = solveset(utility_function, y, domain=S.PositiveReals)
print(solutions)

例如输入x*y时,方法二会直接返回{u/x};输入x^2*y^2时,会返回{sqrt(u)/x},均符合正解要求。

内容的提问来源于stack exchange,提问作者KTSB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 19:25:27