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

Sympy求解不等式时,如何假设符号因子为正以分离变量?

用SymPy求解含符号系数的不等式

要得到分离出t的分式形式解,有两种可靠方法:

方法一:定义符号时添加预设条件

在创建符号时直接指定正性及大小关系假设,让SymPy提前知晓系数符号:

from typing import Final
import sympy as sym

# 定义符号时添加正性假设,同时指定tau_f > tau_O的关系
tau_S      : Final[sym.Symbol] = sym.Symbol('\\tau_\\mathrm{S}', positive=True)
tau_f      : Final[sym.Symbol] = sym.Symbol('\\tau_f', positive=True)
tau_O      : Final[sym.Symbol] = sym.Symbol('\\tau_\\mathrm{O}', positive=True)
t          : Final[sym.Symbol] = sym.Symbol('t')
tau_on_min : Final[sym.Symbol] = sym.Symbol('\\tau_\\mathrm{on,min}', positive=True)

assumption = sym.Q.greater(tau_f, tau_O)
eq = tau_O*(-t-1)-tau_S + tau_f*t >= tau_on_min

# 使用solveset并传入假设条件
solution = sym.solveset(eq, t, domain=sym.Reals, assumptions=assumption)
print(solution)

运行后会得到t >= (tau_O + tau_S + tau_on_min)/(tau_f - tau_O)的分式形式解。

方法二:先求解再用条件细化

如果不想在定义符号时加假设,可以先得到初步结果,再用refine函数应用系数符号条件:

from typing import Final
import sympy as sym

tau_S      : Final[sym.Symbol] = sym.Symbol('\\tau_\\mathrm{S}')
tau_f      : Final[sym.Symbol] = sym.Symbol('\\tau_f')
tau_O      : Final[sym.Symbol] = sym.Symbol('\\tau_\\mathrm{O}')
t          : Final[sym.Symbol] = sym.Symbol('t')
tau_on_min : Final[sym.Symbol] = sym.Symbol('\\tau_\\mathrm{on,min}')

eq = tau_O*(-t-1)-tau_S + tau_f*t >= tau_on_min

# 获取初步求解结果
pre_sol = sym.solve(eq, t, dict=True)[0]
# 定义系数为正的条件
cond = sym.Q.greater(tau_f, tau_O)
# 应用条件细化解
final_sol = sym.refine(pre_sol, cond)
print(final_sol)

注意事项

直接给solve函数额外传入条件会报错,因为solve没有对应参数。必须通过符号定义时的假设、solveset的assumptions参数或refine函数这三种方式传递条件,让SymPy明确系数符号后,才能完成除法分离t的操作。

内容的提问来源于stack exchange,提问作者mef.user1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 19:43:09